From 07eae3c8d183e58c3ec697daf80fde475198922a Mon Sep 17 00:00:00 2001 From: tool4ever Date: Wed, 24 Jul 2024 04:59:34 +0000 Subject: [PATCH] Update cardstates after creating token from prototype (#5676) * Hotfix for Toggo rock * Force update cardstate * Clean up --------- Co-authored-by: tool4EvEr --- .../game/ability/effects/TokenEffectBase.java | 2 + .../main/java/forge/game/card/CardState.java | 37 ++++++++++--------- .../cardsfolder/e/eriette_the_beguiler.txt | 2 +- 3 files changed, 23 insertions(+), 18 deletions(-) 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 eb5802f2250..95102fecb4e 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 @@ -114,6 +114,8 @@ public abstract class TokenEffectBase extends SpellAbilityEffect { for (int i = 0; i < cellAmount; i++) { Card tok = new CardCopyService(prototype).copyCard(true); + // disconnect from prototype + tok.getStates().forEach(cs -> tok.getState(cs).resetOriginalHost()); // Crafty Cutpurse would change under which control it does enter, // but it shouldn't change who creates the token tok.setOwner(creator); diff --git a/forge-game/src/main/java/forge/game/card/CardState.java b/forge-game/src/main/java/forge/game/card/CardState.java index 895b92b37ed..ff7c0ade289 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -18,7 +18,6 @@ package forge.game.card; import java.util.Collection; -import java.util.List; import java.util.Map; import java.util.Set; @@ -748,15 +747,26 @@ public class CardState extends GameObject implements IHasSVars { } } + public ImmutableList getTraits() { + return ImmutableList.builder() + .addAll(manaAbilities) + .addAll(nonManaAbilities) + .addAll(triggers) + .addAll(replacementEffects) + .addAll(staticAbilities) + .build(); + } + + public void resetOriginalHost() { + for (final CardTraitBase ctb : getTraits()) { + if (ctb.isIntrinsic()) { + ctb.setCardState(this); + } + } + } + public void updateChangedText() { - final List allAbs = ImmutableList.builder() - .addAll(manaAbilities) - .addAll(nonManaAbilities) - .addAll(triggers) - .addAll(replacementEffects) - .addAll(staticAbilities) - .build(); - for (final CardTraitBase ctb : allAbs) { + for (final CardTraitBase ctb : getTraits()) { if (ctb.isIntrinsic()) { ctb.changeText(); } @@ -764,14 +774,7 @@ public class CardState extends GameObject implements IHasSVars { } public void changeTextIntrinsic(Map colorMap, Map typeMap) { - final List allAbs = ImmutableList.builder() - .addAll(manaAbilities) - .addAll(nonManaAbilities) - .addAll(triggers) - .addAll(replacementEffects) - .addAll(staticAbilities) - .build(); - for (final CardTraitBase ctb : allAbs) { + for (final CardTraitBase ctb : getTraits()) { if (ctb.isIntrinsic()) { ctb.changeTextIntrinsic(colorMap, typeMap); } diff --git a/forge-gui/res/cardsfolder/e/eriette_the_beguiler.txt b/forge-gui/res/cardsfolder/e/eriette_the_beguiler.txt index 8352cb852b2..e088d918b58 100644 --- a/forge-gui/res/cardsfolder/e/eriette_the_beguiler.txt +++ b/forge-gui/res/cardsfolder/e/eriette_the_beguiler.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Human Warlock PT:4/4 K:Lifelink T:Mode$ Attached | ValidSource$ Aura.YouCtrl | TargetRelativeToSource$ Permanent.nonLand+OppCtrl+cmcLEX | TriggerZones$ Battlefield | Execute$ TrigGainControl | TriggerDescription$ Whenever an Aura you control becomes attached to a nonland permanent an opponent controls with mana value less than or equal to that Aura's mana value, gain control of that permanent for as long as that Aura is attached to it. -SVar:TrigGainControl:DB$ GainControl | NewController$ You | Defined$ TriggeredTarget | Duration$ UntilSourceUnattached +SVar:TrigGainControl:DB$ GainControl | NewController$ You | Defined$ TriggeredTarget | LoseControl$ UntilSourceUnattached SVar:X:Count$CardManaCost DeckHas:Ability$LifeGain DeckNeeds:Type$Aura