diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index c00fa736322..bc58b023ba3 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -196,12 +196,16 @@ public class ComputerPlayer> extends PlayerImpl i } if (target instanceof TargetPermanent) { List targets; - if (outcome.isGood()) { - targets = threats(playerId, ((TargetPermanent)target).getFilter(), game, target.getTargets()); - } - else { - targets = threats(opponentId, ((TargetPermanent)target).getFilter(), game, target.getTargets()); - } + if (outcome.isCanTargetAll()) { + targets = threats(null, ((TargetPermanent)target).getFilter(), game, target.getTargets()); + } else { + if (outcome.isGood()) { + targets = threats(playerId, ((TargetPermanent)target).getFilter(), game, target.getTargets()); + } + else { + targets = threats(opponentId, ((TargetPermanent)target).getFilter(), game, target.getTargets()); + } + } for (Permanent permanent: targets) { if (((TargetPermanent)target).canTarget(playerId, permanent.getId(), null, game) && !target.getTargets().contains(permanent.getId())) { target.add(permanent.getId(), game); @@ -1486,7 +1490,10 @@ public class ComputerPlayer> extends PlayerImpl i } protected List threats(UUID playerId, FilterPermanent filter, Game game, List targets) { - List threats = game.getBattlefield().getAllActivePermanents(filter, playerId); + List threats = playerId == null ? + game.getBattlefield().getAllActivePermanents(filter) : + game.getBattlefield().getAllActivePermanents(filter, playerId); + Iterator it = threats.iterator(); while (it.hasNext()) { // remove permanents already targetted Permanent test = it.next(); @@ -1494,6 +1501,7 @@ public class ComputerPlayer> extends PlayerImpl i it.remove(); } Collections.sort(threats, new PermanentComparator(game)); + Collections.reverse(threats); return threats; } diff --git a/Mage.Server/plugins/mage-player-ai-ma.jar b/Mage.Server/plugins/mage-player-ai-ma.jar index 945d5c01a88..05dc334ce2e 100644 Binary files a/Mage.Server/plugins/mage-player-ai-ma.jar and b/Mage.Server/plugins/mage-player-ai-ma.jar differ diff --git a/Mage.Server/plugins/mage-player-ai.jar b/Mage.Server/plugins/mage-player-ai.jar index 1d70e58a1ab..edd676fe8ec 100644 Binary files a/Mage.Server/plugins/mage-player-ai.jar and b/Mage.Server/plugins/mage-player-ai.jar differ diff --git a/Mage.Server/plugins/mage-player-aimcts.jar b/Mage.Server/plugins/mage-player-aimcts.jar index 2b98a089e89..d08891b73ff 100644 Binary files a/Mage.Server/plugins/mage-player-aimcts.jar and b/Mage.Server/plugins/mage-player-aimcts.jar differ diff --git a/Mage.Server/plugins/mage-player-aiminimax.jar b/Mage.Server/plugins/mage-player-aiminimax.jar index 6a549940d32..cf0f8c1d4d4 100644 Binary files a/Mage.Server/plugins/mage-player-aiminimax.jar and b/Mage.Server/plugins/mage-player-aiminimax.jar differ diff --git a/Mage.Tests/plugins/mage-player-ai-ma.jar b/Mage.Tests/plugins/mage-player-ai-ma.jar index 88614c6e2ad..05dc334ce2e 100644 Binary files a/Mage.Tests/plugins/mage-player-ai-ma.jar and b/Mage.Tests/plugins/mage-player-ai-ma.jar differ diff --git a/Mage.Tests/plugins/mage-player-ai.jar b/Mage.Tests/plugins/mage-player-ai.jar index 4795db08f64..edd676fe8ec 100644 Binary files a/Mage.Tests/plugins/mage-player-ai.jar and b/Mage.Tests/plugins/mage-player-ai.jar differ diff --git a/Mage.Tests/plugins/mage-player-aiminimax.jar b/Mage.Tests/plugins/mage-player-aiminimax.jar index f468030b4d1..cf0f8c1d4d4 100644 Binary files a/Mage.Tests/plugins/mage-player-aiminimax.jar and b/Mage.Tests/plugins/mage-player-aiminimax.jar differ diff --git a/Mage/src/mage/Constants.java b/Mage/src/mage/Constants.java index dfc832ccae4..62311b949f4 100644 --- a/Mage/src/mage/Constants.java +++ b/Mage/src/mage/Constants.java @@ -341,23 +341,32 @@ public final class Constants { Transform(true), Untap(true), Win(true), - Copy(true), + Copy(true, true), Benefit(true), Detriment(false), Neutral(true), Removal(true); private boolean good; + private boolean canTargetAll; Outcome(boolean good) { this.good = good; } + Outcome(boolean good, boolean canTargetAll) { + this.good = good; + this.canTargetAll = canTargetAll; + } + public boolean isGood() { return good; } - } + public boolean isCanTargetAll() { + return canTargetAll; + } + } public enum Zone { HAND, GRAVEYARD, LIBRARY, BATTLEFIELD, STACK, EXILED, ALL, OUTSIDE, PICK, COMMAND;