diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index 72c509580c3..a83b5530969 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -619,7 +619,7 @@ public class PhaseHandler implements java.io.Serializable { final Map runParams = AbilityKey.newMap(); runParams.put(AbilityKey.Attackers, combat.getAttackersOf(ge)); runParams.put(AbilityKey.AttackingPlayer, combat.getAttackingPlayer()); - runParams.put(AbilityKey.AttackedTarget, ge); + runParams.put(AbilityKey.AttackedTarget, Collections.singletonList(ge)); attackedTarget.add(ge); game.getTriggerHandler().runTrigger(TriggerType.AttackersDeclaredOneTarget, runParams, false); } diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerAttackersDeclared.java b/forge-game/src/main/java/forge/game/trigger/TriggerAttackersDeclared.java index 31b7ff2f15a..dac1d3d5d90 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerAttackersDeclared.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerAttackersDeclared.java @@ -17,12 +17,18 @@ */ package forge.game.trigger; -import java.util.Map; +import java.util.*; +import com.google.common.collect.Iterables; +import forge.game.GameEntity; +import forge.game.GameObjectPredicates; import forge.game.ability.AbilityKey; import forge.game.card.Card; +import forge.game.card.CardCollection; +import forge.game.card.CardLists; import forge.game.spellability.SpellAbility; import forge.util.Localizer; +import forge.util.collect.FCollection; /** * TODO Write javadoc for this type. @@ -64,7 +70,25 @@ public class TriggerAttackersDeclared extends Trigger { /** {@inheritDoc} */ @Override public final void setTriggeringObjects(final SpellAbility sa, Map runParams) { - sa.setTriggeringObjectsFrom(runParams, AbilityKey.Attackers, AbilityKey.AttackingPlayer, AbilityKey.AttackedTarget); + Iterable attackedTarget = (Iterable) runParams.get(AbilityKey.AttackedTarget); + + CardCollection attackers = (CardCollection)(runParams.get(AbilityKey.Attackers)); + if (hasParam("ValidAttackers")) { + attackers = CardLists.getValidCards(attackers, getParam("ValidAttackers").split(","), getHostCard().getController(), getHostCard(), this); + FCollection defenders = new FCollection<>(); + for (Card attacker : attackers) { + defenders.add(attacker.getGame().getCombat().getDefenderByAttacker(attacker)); + } + attackedTarget = defenders; + } + sa.setTriggeringObject(AbilityKey.Attackers, attackers); + + if (hasParam("AttackedTarget")) { + attackedTarget = Iterables.filter(attackedTarget, GameObjectPredicates.restriction(getParam("AttackedTarget").split(","), getHostCard().getController(), getHostCard(), this)); + } + sa.setTriggeringObject(AbilityKey.AttackedTarget, attackedTarget); + + sa.setTriggeringObjectsFrom(runParams, AbilityKey.AttackingPlayer); } @Override diff --git a/forge-gui/res/cardsfolder/a/akiri_fearless_voyager.txt b/forge-gui/res/cardsfolder/a/akiri_fearless_voyager.txt index f4fe2d7129a..e33025fa7f8 100755 --- a/forge-gui/res/cardsfolder/a/akiri_fearless_voyager.txt +++ b/forge-gui/res/cardsfolder/a/akiri_fearless_voyager.txt @@ -2,9 +2,8 @@ Name:Akiri, Fearless Voyager ManaCost:1 R W Types:Legendary Creature Kor Warrior PT:3/3 -T:Mode$ Attacks | ValidCard$ Creature.YouCtrl+equipped | Attacked$ Player.IsNotRemembered | RememberKey$ DefendingPlayer | Execute$ TrigDraw | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack a player with one or more equipped creatures, draw a card. +T:Mode$ AttackersDeclaredOneTarget | ValidAttackers$ Creature.YouCtrl+equipped | AttackedTarget$ Player | Execute$ TrigDraw | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack a player with one or more equipped creatures, draw a card. SVar:TrigDraw:DB$ Draw | NumCards$ 1 -T:Mode$ Phase | Phase$ Declare Attackers | Static$ True | Execute$ DBCleanup A:AB$ ChooseCard | Cost$ W | Defined$ You | Choices$ Creature.YouCtrl+equipped | ChoiceTitle$ Choose an equipped creature you control | RememberChosen$ True | SubAbility$ DBChooseEquip | StackDescription$ SpellDescription | SpellDescription$ You may unattach an Equipment from a creature you control. If you do, tap that creature and it gains indestructible until end of turn. SVar:DBChooseEquip:DB$ ChooseCard | Defined$ You | Choices$ Equipment.AttachedTo Creature.IsRemembered | ChoiceTitle$ You may choose an Equipment to unattach from that creature | SubAbility$ DBUnattach SVar:DBUnattach:DB$ Unattach | Defined$ ChosenCard | SubAbility$ DBTap | StackDescription$ None diff --git a/forge-gui/res/cardsfolder/z/zurzoth_chaos_rider.txt b/forge-gui/res/cardsfolder/z/zurzoth_chaos_rider.txt index 19d12a1513f..60292b5ef20 100644 --- a/forge-gui/res/cardsfolder/z/zurzoth_chaos_rider.txt +++ b/forge-gui/res/cardsfolder/z/zurzoth_chaos_rider.txt @@ -4,10 +4,8 @@ Types:Legendary Creature Devil PT:2/3 T:Mode$ Drawn | ValidPlayer$ Player.Opponent+NonActive | Number$ 1 | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever an opponent draws their first card each turn, if it's not their turn, you create a 1/1 red Devil creature token with "When this creature dies, it deals 1 damage to any target." SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_1_1_devil_burn | TokenOwner$ You | LegacyImage$ r 1 1 devil burn jmp -T:Mode$ Attacks | ValidCards$ Devil.YouCtrl | Attacked$ Player.IsNotRemembered | RememberKey$ DefendingPlayer | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever one or more Devils you control attack one or more players, you and those players each draw a card, then discard a card at random. +T:Mode$ AttackersDeclared | ValidAttackers$ Devil.YouCtrl | AttackedTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever one or more Devils you control attack one or more players, you and those players each draw a card, then discard a card at random. SVar:TrigDraw:DB$ Draw | Defined$ TriggeredAttackedTargetAndYou | NumCards$ 1 | SubAbility$ DBDiscard SVar:DBDiscard:DB$ Discard | Defined$ TriggeredAttackedTargetAndYou | NumCards$ 1 | Mode$ Random -T:Mode$ Phase | Phase$ Declare Attackers | Static$ True | Execute$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token Oracle:Whenever an opponent draws their first card each turn, if it's not their turn, you create a 1/1 red Devil creature token with "When this creature dies, it deals 1 damage to any target."\nWhenever one or more Devils you control attack one or more players, you and those players each draw a card, then discard a card at random.