From b55dfebdedb0ac630aef323eec354af1a0ea28cb Mon Sep 17 00:00:00 2001 From: moomarc Date: Mon, 16 Jul 2012 13:01:49 +0000 Subject: [PATCH] Converted Jhoira, of the Ghitu to script --- res/cardsfolder/j/jhoira_of_the_ghitu.txt | 5 +- .../card/abilityfactory/AbilityFactory.java | 12 +++- .../AbilityFactoryCounters.java | 66 +++++++++---------- .../abilityfactory/AbilityFactoryPump.java | 3 + .../cardfactory/CardFactoryCreatures.java | 51 -------------- 5 files changed, 50 insertions(+), 87 deletions(-) diff --git a/res/cardsfolder/j/jhoira_of_the_ghitu.txt b/res/cardsfolder/j/jhoira_of_the_ghitu.txt index 92ef6163e4e..aa6a3bd6f32 100644 --- a/res/cardsfolder/j/jhoira_of_the_ghitu.txt +++ b/res/cardsfolder/j/jhoira_of_the_ghitu.txt @@ -1,7 +1,10 @@ Name:Jhoira of the Ghitu ManaCost:1 U R Types:Legendary Creature Human Wizard -Text:2, Exile a nonland card from your hand: Put four time counters on the exiled card. If it doesn't have suspend, it gains suspend. +Text:no text +A:AB$ PutCounter | Cost$ 2 ExileFromHand<1/Card.nonLand/nonland card> | CostDesc$ 2, Exile a nonland card from your hand: | RememberCostCards$ True | Defined$ Remembered | CounterType$ TIME | CounterNum$ 4 | SubAbility$ GiveSuspend | TgtZone$ Exile | StackDescription$ Put four time counters on the exiled card. If it doesn't have suspend, it gains suspend. | SpellDescription$ Put four time counters on the exiled card. If it doesn't have suspend, it gains suspend. (At the beginning of your upkeep, remove a time counter from that card. When the last is removed, cast it without paying its mana cost. If it's a creature, it has haste.) +SVar:GiveSuspend:DB$ Pump | Defined$ Remembered | KW$ Suspend | PumpZone$ Exile | Permanent$ True | SubAbility$ DBCleanup | StackDescription$ If it doesn't have suspend, it gains suspend. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True PT:2/2 SVar:RemRandomDeck:True SVar:Rarity:Rare diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactory.java b/src/main/java/forge/card/abilityfactory/AbilityFactory.java index bef04b0400a..a2c2693c35b 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactory.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactory.java @@ -2551,7 +2551,8 @@ public class AbilityFactory { final HashMap params = af.getMapParams(); Card host; - if (!params.containsKey("RememberTargets") && !params.containsKey("RememberToughness")) { + if (!params.containsKey("RememberTargets") && !params.containsKey("RememberToughness") + && !params.containsKey("RememberCostCards")) { return; } @@ -2569,6 +2570,15 @@ public class AbilityFactory { host.addRemembered(o); } } + + if (params.containsKey("RememberCostCards")) { + if (params.get("Cost").contains("Exile")) { + final CardList paidListExiled = sa.getPaidList("Exiled"); + for (final Card exiledAsCost : paidListExiled) { + host.addRemembered(exiledAsCost); + } + } + } } /** diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java index bbb77a0638e..73fbd5909f7 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java @@ -229,52 +229,50 @@ public class AbilityFactoryCounters { private static String putStackDescription(final AbilityFactory af, final SpellAbility sa) { final HashMap params = af.getMapParams(); final StringBuilder sb = new StringBuilder(); + final Card card = sa.getSourceCard(); if (!(sa instanceof AbilitySub)) { - sb.append(sa.getSourceCard().getName()).append(" - "); + sb.append(card.getName()).append(" - "); } else { sb.append(" "); } - final Counters cType = Counters.valueOf(params.get("CounterType")); - final Card card = sa.getSourceCard(); - final int amount = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("CounterNum"), sa); - - sb.append("Put "); - if (params.containsKey("UpTo")) { - sb.append("up to "); - } - sb.append(amount).append(" ").append(cType.getName()).append(" counter"); - if (amount != 1) { - sb.append("s"); - } - sb.append(" on "); - - ArrayList tgtCards; - - final Target tgt = sa.getTarget(); - if (tgt != null) { - tgtCards = tgt.getTargetCards(); + if (params.containsKey("StackDescription")) { + sb.append(params.get("StackDescription")); } else { - tgtCards = AbilityFactory.getDefinedCards(card, params.get("Defined"), sa); - } - - final Iterator it = tgtCards.iterator(); - while (it.hasNext()) { - final Card tgtC = it.next(); - if (tgtC.isFaceDown()) { - sb.append("Morph"); + final Counters cType = Counters.valueOf(params.get("CounterType")); + final int amount = AbilityFactory.calculateAmount(card, params.get("CounterNum"), sa); + sb.append("Put "); + if (params.containsKey("UpTo")) { + sb.append("up to "); + } + sb.append(amount).append(" ").append(cType.getName()).append(" counter"); + if (amount != 1) { + sb.append("s"); + } + sb.append(" on "); + ArrayList tgtCards; + final Target tgt = sa.getTarget(); + if (tgt != null) { + tgtCards = tgt.getTargetCards(); } else { - sb.append(tgtC); + tgtCards = AbilityFactory.getDefinedCards(card, params.get("Defined"), sa); } + final Iterator it = tgtCards.iterator(); + while (it.hasNext()) { + final Card tgtC = it.next(); + if (tgtC.isFaceDown()) { + sb.append("Morph"); + } else { + sb.append(tgtC); + } - if (it.hasNext()) { - sb.append(", "); + if (it.hasNext()) { + sb.append(", "); + } } + sb.append("."); } - - sb.append("."); - final AbilitySub abSub = sa.getSubAbility(); if (abSub != null) { sb.append(abSub.getStackDescription()); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java index 930d187d751..ae82e6d27c6 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java @@ -1308,6 +1308,9 @@ public class AbilityFactoryPump { for (int i = 0; i < this.keywords.size(); i++) { applyTo.addExtrinsicKeyword(this.keywords.get(i)); + if (this.keywords.get(i).equals("Suspend")) { + applyTo.setSuspend(true); + } } if (!this.params.containsKey("Permanent")) { diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java index 24828284184..689b33485f2 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java @@ -300,55 +300,6 @@ public class CardFactoryCreatures { card.addComesIntoPlayCommand(intoPlay); } - private static void getCard_JhoiraOfTheGhitu(final Card card, final String cardName) { - final Stack chosen = new Stack(); - final SpellAbility ability = new Ability(card, "2") { - @Override - public boolean canPlay() { - CardList possible = card.getController().getCardsIn(ZoneType.Hand); - possible = possible.filter(CardListFilter.NON_LANDS); - return !possible.isEmpty() && super.canPlay(); - } - - @Override - public boolean canPlayAI() { - return false; - } - - @Override - public void resolve() { - final Card c = chosen.pop(); - c.addCounter(Counters.TIME, 4); - c.setSuspend(true); - } - }; - - ability.setAfterPayMana(new Input() { - private static final long serialVersionUID = -1647181037510967127L; - - @Override - public void showMessage() { - ButtonUtil.disableAll(); - CMatchUI.SINGLETON_INSTANCE.showMessage("Exile a nonland card from your hand."); - } - - @Override - public void selectCard(final Card c, final PlayerZone zone) { - if (zone.is(ZoneType.Hand) && !c.isLand()) { - Singletons.getModel().getGameAction().exile(c); - chosen.push(c); - final StringBuilder sb = new StringBuilder(); - sb.append(card.toString()).append(" - Suspending ").append(c.toString()); - ability.setStackDescription(sb.toString()); - AllZone.getStack().add(ability); - this.stop(); - } - } - }); - - card.addSpellAbility(ability); - } - private static void getCard_VedalkenPlotter(final Card card, final String cardName) { final Card[] target = new Card[2]; final int[] index = new int[1]; @@ -1640,8 +1591,6 @@ public class CardFactoryCreatures { getCard_PhylacteryLich(card, cardName); } else if (cardName.equals("Sky Swallower")) { getCard_SkySwallower(card, cardName); - } else if (cardName.equals("Jhoira of the Ghitu")) { - getCard_JhoiraOfTheGhitu(card, cardName); } else if (cardName.equals("Vedalken Plotter")) { getCard_VedalkenPlotter(card, cardName); } else if (cardName.equals("Painter's Servant")) {