- 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 Name:Laquatus's Champion
ManaCost:4 B B ManaCost:4 B B
Types:Creature Nightmare Horror 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 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. A:AB$ Regenerate | Cost$ B | SpellDescription$ Regenerate CARDNAME.
SVar:Rarity:Rare SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/laquatuss_champion.jpg 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<Ability_Mana> manaAbility = new ArrayList<Ability_Mana>();
private ArrayList<Card_Color> cardColor = new ArrayList<Card_Color>(); 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 ArrayList<Card> imprintedCards = new ArrayList<Card>();
private HashMap<Card, Integer> receivedDamageFromThisTurn = new HashMap<Card, Integer>(); 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? 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() public void clearRemembered()
{ {
rememberedCards.clear(); rememberedObjects.clear();
} }
public void addImprinted(Card c) { public void addImprinted(Card c) {
@@ -1212,14 +1212,20 @@ public class Card extends MyObservable {
} }
//Remembered cards //Remembered cards
if(rememberedCards.size() > 0) if(rememberedObjects.size() > 0){
sb.append("\r\nRemembered: \r\n"); sb.append("\r\nRemembered: \r\n");
for(Card c : rememberedCards) for(Object o : rememberedObjects){
{ if (o instanceof Card){
sb.append(c.getName() + "("); Card c = (Card)o;
sb.append(c.getUniqueNumber()); sb.append(c.getName());
sb.append(")"); sb.append("(");
sb.append("\r\n"); sb.append(c.getUniqueNumber());
sb.append(")");
}
else
sb.append(o.toString());
sb.append("\r\n");
}
} }
return sb.toString().replaceAll("CARDNAME", getName()).trim(); return sb.toString().replaceAll("CARDNAME", getName()).trim();

View File

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

View File

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

View File

@@ -430,61 +430,7 @@ public class CardFactoryUtil {
//Planeswalkers fall through to here, lands will fall through if there aren't very many //Planeswalkers fall through to here, lands will fall through if there aren't very many
return AI_getCheapestPermanent(list, null, false); 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) { public static Input input_Spell(final SpellAbility spell, final CardList choices, final boolean free) {
Input target = new Input() { Input target = new Input() {
private static final long serialVersionUID = 2781418414287281005L; private static final long serialVersionUID = 2781418414287281005L;

View File

@@ -3233,67 +3233,6 @@ public class CardFactory_Creatures {
}//*************** END ************ END ************************** }//*************** 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 ************************** //*************** START *********** START **************************
else if(cardName.equals("Meddling Mage")) { else if(cardName.equals("Meddling Mage")) {
final String[] input = new String[1]; final String[] input = new String[1];

View File

@@ -347,11 +347,11 @@ public class TriggerHandler {
host = regtrig.getHostCard(); host = regtrig.getHostCard();
// This will fix the Oblivion Ring issue, but is this the right fix? // 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);
} }
} }