From 63e7803ea4ad0ccb043ce184251f99a7a55a6afd Mon Sep 17 00:00:00 2001 From: Michael Kamensky Date: Fri, 2 Apr 2021 17:01:59 +0300 Subject: [PATCH] - Fix AI logic for ETB CloneAi with Choices --- forge-ai/src/main/java/forge/ai/ability/CloneAi.java | 9 ++++++++- forge-ai/src/main/java/forge/ai/ability/ScryAi.java | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/CloneAi.java b/forge-ai/src/main/java/forge/ai/ability/CloneAi.java index abcc104fed4..addc352cec5 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CloneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CloneAi.java @@ -9,6 +9,7 @@ import forge.game.Game; import forge.game.ability.AbilityUtils; import forge.game.card.Card; import forge.game.card.CardCollection; +import forge.game.card.CardCollectionView; import forge.game.card.CardLists; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; @@ -95,11 +96,17 @@ public class CloneAi extends SpellAbilityAi { @Override protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { - + Card host = sa.getHostCard(); boolean chance = true; if (sa.usesTargeting()) { chance = cloneTgtAI(sa); + } else { + CardCollectionView choices = host.getGame().getCardsIn(ZoneType.Battlefield); + if (sa.hasParam("Choices")) { + choices = CardLists.getValidCards(choices, sa.getParam("Choices"), host.getController(), host, sa); + } + chance = !choices.isEmpty(); } // Improve AI for triggers. If source is a creature with: diff --git a/forge-ai/src/main/java/forge/ai/ability/ScryAi.java b/forge-ai/src/main/java/forge/ai/ability/ScryAi.java index 82323118cf5..063daaddd34 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ScryAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ScryAi.java @@ -45,7 +45,7 @@ public class ScryAi extends SpellAbilityAi { */ @Override protected boolean checkPhaseRestrictions(final Player ai, final SpellAbility sa, final PhaseHandler ph) { - // For Brain Jar, avoid competing against the other ability in the opponent's EOT. + // For Brain in a Jar, avoid competing against the other ability in the opponent's EOT. if ("BrainJar".equals(sa.getParam("AILogic"))) { return ph.getPhase().isAfter(PhaseType.MAIN2); }