From 27f76c9ee80ce958e013c88d711c623a542231de Mon Sep 17 00:00:00 2001 From: excessum Date: Sat, 15 Aug 2015 14:06:56 +0000 Subject: [PATCH] - Fixed AI casting charms with less than minimum options and removed RemAiDeck for Kolaghan's Command --- .../main/java/forge/ai/ability/CharmAi.java | 28 ++++++++++++++++++- .../res/cardsfolder/k/kolaghans_command.txt | 1 - 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/CharmAi.java b/forge-ai/src/main/java/forge/ai/ability/CharmAi.java index f7a2dc89459..661ca689cec 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CharmAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CharmAi.java @@ -26,7 +26,7 @@ public class CharmAi extends SpellAbilityAi { // reset the chosen list. Otherwise it will be locked in forever sa.setChosenList(null); - List chosenList = chooseOptionsAi(sa, ai, timingRight, num, min, false); + List chosenList = min > 1 ? chooseMultipleOptionsAi(sa, ai, min) : chooseOptionsAi(sa, ai, timingRight, num, min, false); if (chosenList.isEmpty()) { return false; @@ -92,6 +92,32 @@ public class CharmAi extends SpellAbilityAi { return chosenList; } + //Extension of chooseOptionsAi specific to multi-option charms (eg. Cryptic Command, DTK commands) + private List chooseMultipleOptionsAi(SpellAbility sa, final Player ai, int min) { + if (sa.getChosenList() != null) { + return sa.getChosenList(); + } + List choices = CharmEffect.makePossibleOptions(sa); + List chosenList = new ArrayList(); + // select first n playable options + AiController aic = ((PlayerControllerAi) ai.getController()).getAi(); + for (AbilitySub sub : choices) { + sub.setActivatingPlayer(ai); + if (AiPlayDecision.WillPlay == aic.canPlaySa(sub)) { + chosenList.add(sub); + if (chosenList.size() == min) { + break; + } + } + } + + if (chosenList.size() != min) { + return new ArrayList(); + } else { + return chosenList; + } + } + @Override public Player chooseSinglePlayer(Player ai, SpellAbility sa, Iterable opponents) { return Aggregates.random(opponents); diff --git a/forge-gui/res/cardsfolder/k/kolaghans_command.txt b/forge-gui/res/cardsfolder/k/kolaghans_command.txt index 97137b23a76..ee0a507b77f 100644 --- a/forge-gui/res/cardsfolder/k/kolaghans_command.txt +++ b/forge-gui/res/cardsfolder/k/kolaghans_command.txt @@ -6,6 +6,5 @@ SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts SVar:DBDiscard:DB$ Discard | ValidTgts$ Player | TgtPrompt$ Choose a player | NumCards$ 1 | Mode$ TgtChoose | SpellDescription$ Target player discards a card. SVar:DBDestroy:DB$ Destroy | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | SpellDescription$ Destroy target artifact. SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target creature or player. -SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/kolaghans_command.jpg Oracle:Choose two -\n• Return target creature card from your graveyard to your hand.\n• Target player discards a card.\n• Destroy target artifact.\n• Kolaghan's Command deals 2 damage to target creature or player.