From 0c84a957b2272ca5cca8df7f12a8b96e3fdc017b Mon Sep 17 00:00:00 2001 From: Michael Kamensky Date: Sat, 27 Feb 2021 10:05:56 +0300 Subject: [PATCH] - Improve ChangeZoneAi for exiling any number of stuff from the battlefield --- .../java/forge/ai/ability/ChangeZoneAi.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java index d15c24b81e1..3d94fb7ff08 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -1548,6 +1548,34 @@ public class ChangeZoneAi extends SpellAbilityAi { if (player.isOpponentOf(decider)) { c = ComputerUtilCard.getBestAI(fetchList); } else { + // exclude tokens, they won't come back, and enchanted stuff, since auras will go away + if (!sa.hasParam("Mandatory") && origin.contains(ZoneType.Battlefield)) { + fetchList = CardLists.filter(fetchList, Presets.NON_TOKEN); + fetchList = CardLists.filter(fetchList, new Predicate() { + @Override + public boolean apply(final Card card) { + if (card.isCreature() && ComputerUtilCard.isUselessCreature(player, card)) { + return true; + } else if (card.isEquipped()) { + return false; + } else if (card.isEnchanted()) { + for (Card enc : card.getEnchantedBy()) { + if (enc.getOwner().isOpponentOf(player)) { + return true; + } + } + return false; + } else if (card.isAura()) { + return false; + } + return true; + } + }); + if (fetchList.isEmpty()) { + return null; + } + } + c = ComputerUtilCard.getWorstAI(fetchList); if (ComputerUtilAbility.getAbilitySourceName(sa).equals("Temur Sabertooth")) { Card tobounce = canBouncePermanent(player, sa, fetchList);