From 54e59bc17cf13eada293367d717c9d5aa299a02e Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 3 Nov 2020 01:35:52 -0500 Subject: [PATCH] zara_renegade_recruiter.txt and ChangeZoneEffect support --- .../ability/effects/ChangeZoneEffect.java | 48 ++++++++++++++----- .../upcoming/zara_renegade_recruiter.txt | 10 ++++ 2 files changed, 45 insertions(+), 13 deletions(-) create mode 100755 forge-gui/res/cardsfolder/upcoming/zara_renegade_recruiter.txt diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index c19eb435121..00ba1b74398 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -618,12 +618,21 @@ public class ChangeZoneEffect extends SpellAbilityEffect { } if (sa.hasParam("Attacking")) { final Combat combat = game.getCombat(); - if ( null != combat ) { - final FCollectionView e = combat.getDefenders(); - + if (null != combat) { + FCollectionView defs = null; + String attacking = sa.getParam("Attacking"); + if ("True".equalsIgnoreCase(attacking)) { + defs = combat.getDefenders(); + } else if (sa.hasParam("ChoosePlayerOrPlaneswalker")) { + Player defendingPlayer = Iterables.getFirst(AbilityUtils.getDefinedPlayers(hostCard, + attacking, sa), null); + if (defendingPlayer != null) { + defs = combat.getDefendersControlledBy(defendingPlayer); + } + } GameEntity defender = null; if (sa.hasParam("DefinedDefender")) { - FCollection objs = AbilityUtils.getDefinedObjects(sa.getHostCard(), sa.getParam("DefinedDefender"), sa); + FCollection objs = AbilityUtils.getDefinedObjects(hostCard, sa.getParam("DefinedDefender"), sa); for(GameObject obj : objs) { if (obj instanceof GameEntity) { defender = (GameEntity)obj; @@ -634,7 +643,8 @@ public class ChangeZoneEffect extends SpellAbilityEffect { String title = Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", CardTranslation.getTranslatedName(movedCard.getName())); Map params = Maps.newHashMap(); params.put("Attacker", movedCard); - defender = player.getController().chooseSingleEntityForEffect(e, sa, title, params); + defender = player.getController().chooseSingleEntityForEffect(defs, sa, title,false, + params); } if (defender != null) { combat.addAttacker(movedCard, defender); @@ -1140,23 +1150,35 @@ public class ChangeZoneEffect extends SpellAbilityEffect { if (sa.hasParam("Attacking")) { final Combat combat = game.getCombat(); - if ( null != combat ) { - final FCollectionView e = combat.getDefenders(); - + if (null != combat) { + FCollectionView defs = null; + String attacking = sa.getParam("Attacking"); + if ("True".equalsIgnoreCase(attacking)) { + defs = combat.getDefenders(); + } else if (sa.hasParam("ChoosePlayerOrPlaneswalker")) { + Player defendingPlayer = Iterables.getFirst(AbilityUtils.getDefinedPlayers(source, + attacking, sa), null); + if (defendingPlayer != null) { + defs = combat.getDefendersControlledBy(defendingPlayer); + } + } GameEntity defender = null; if (sa.hasParam("DefinedDefender")) { - FCollection objs = AbilityUtils.getDefinedObjects(source, sa.getParam("DefinedDefender"), sa); - for(GameObject obj : objs) { + FCollection objs = AbilityUtils.getDefinedObjects(source, + sa.getParam("DefinedDefender"), sa); + for (GameObject obj : objs) { if (obj instanceof GameEntity) { - defender = (GameEntity)obj; + defender = (GameEntity) obj; break; } } } else { - String title = Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", CardTranslation.getTranslatedName(c.getName())); + String title = Localizer.getInstance().getMessage("lblChooseDefenderToAttackWithCard", + CardTranslation.getTranslatedName(c.getName())); Map params = Maps.newHashMap(); params.put("Attacker", c); - defender = player.getController().chooseSingleEntityForEffect(e, sa, title, params); + defender = decider.getController().chooseSingleEntityForEffect(defs, sa, title,false, + params); } if (defender != null) { combat.addAttacker(c, defender); diff --git a/forge-gui/res/cardsfolder/upcoming/zara_renegade_recruiter.txt b/forge-gui/res/cardsfolder/upcoming/zara_renegade_recruiter.txt new file mode 100755 index 00000000000..5a1e66d13bf --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/zara_renegade_recruiter.txt @@ -0,0 +1,10 @@ +Name:Zara, Renegade Recruiter +ManaCost:3 U R +Types:Legendary Creature Human Pirate +PT:4/3 +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigBorrow | TriggerDescription$ Whenever CARDNAME attacks, look at defending player's hand. You may put a creature card from it onto the battlefield under your control tapped and attacking that player or a planeswalker they control. Return that creature to its owner's hand at the beginning of the next end step. +SVar:TrigBorrow:DB$ ChangeZone | ChangeNum$ 1 | DefinedPlayer$ TriggeredDefendingPlayer | Chooser$ You | ChangeType$ Creature | Origin$ Hand | Destination$ Battlefield | GainControl$ True | Tapped$ True | Attacking$ DefendingPlayer | ChoosePlayerOrPlaneswalker$ True | RememberChanged$ True | SubAbility$ DBDelayTrig +SVar:DBDelayTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Player | RememberObjects$ Remembered | Execute$ DBChange | StackDescription$ None | SubAbility$ DBCleanup | TriggerDescription$ Return that creature to its owner's hand at the beginning of the next end step. +SVar:DBChange:DB$ ChangeZone | Defined$ DelayTriggerRemembered | Origin$ Battlefield | Destination$ Hand +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Flying\nWhenever Zara, Renegade Recruiter attacks, look at defending player's hand. You may put a creature card from it onto the battlefield under your control tapped and attacking that player or a planeswalker they control. Return that creature to its owner's hand at the beginning of the next end step.