mirror of
https://github.com/correl/mage.git
synced 2025-04-07 13:01:06 -09:00
Fixed handling of sacrifice Planeswalker or Legend permanent caused by new rule for AI choose target.
This commit is contained in:
parent
9803c069f9
commit
4721c6aaca
2 changed files with 6 additions and 6 deletions
Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai
Mage/src/mage/game
|
@ -410,13 +410,13 @@ public class ComputerPlayer<T extends ComputerPlayer<T>> extends PlayerImpl<T> i
|
||||||
List<Permanent> targets;
|
List<Permanent> targets;
|
||||||
boolean outcomeTargets = true;
|
boolean outcomeTargets = true;
|
||||||
if (outcome.isGood()) {
|
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 {
|
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()) {
|
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);
|
Collections.reverse(targets);
|
||||||
outcomeTargets = false;
|
outcomeTargets = false;
|
||||||
//targets = game.getBattlefield().getActivePermanents(((TargetPermanent)target).getFilter(), playerId, game);
|
//targets = game.getBattlefield().getActivePermanents(((TargetPermanent)target).getFilter(), playerId, game);
|
||||||
|
@ -1792,7 +1792,7 @@ public class ComputerPlayer<T extends ComputerPlayer<T>> extends PlayerImpl<T> i
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<Permanent> threats(UUID playerId, UUID sourceId, FilterPermanent filter, Game game, List<UUID> targets) {
|
protected List<Permanent> threats(UUID playerId, UUID sourceId, FilterPermanent filter, Game game, List<UUID> targets) {
|
||||||
List<Permanent> threats = playerId == null ?
|
List<Permanent> threats = (playerId == null || sourceId ==null) ?
|
||||||
game.getBattlefield().getActivePermanents(filter, this.getId(), sourceId, game) : // all permanents within the range of the player
|
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
|
game.getBattlefield().getAllActivePermanents(filter, playerId, game); // all controlled permanents of playerId
|
||||||
|
|
||||||
|
|
|
@ -1308,7 +1308,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
|
||||||
Target targetPlaneswalkerToKeep = new TargetPermanent(filterPlaneswalker);
|
Target targetPlaneswalkerToKeep = new TargetPermanent(filterPlaneswalker);
|
||||||
targetPlaneswalkerToKeep.setTargetName(new StringBuilder(planeswalker.getName()).append(" to keep?").toString());
|
targetPlaneswalkerToKeep.setTargetName(new StringBuilder(planeswalker.getName()).append(" to keep?").toString());
|
||||||
targetPlaneswalkerToKeep.setRequired(true);
|
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)) {
|
for (Permanent dupPlaneswalker: this.getBattlefield().getActivePermanents(filterPlaneswalker, planeswalker.getControllerId(), this)) {
|
||||||
if (!targetPlaneswalkerToKeep.getTargets().contains(dupPlaneswalker.getId())) {
|
if (!targetPlaneswalkerToKeep.getTargets().contains(dupPlaneswalker.getId())) {
|
||||||
dupPlaneswalker.moveToZone(Zone.GRAVEYARD, null, this, false);
|
dupPlaneswalker.moveToZone(Zone.GRAVEYARD, null, this, false);
|
||||||
|
@ -1336,7 +1336,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
|
||||||
Target targetLegendaryToKeep = new TargetPermanent(filterLegendName);
|
Target targetLegendaryToKeep = new TargetPermanent(filterLegendName);
|
||||||
targetLegendaryToKeep.setTargetName(new StringBuilder(legend.getName()).append(" to keep (Legendary Rule)?").toString());
|
targetLegendaryToKeep.setTargetName(new StringBuilder(legend.getName()).append(" to keep (Legendary Rule)?").toString());
|
||||||
targetLegendaryToKeep.setRequired(true);
|
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)) {
|
for (Permanent dupLegend: getBattlefield().getActivePermanents(filterLegendName, legend.getControllerId(), this)) {
|
||||||
if (!targetLegendaryToKeep.getTargets().contains(dupLegend.getId())) {
|
if (!targetLegendaryToKeep.getTargets().contains(dupLegend.getId())) {
|
||||||
dupLegend.moveToZone(Zone.GRAVEYARD, null, this, false);
|
dupLegend.moveToZone(Zone.GRAVEYARD, null, this, false);
|
||||||
|
|
Loading…
Add table
Reference in a new issue