From 0965d108f0a9a0ff05d854511a588fe40418e61d Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 26 Jul 2022 17:06:14 -0400 Subject: [PATCH] ChangeCombatantsEffect.resolve support "Optional" and better support multiple target cards --- .../game/ability/effects/ChangeCombatantsEffect.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeCombatantsEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeCombatantsEffect.java index c3d65a43026..e09742febc0 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeCombatantsEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeCombatantsEffect.java @@ -40,17 +40,24 @@ public class ChangeCombatantsEffect extends SpellAbilityEffect { @Override public void resolve(SpellAbility sa) { boolean isCombatChanged = false; - final Game game = sa.getActivatingPlayer().getGame(); + final Player activator = sa.getActivatingPlayer(); + final Game game = activator.getGame(); final TargetRestrictions tgt = sa.getTargetRestrictions(); // TODO: may expand this effect for defined blocker (False Orders, General Jarkeld, Sorrow's Path, Ydwen Efreet) for (final Card c : getTargetCards(sa)) { + String cardString = CardTranslation.getTranslatedName(c.getName()) + " (" + c.getId() + ")"; + boolean isOptional = sa.hasParam("Optional"); + if (isOptional && !activator.getController().confirmAction(sa, null, + Localizer.getInstance().getMessage("lblChangeCombatantOption", cardString), null)) { + continue; + } if ((tgt == null) || c.canBeTargetedBy(sa)) { final Combat combat = game.getCombat(); final GameEntity originalDefender = combat.getDefenderByAttacker(c); final FCollection defs = new FCollection<>(); defs.addAll(sa.hasParam("PlayerOnly") ? combat.getDefendingPlayers() : combat.getDefenders()); - String title = Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", CardTranslation.getTranslatedName(c.getName())); + String title = Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", cardString); Map params = Maps.newHashMap(); params.put("Attacker", c);