From b87be69b27cbc5cde80122b9a2cc608301e2267b Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 18 Dec 2024 09:22:33 +0100 Subject: [PATCH] Cherry pick full control fix (#6702) --- .../main/java/forge/game/ability/effects/TokenEffect.java | 6 ++---- .../java/forge/game/ability/effects/TokenEffectBase.java | 2 +- forge-gui/res/cardsfolder/g/giant_inheritance.txt | 2 +- forge-gui/res/cardsfolder/l/liege_of_the_hollows.txt | 2 +- forge-gui/res/cardsfolder/q/questing_cosplayer.txt | 2 +- forge-gui/res/cardsfolder/t/the_rani.txt | 2 +- 6 files changed, 7 insertions(+), 9 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/TokenEffect.java b/forge-game/src/main/java/forge/game/ability/effects/TokenEffect.java index d0664275e3e..84f5c441eb3 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/TokenEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/TokenEffect.java @@ -41,8 +41,7 @@ protected String getStackDescription(SpellAbility sa) { final Card host = sa.getHostCard(); String desc = sa.getParam("SpellDescription"); List words = Arrays.asList(desc.split(" ")); - final List creators = AbilityUtils.getDefinedPlayers(host, sa.getParamOrDefault("TokenOwner", - "You"), sa); + final List creators = getDefinedPlayersOrTargeted(sa, "TokenOwner"); if (!words.get(0).equalsIgnoreCase("Create") && desc.contains(" create")) { String[] parts = desc.split(" create", 2); desc = parts[0] + " " + Lang.joinHomogenous(creators) + " create" + parts[1]; @@ -123,8 +122,7 @@ public void resolve(SpellAbility sa) { useZoneTable = true; } - makeTokenTable(AbilityUtils.getDefinedPlayers(host, sa.getParamOrDefault("TokenOwner", "You"), sa), - sa.getParam("TokenScript").split(","), + makeTokenTable(getDefinedPlayersOrTargeted(sa, "TokenOwner"), sa.getParam("TokenScript").split(","), AbilityUtils.calculateAmount(host, sa.getParamOrDefault("TokenAmount", "1"), sa), false, triggerList, combatChanged, sa); diff --git a/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java b/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java index 521e81a49b8..9a642c8653e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java +++ b/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java @@ -79,7 +79,7 @@ protected TokenCreateTable makeTokenTable(TokenCreateTable tokenTable, final boo // support PlayerCollection for affected Set toRemove = Sets.newHashSet(); - for (Player p : Sets.newHashSet(tokenTable.rowKeySet())) { + for (Player p : Lists.newArrayList(tokenTable.rowKeySet())) { final Map repParams = AbilityKey.mapFromAffected(p); repParams.put(AbilityKey.Token, tokenTable); repParams.put(AbilityKey.Cause, sa); diff --git a/forge-gui/res/cardsfolder/g/giant_inheritance.txt b/forge-gui/res/cardsfolder/g/giant_inheritance.txt index 68e4b90dfcc..246f26718f8 100644 --- a/forge-gui/res/cardsfolder/g/giant_inheritance.txt +++ b/forge-gui/res/cardsfolder/g/giant_inheritance.txt @@ -5,7 +5,7 @@ K:Enchant creature A:SP$ Attach | Cost$ 4 G | ValidTgts$ Creature | AILogic$ Pump S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddPower$ 5 | AddToughness$ 5 | AddTrigger$ AttackTrigger | Description$ Enchanted creature gets +5/+5 and has "Whenever this creature attacks, create a Monster Role token attached to up to one target attacking creature." (Enchanted creature gets +1/+1 and has trample.) SVar:AttackTrigger:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever this creature attacks, create a Monster Role token attached to up to one target attacking creature." (Enchanted creature gets +1/+1 and has trample. -SVar:TrigToken:DB$ Token | TokenScript$ role_monster | AttachedTo$ Targeted | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target attacking creature | ValidTgts$ Creature.attacking +SVar:TrigToken:DB$ Token | TokenScript$ role_monster | AttachedTo$ Targeted | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target attacking creature | ValidTgts$ Creature.attacking | TokenOwner$ You T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, return CARDNAME to its owner's hand. SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ TriggeredNewCardLKICopy SVar:SacMe:2 diff --git a/forge-gui/res/cardsfolder/l/liege_of_the_hollows.txt b/forge-gui/res/cardsfolder/l/liege_of_the_hollows.txt index 40553ef6370..447d9d03538 100644 --- a/forge-gui/res/cardsfolder/l/liege_of_the_hollows.txt +++ b/forge-gui/res/cardsfolder/l/liege_of_the_hollows.txt @@ -6,6 +6,6 @@ T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ SVar:RepeatPayment:DB$ RepeatEach | RepeatPlayers$ Player | StartingWith$ You | ChangeZoneTable$ True | RepeatSubAbility$ DBPay | StackDescription$ When CARDNAME dies, each player may pay any amount of mana. Then each player creates a number of 1/1 green Squirrel creature tokens equal to the amount of mana they paid this way. SVar:DBPay:DB$ ChooseNumber | Defined$ Player.IsRemembered | ChooseAnyNumber$ True | ListTitle$ amount of mana to pay | AILogic$ MaxForAnyController | SubAbility$ DBToken # TODO: ideally the tokens should be created simultaneously after all the players have finished paying mana, but that's difficult to implement. -SVar:DBToken:DB$ Token | TokenAmount$ X | TokenScript$ g_1_1_squirrel | TokenOwner$ Player.IsRemembered | UnlessCost$ Y | UnlessPayer$ Player.IsRemembered | UnlessSwitched$ True +SVar:DBToken:DB$ Token | TokenAmount$ Y | TokenScript$ g_1_1_squirrel | TokenOwner$ Player.IsRemembered | UnlessCost$ Y | UnlessPayer$ Player.IsRemembered | UnlessSwitched$ True SVar:Y:Count$ChosenNumber Oracle:When Liege of the Hollows dies, each player may pay any amount of mana. Then each player creates a number of 1/1 green Squirrel creature tokens equal to the amount of mana they paid this way. diff --git a/forge-gui/res/cardsfolder/q/questing_cosplayer.txt b/forge-gui/res/cardsfolder/q/questing_cosplayer.txt index fd2ecbe0138..2585baf9568 100644 --- a/forge-gui/res/cardsfolder/q/questing_cosplayer.txt +++ b/forge-gui/res/cardsfolder/q/questing_cosplayer.txt @@ -3,7 +3,7 @@ ManaCost:1 G Types:Creature Human Bard PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Questing Role token and attach it to target creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature has all the abilities of Questing Beast.) -SVar:TrigToken:DB$ Token | TokenScript$ role_questing | AttachedTo$ Targeted | ValidTgts$ Creature +SVar:TrigToken:DB$ Token | TokenScript$ role_questing | AttachedTo$ Targeted | ValidTgts$ Creature | TokenOwner$ You DeckHas:Type$Aura|Role & Ability$Token DeckHints:Type$Aura Oracle:When Questing Cosplayer enters the battlefield, create a Questing Role token and attach it to target creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature has all the abilities of Questing Beast.) diff --git a/forge-gui/res/cardsfolder/t/the_rani.txt b/forge-gui/res/cardsfolder/t/the_rani.txt index 5ff59f3f078..d7cbe882a1c 100644 --- a/forge-gui/res/cardsfolder/t/the_rani.txt +++ b/forge-gui/res/cardsfolder/t/the_rani.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Time Lord Scientist PT:3/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME enters or attacks, create a red Aura enchantment token named Mark of the Rani attached to another target creature. That token has enchant creature and "Enchanted creature gets +2/+2 and is goaded." T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters or attacks, create a red Aura enchantment token named Mark of the Rani attached to another target creature. That token has enchant creature and "Enchanted creature gets +2/+2 and is goaded." -SVar:TrigToken:DB$ Token | TokenScript$ mark_of_the_rani | AttachedTo$ Targeted | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature +SVar:TrigToken:DB$ Token | TokenScript$ mark_of_the_rani | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature T:Mode$ DamageDone | ValidSource$ Creature.IsGoaded | ValidTarget$ Opponent | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigInvestigate | TriggerDescription$ Whenever a goaded creature deals combat damage to one of your opponents, investigate. SVar:TrigInvestigate:DB$ Investigate SVar:HasAttackEffect:TRUE