- Remember can now handle Targeted Players.

- Convert Laquatus's Champion to Script
This commit is contained in:
jendave
2011-08-07 00:52:49 +00:00
parent dc2890f3de
commit 197136917d
7 changed files with 56 additions and 149 deletions

View File

@@ -1,8 +1,12 @@
Name:Laquatus's Champion
ManaCost:4 B B
Types:Creature Nightmare Horror
Text:When Laquatus's Champion enters the battlefield, target player loses 6 life.\r\nWhen Laquatus's Champion leaves the battlefield, that player gains 6 life.
Text:no text
PT:6/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME enters the battlefield, target player loses 6 life.
SVar:TrigLoseLife:DB$LoseLife | ValidTgts$ Player | TgtPrompt$ Select a player | LifeAmount$ 6 | RememberTargets$ True | ForgetOtherTargets$ True
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME leaves the battlefield, that player gains 6 life.
SVar:TrigGainLife:DB$GainLife | Defined$ Remembered | LifeAmount$ 6
A:AB$ Regenerate | Cost$ B | SpellDescription$ Regenerate CARDNAME.
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/laquatuss_champion.jpg

View File

@@ -52,7 +52,7 @@ public class Card extends MyObservable {
private ArrayList<Ability_Mana> manaAbility = new ArrayList<Ability_Mana>();
private ArrayList<Card_Color> cardColor = new ArrayList<Card_Color>();
private ArrayList<Card> rememberedCards = new ArrayList<Card>();
private ArrayList<Object> rememberedObjects = new ArrayList<Object>();
private ArrayList<Card> imprintedCards = new ArrayList<Card>();
private HashMap<Card, Integer> receivedDamageFromThisTurn = new HashMap<Card, Integer>();
@@ -190,19 +190,19 @@ public class Card extends MyObservable {
private int abilityUsed; //How many times has this ability been used?
public void addRemembered(Card c)
public void addRemembered(Object o)
{
rememberedCards.add(c);
rememberedObjects.add(o);
}
public ArrayList<Card> getRemembered()
public ArrayList<Object> getRemembered()
{
return rememberedCards;
return rememberedObjects;
}
public void clearRemembered()
{
rememberedCards.clear();
rememberedObjects.clear();
}
public void addImprinted(Card c) {
@@ -1212,14 +1212,20 @@ public class Card extends MyObservable {
}
//Remembered cards
if(rememberedCards.size() > 0)
if(rememberedObjects.size() > 0){
sb.append("\r\nRemembered: \r\n");
for(Card c : rememberedCards)
{
sb.append(c.getName() + "(");
sb.append(c.getUniqueNumber());
sb.append(")");
sb.append("\r\n");
for(Object o : rememberedObjects){
if (o instanceof Card){
Card c = (Card)o;
sb.append(c.getName());
sb.append("(");
sb.append(c.getUniqueNumber());
sb.append(")");
}
else
sb.append(o.toString());
sb.append("\r\n");
}
}
return sb.toString().replaceAll("CARDNAME", getName()).trim();

View File

@@ -924,8 +924,10 @@ public class AbilityFactory {
else if (calcX[0].startsWith("Remembered")) {
// Add whole Remembered list to handlePaid
list = new CardList();
for(Card c : card.getRemembered())
list.add(AllZoneUtil.getCardState(c));
for(Object o : card.getRemembered()){
if (o instanceof Card)
list.add(AllZoneUtil.getCardState((Card)o));
}
}
else if (calcX[0].startsWith("Imprinted")) {
// Add whole Imprinted list to handlePaid
@@ -979,9 +981,9 @@ public class AbilityFactory {
}
else if (defined.equals("Remembered")){
for(Card rem : hostCard.getRemembered()){
// Get current state of each remembered card
cards.add(AllZoneUtil.getCardState(rem));
for(Object o : hostCard.getRemembered()){
if (o instanceof Card)
cards.add(AllZoneUtil.getCardState((Card)o));
}
}
@@ -1039,6 +1041,12 @@ public class AbilityFactory {
players.add(p);
}
}
else if (defined.equals("Remembered")){
for(Object rem : card.getRemembered()){
if (rem instanceof Player)
players.add((Player)rem);
}
}
else if (defined.startsWith("Triggered")){
Object o = null;
if (defined.endsWith("Controller")){
@@ -1234,7 +1242,6 @@ public class AbilityFactory {
public static void handleRemembering(AbilityFactory AF)
{
HashMap<String,String> params = AF.getMapParams();
ArrayList<Card> tgts;
Card host;
if(!params.containsKey("RememberTargets") && !params.containsKey("Imprint"))
@@ -1253,15 +1260,15 @@ public class AbilityFactory {
}
Target tgt = AF.getAbTgt();
tgts = (tgt == null) ? new ArrayList<Card>() : tgt.getTargetCards();
if(params.containsKey("RememberTargets")) {
for(Card c : tgts)
{
host.addRemembered(c);
ArrayList<Object> tgts = (tgt == null) ? new ArrayList<Object>() : tgt.getTargets();
for(Object o : tgts){
host.addRemembered(o);
}
}
else if(params.containsKey("Imprint")) {
ArrayList<Card> tgts = (tgt == null) ? new ArrayList<Card>() : tgt.getTargetCards();
host.addImprinted(tgts);
}
}

View File

@@ -687,13 +687,18 @@ public class AbilityFactory_ChangeZone {
type = type.replace("Triggered", "Card");
}
else if (type.contains("Remembered")){
ArrayList<Card> rem = source.getRemembered();
boolean hasRememberedCard = false;
for(Object o : source.getRemembered()){
if (o instanceof Card){
hasRememberedCard = true;
source = (Card)o;
type = type.replace("Remembered", "Card");
break;
}
}
if (rem.isEmpty())
if (!hasRememberedCard)
return new CardList();
source = rem.get(0);
type = type.replace("Remembered", "Card");
}
return list.getValidCards(type.split(","), sa.getActivatingPlayer(), source);

View File

@@ -431,60 +431,6 @@ public class CardFactoryUtil {
return AI_getCheapestPermanent(list, null, false);
}
@Deprecated
public static Input input_targetCreaturePlayer(final SpellAbility spell, boolean targeted, boolean free) {
return input_targetCreaturePlayer(spell, Command.Blank, targeted, free);
}
@Deprecated
public static Input input_targetCreaturePlayer(final SpellAbility spell, final Command paid, final boolean targeted, final boolean free) {
Input target = new Input() {
private static final long serialVersionUID = 2781418414287281005L;
@Override
public void showMessage() {
AllZone.Display.showMessage("Select target Creature, Player, or Planeswalker");
ButtonUtil.enableOnlyCancel();
}
@Override
public void selectButtonCancel() {
stop();
}
@Override
public void selectCard(Card card, PlayerZone zone) {
if((card.isCreature() || card.isPlaneswalker()) && zone.is(Constant.Zone.Battlefield)
&& (!targeted || canTarget(spell, card))) {
spell.setTargetCard(card);
done();
}
}//selectCard()
@Override
public void selectPlayer(Player player) {
spell.setTargetPlayer(player);
done();
}
void done() {
paid.execute();
if(spell.getManaCost().equals("0") || this.isFree()) {
if (spell.getAfterPayMana() == null){
this.setFree(false);
AllZone.Stack.add(spell, spell.getSourceCard().getManaCost().contains("X"));
stop();
}
else{
stopSetNext(spell.getAfterPayMana());
}
} else stopSetNext(new Input_PayManaCost(spell));
}
};
return target;
}//input_targetCreaturePlayer()
public static Input input_Spell(final SpellAbility spell, final CardList choices, final boolean free) {
Input target = new Input() {
private static final long serialVersionUID = 2781418414287281005L;

View File

@@ -3233,67 +3233,6 @@ public class CardFactory_Creatures {
}//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Laquatus's Champion")) {
final SpellAbility abilityComes = new Ability(card, "0") {
@Override
public void resolve() {
getTargetPlayer().loseLife(6,card);
}//resolve()
};
final Input inputComes = new Input() {
private static final long serialVersionUID = -2666229064706311L;
@Override
public void showMessage() {
stopSetNext(CardFactoryUtil.input_targetPlayer(abilityComes));
ButtonUtil.disableAll();//to disable the Cancel button
}
};
Command commandComes = new Command() {
private static final long serialVersionUID = -4246229185669164581L;
public void execute() {
if(card.getController().isHuman()) AllZone.InputControl.setInput(inputComes);
else //computer
{
abilityComes.setTargetPlayer(AllZone.HumanPlayer);
AllZone.Stack.addSimultaneousStackEntry(abilityComes);
}//else
}//execute()
};//CommandComes
Command commandLeavesPlay = new Command() {
private static final long serialVersionUID = 9172348861441804625L;
public void execute() {
//System.out.println(abilityComes.getTargetCard().getName());
SpellAbility ability = new Ability(card, "0") {
@Override
public void resolve() {
abilityComes.getTargetPlayer().gainLife(6, card);
}//resolve()
};//SpellAbility
StringBuilder sb = new StringBuilder();
sb.append("Laquatus's Champion - ").append(abilityComes.getTargetPlayer()).append(" regains 6 life.");
ability.setStackDescription(sb.toString());
AllZone.Stack.addSimultaneousStackEntry(ability);
}//execute()
};//Command
card.addComesIntoPlayCommand(commandComes);
card.addLeavesPlayCommand(commandLeavesPlay);
}//*************** END ************ END **************************
//*************** START *********** START **************************
else if(cardName.equals("Meddling Mage")) {
final String[] input = new String[1];

View File

@@ -347,11 +347,11 @@ public class TriggerHandler {
host = regtrig.getHostCard();
// This will fix the Oblivion Ring issue, but is this the right fix?
for(Card c : regtrig.getHostCard().getRemembered())
for(Object o : regtrig.getHostCard().getRemembered())
{
if(!host.getRemembered().contains(c))
if(!host.getRemembered().contains(o))
{
host.addRemembered(c);
host.addRemembered(o);
}
}