From 4721c6aaca18351c48634dee1f1e885b1073d877 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 15 Jul 2013 19:56:01 +0200 Subject: [PATCH] Fixed handling of sacrifice Planeswalker or Legend permanent caused by new rule for AI choose target. --- .../src/main/java/mage/player/ai/ComputerPlayer.java | 8 ++++---- Mage/src/mage/game/GameImpl.java | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) 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 bee4a20e771..d1a76f61347 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 @@ -410,13 +410,13 @@ public class ComputerPlayer> extends PlayerImpl i List targets; boolean outcomeTargets = true; if (outcome.isGood()) { - targets = threats(playerId, source.getSourceId(), ((TargetPermanent)target).getFilter(), game, target.getTargets()); + targets = threats(playerId, source == null?null:source.getSourceId(), ((TargetPermanent)target).getFilter(), game, target.getTargets()); } else { - targets = threats(opponentId, source.getSourceId(), ((TargetPermanent)target).getFilter(), game, target.getTargets()); + targets = threats(opponentId, source == null?null:source.getSourceId(), ((TargetPermanent)target).getFilter(), game, target.getTargets()); } if (targets.isEmpty() && target.isRequired()) { - targets = threats(null, source.getSourceId(), ((TargetPermanent)target).getFilter(), game, target.getTargets()); + targets = threats(null, source == null?null:source.getSourceId(), ((TargetPermanent)target).getFilter(), game, target.getTargets()); Collections.reverse(targets); outcomeTargets = false; //targets = game.getBattlefield().getActivePermanents(((TargetPermanent)target).getFilter(), playerId, game); @@ -1792,7 +1792,7 @@ public class ComputerPlayer> extends PlayerImpl i } protected List threats(UUID playerId, UUID sourceId, FilterPermanent filter, Game game, List targets) { - List threats = playerId == null ? + List threats = (playerId == null || sourceId ==null) ? game.getBattlefield().getActivePermanents(filter, this.getId(), sourceId, game) : // all permanents within the range of the player game.getBattlefield().getAllActivePermanents(filter, playerId, game); // all controlled permanents of playerId diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index ec66dc04cc9..55d6d8a48eb 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -1308,7 +1308,7 @@ public abstract class GameImpl> implements Game, Serializa Target targetPlaneswalkerToKeep = new TargetPermanent(filterPlaneswalker); targetPlaneswalkerToKeep.setTargetName(new StringBuilder(planeswalker.getName()).append(" to keep?").toString()); targetPlaneswalkerToKeep.setRequired(true); - controller.chooseTarget(Outcome.Sacrifice, targetPlaneswalkerToKeep, null, this); + controller.chooseTarget(Outcome.Benefit, targetPlaneswalkerToKeep, null, this); for (Permanent dupPlaneswalker: this.getBattlefield().getActivePermanents(filterPlaneswalker, planeswalker.getControllerId(), this)) { if (!targetPlaneswalkerToKeep.getTargets().contains(dupPlaneswalker.getId())) { dupPlaneswalker.moveToZone(Zone.GRAVEYARD, null, this, false); @@ -1336,7 +1336,7 @@ public abstract class GameImpl> implements Game, Serializa Target targetLegendaryToKeep = new TargetPermanent(filterLegendName); targetLegendaryToKeep.setTargetName(new StringBuilder(legend.getName()).append(" to keep (Legendary Rule)?").toString()); targetLegendaryToKeep.setRequired(true); - controller.chooseTarget(Outcome.Sacrifice, targetLegendaryToKeep, null, this); + controller.chooseTarget(Outcome.Benefit, targetLegendaryToKeep, null, this); for (Permanent dupLegend: getBattlefield().getActivePermanents(filterLegendName, legend.getControllerId(), this)) { if (!targetLegendaryToKeep.getTargets().contains(dupLegend.getId())) { dupLegend.moveToZone(Zone.GRAVEYARD, null, this, false);