From 768a26a5d43a61f0ff76c91978a12b1891638f95 Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 13 Oct 2013 08:33:38 +0000 Subject: [PATCH] - Converted Tangle Wire to script --- res/cardsfolder/t/tangle_wire.txt | 5 +- .../forge/card/ability/ai/ChooseCardAi.java | 21 +++++ src/main/java/forge/game/phase/Upkeep.java | 79 ------------------- 3 files changed, 25 insertions(+), 80 deletions(-) diff --git a/res/cardsfolder/t/tangle_wire.txt b/res/cardsfolder/t/tangle_wire.txt index eda5945f41a..682fbbd6c8c 100644 --- a/res/cardsfolder/t/tangle_wire.txt +++ b/res/cardsfolder/t/tangle_wire.txt @@ -1,7 +1,10 @@ Name:Tangle Wire ManaCost:3 Types:Artifact -Text:At the beginning of each player's upkeep, that player taps an untapped artifact, creature, or land he or she controls for each fade counter on CARDNAME. +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigChooseToTap | TriggerDescription$ At the beginning of each player's upkeep, that player taps an untapped artifact, creature, or land he or she controls for each fade counter on CARDNAME. +SVar:TrigChooseToTap:AB$ ChooseCard | Cost$ 0 | Defined$ TriggeredPlayer | Choices$ Artifact.ActivePlayerCtrl,Creature.ActivePlayerCtrl,Land.ActivePlayerCtrl | Amount$ X | References$ X | Mandatory$ True | AILogic$ TangleWire | SubAbility$ DBTap +SVar:DBTap:DB$ Tap | Defined$ ChosenCard +SVar:X:Count$CardCounters.FADE K:Fading:4 SVar:RemRandomDeck:True SVar:NeedsToPlayVar:Y GE2 diff --git a/src/main/java/forge/card/ability/ai/ChooseCardAi.java b/src/main/java/forge/card/ability/ai/ChooseCardAi.java index 31cbb422d86..4db7abd3c91 100644 --- a/src/main/java/forge/card/ability/ai/ChooseCardAi.java +++ b/src/main/java/forge/card/ability/ai/ChooseCardAi.java @@ -159,6 +159,27 @@ public class ChooseCardAi extends SpellAbilityAi { Collections.reverse(creats); choice = creats.get(0); } + } else if ("TangleWire".equals(logic)) { + List betterList = CardLists.filter(options, new Predicate() { + @Override + public boolean apply(final Card c) { + if (c.isCreature()) { + return false; + } + for (SpellAbility sa : c.getAllSpellAbilities()) { + if (sa.getPayCosts() != null && sa.getPayCosts().hasTapCost()) { + return false; + } + } + return true; + } + }); + System.out.println("Tangle Wire" + options + " - " + betterList); + if (!betterList.isEmpty()) { + choice = betterList.get(0); + } else { + choice = ComputerUtilCard.getWorstPermanentAI(options, false, false, false, false); + } } else { choice = ComputerUtilCard.getBestAI(options); } diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java index a1582bbcd4d..624785e46d4 100644 --- a/src/main/java/forge/game/phase/Upkeep.java +++ b/src/main/java/forge/game/phase/Upkeep.java @@ -17,15 +17,12 @@ */ package forge.game.phase; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import com.google.common.base.Predicate; import forge.Card; import forge.CardLists; -import forge.CardPredicates; -import forge.Singletons; import forge.CounterType; import forge.card.ability.AbilityFactory; import forge.card.cardfactory.CardFactoryUtil; @@ -35,12 +32,9 @@ import forge.card.spellability.Ability; import forge.card.spellability.SpellAbility; import forge.card.trigger.TriggerType; import forge.game.Game; -import forge.game.ai.ComputerUtilCard; import forge.game.player.Player; import forge.game.player.PlayerController.ManaPaymentPurpose; import forge.game.zone.ZoneType; -import forge.gui.input.InputSelectCards; -import forge.gui.input.InputSelectCardsFromList; /** *

@@ -79,8 +73,6 @@ public class Upkeep extends Phase { Upkeep.upkeepUpkeepCost(game); // sacrifice unless upkeep cost is paid Upkeep.upkeepEcho(game); - Upkeep.upkeepTangleWire(game); - game.getStack().unfreezeStack(); } @@ -188,75 +180,4 @@ public class Upkeep extends Phase { } // for } // upkeepCost - - /** - *

- * upkeepTangleWire. - *

- */ - private static void upkeepTangleWire(final Game game) { - final Player player = game.getPhaseHandler().getPlayerTurn(); - final List wires = CardLists.filter(game.getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals("Tangle Wire")); - - for (final Card source : wires) { - final SpellAbility ability = new Ability(source, ManaCost.ZERO) { - @Override - public void resolve() { - final int num = source.getCounters(CounterType.FADE); - final List list = new ArrayList(); - for( Card c : player.getCardsIn(ZoneType.Battlefield)) { - if ((c.isArtifact() || c.isLand() || c.isCreature()) && c.isUntapped()) - list.add(c); - } - - if (player.isComputer()) { - for (int i = 0; i < num; i++) { - Card toTap = ComputerUtilCard.getWorstPermanentAI(list, false, false, false, false); - // try to find non creature cards without tap abilities - List betterList = CardLists.filter(list, new Predicate() { - @Override - public boolean apply(final Card c) { - if (c.isCreature()) { - return false; - } - for (SpellAbility sa : c.getAllSpellAbilities()) { - if (sa.getPayCosts() != null && sa.getPayCosts().hasTapCost()) { - return false; - } - } - return true; - } - }); - System.out.println("Tangle Wire" + list + " - " + betterList); - if (!betterList.isEmpty()) { - toTap = betterList.get(0); - } - if (null != toTap) { - toTap.tap(); - list.remove(toTap); - } - } - } else { - if (list.size() > num){ - InputSelectCards inp = new InputSelectCardsFromList(num, num, list); - inp.setMessage(source.getName() + " - Select %d untapped artifact(s), creature(s), or land(s) you control"); - Singletons.getControl().getInputQueue().setInputAndWait(inp); - for(Card crd : inp.getSelected()) - crd.tap(); - } else { - for(Card crd : list) - crd.tap(); - } - } - } - }; - String message = source.getName() + " - " + player + " taps X artifacts, creatures or lands he or she controls."; - ability.setStackDescription(message); - ability.setDescription(message); - ability.setActivatingPlayer(source.getController()); - - game.getStack().addSimultaneousStackEntry(ability); - - } // foreach(wire) - } // upkeepTangleWire() } // end class Upkeep