From 37f0b07a28f8a8dc3360e5dba430e9755faf13f4 Mon Sep 17 00:00:00 2001 From: Hanmac Date: Sun, 8 May 2016 09:43:20 +0000 Subject: [PATCH] SetStateAi: use more generic way to check if a Card should be transformed or not. Also does check if Legendary Rule does still apply for that. --- .../src/main/java/forge/ai/AiController.java | 2 +- .../main/java/forge/ai/ability/SetStateAi.java | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 3e6465fb6ef..040ca005e05 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -1158,7 +1158,7 @@ public class AiController { // check on legendary if (card.getType().isLegendary() && !game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLegendRule)) { - if (Iterables.any(player.getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals(card.getName()))) { + if (player.isCardInPlay(card.getName())) { return AiPlayDecision.WouldDestroyLegend; } } diff --git a/forge-ai/src/main/java/forge/ai/ability/SetStateAi.java b/forge-ai/src/main/java/forge/ai/ability/SetStateAi.java index e3f8ada365c..6c6c902537c 100644 --- a/forge-ai/src/main/java/forge/ai/ability/SetStateAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/SetStateAi.java @@ -2,8 +2,9 @@ package forge.ai.ability; import forge.ai.SpellAbilityAi; +import forge.game.GlobalRuleChange; import forge.game.card.Card; -import forge.game.card.CardCollection; +import forge.game.card.CardState; import forge.game.player.Player; import forge.game.spellability.SpellAbility; @@ -12,12 +13,14 @@ public class SetStateAi extends SpellAbilityAi { protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { // Prevent transform into legendary creature if copy already exists final Card source = sa.getHostCard(); - if ("Westvale Abbey".equals(source.getName())) { - CardCollection list = aiPlayer.getCreaturesInPlay(); - for (Card c : list) { - if (c.getName().equals("Ormendahl, Profane Prince")) { - return false; - } + + // Check first if Legend Rule does still apply + if (!aiPlayer.getGame().getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLegendRule)) { + + // check if the other side is legendary and if such Card already is in Play + final CardState other = source.getAlternateState(); + if (other.getType().isLegendary() && aiPlayer.isCardInPlay(other.getName())) { + return false; } }