From c7007a3de3de935bdd468b1edabfdd61b69b31a6 Mon Sep 17 00:00:00 2001 From: Jeff Wadsworth Date: Wed, 22 Nov 2023 10:22:34 -0600 Subject: [PATCH] Fixed #11426 --- .../java/mage/player/ai/ComputerPlayer.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 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 3ae2227b6fd..da7e1e7ea29 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 @@ -116,7 +116,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { if (hand.size() < 6 || isTestsMode() // ignore mulligan in tests || game.getClass().getName().contains("Momir") // ignore mulligan in Momir games - ) { + ) { return false; } Set lands = hand.getCards(new FilterLandCard(), game); @@ -135,7 +135,6 @@ public class ComputerPlayer extends PlayerImpl implements Player { if (log.isDebugEnabled()) { log.debug("choose: " + outcome.toString() + ':' + target.toString()); } - // controller hints: // - target.getTargetController(), this.getId() -- player that must makes choices (must be same with this.getId) // - target.getAbilityController(), abilityControllerId -- affected player/controller for all actions/filters @@ -395,7 +394,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { } return false; } - + if (target.getOriginalTarget() instanceof TargetCardInASingleGraveyard) { List cards = new ArrayList<>(); for (Player player : game.getPlayers().values()) { @@ -525,6 +524,26 @@ public class ComputerPlayer extends PlayerImpl implements Player { return target.isChosen(); } + if (target.getOriginalTarget() instanceof TargetCard + && (target.getZone() == Zone.COMMAND)) { // Hellkite Courser + List cardsInCommandZone = new ArrayList<>(); + for (Player player : game.getPlayers().values()) { + for (Card card : game.getCommanderCardsFromCommandZone(player, CommanderCardType.COMMANDER_OR_OATHBREAKER)) { + if (target.canTarget(abilityControllerId, card.getId(), null, game)) { + cardsInCommandZone.add(card); + } + } + } + while (!target.isChosen() && !cardsInCommandZone.isEmpty()) { + Card pick = pickTarget(abilityControllerId, cardsInCommandZone, outcome, target, null, game); + if (pick != null) { + target.addTarget(pick.getId(), null, game); + cardsInCommandZone.remove(pick); + } + } + return target.isChosen(); + } + throw new IllegalStateException("Target wasn't handled in computer's choose method: " + target.getClass().getCanonicalName()); } //end of choose method @@ -2746,7 +2765,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { } protected void findBestPermanentTargets(Outcome outcome, UUID abilityControllerId, UUID sourceId, Ability source, FilterPermanent filter, Game game, Target target, - List goodList, List badList, List allList) { + List goodList, List badList, List allList) { // searching for most valuable/powerfull permanents goodList.clear(); badList.clear();