From 8d93ca9fbc6c70ccfec8c76d3a7ece04d0bf6c55 Mon Sep 17 00:00:00 2001 From: Agetian Date: Sat, 3 Jun 2017 15:55:10 +0000 Subject: [PATCH] - Improved ChangeTargetsAi for cases when two or more of the same cards with retarget ability are present on the battlefield (e.g. 2x Spellskite), the AI will no longer retarget the spell infinitely to different copies. --- .../src/main/java/forge/ai/ability/ChangeTargetsAi.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeTargetsAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeTargetsAi.java index 71306497341..ec3af97de92 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeTargetsAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeTargetsAi.java @@ -6,6 +6,7 @@ import forge.ai.ComputerUtilMana; import forge.ai.SpellAbilityAi; import forge.card.mana.ManaCost; import forge.game.Game; +import forge.game.card.Card; import forge.game.mana.ManaCostBeingPaid; import forge.game.player.Player; import forge.game.spellability.SpellAbility; @@ -50,6 +51,14 @@ public class ChangeTargetsAi extends SpellAbilityAi { return false; } + for (Card tgt : topSa.getTargets().getTargetCards()) { + // We are already targeting at least one card with the same name (e.g. in presence of 2+ Spellskites), + // no need to retarget again to another one + if (ComputerUtilAbility.getAbilitySourceName(sa).equals(tgt.getName()) && tgt.getController().equals(aiPlayer)) { + return false; + } + } + if (topSa.getHostCard() != null && !topSa.getHostCard().getController().isOpponentOf(aiPlayer)) { // make sure not to redirect our own abilities return false;