From 7d0f5a1944a058a7f277fa0d5c9c0531d11ae877 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Thu, 28 Apr 2022 20:24:04 +0200 Subject: [PATCH] Fix Esix replacing too much from other effects --- .../ability/effects/CopyPermanentEffect.java | 2 +- .../ability/effects/ReplaceTokenEffect.java | 21 ++++++++++++++++++- .../res/cardsfolder/e/esix_fractal_bloom.txt | 4 ++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java index 3d4b483e28f..600cac487d8 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java @@ -251,7 +251,7 @@ public class CopyPermanentEffect extends TokenEffectBase { } } // end resolve - private Card getProtoType(final SpellAbility sa, final Card original, final Player newOwner) { + public static Card getProtoType(final SpellAbility sa, final Card original, final Player newOwner) { final Card host = sa.getHostCard(); int id = newOwner == null ? 0 : newOwner.getGame().nextCardId(); final Card copy = new Card(id, original.getPaperCard(), host.getGame()); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceTokenEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceTokenEffect.java index d83c24ce99b..0ff18abd87d 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceTokenEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceTokenEffect.java @@ -17,11 +17,15 @@ import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; +import forge.game.card.CardCollectionView; +import forge.game.card.CardLists; import forge.game.card.TokenCreateTable; import forge.game.card.token.TokenInfo; import forge.game.player.Player; import forge.game.replacement.ReplacementResult; import forge.game.spellability.SpellAbility; +import forge.game.zone.ZoneType; +import forge.util.Localizer; public class ReplaceTokenEffect extends SpellAbilityEffect { @@ -86,6 +90,16 @@ public class ReplaceTokenEffect extends SpellAbilityEffect { } } } else if ("ReplaceToken".equals(sa.getParam("Type"))) { + Card chosen = null; + if (sa.hasParam("ValidChoices")) { + CardCollectionView choices = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("ValidChoices").split(","), p, card, sa); + if (choices.isEmpty()) { + originalParams.put(AbilityKey.ReplacementResult, ReplacementResult.NotReplaced); + return; + } + chosen = p.getController().chooseSingleEntityForEffect(choices, sa, Localizer.getInstance().getMessage("lblChooseaCard"), false, null); + } + long timestamp = game.getNextTimestamp(); Multimap>> toInsertMap = ArrayListMultimap.create(); @@ -111,7 +125,12 @@ public class ReplaceTokenEffect extends SpellAbilityEffect { continue; } for (String script : sa.getParam("TokenScript").split(",")) { - final Card token = TokenInfo.getProtoType(script, sa, pe.getKey()); + final Card token; + if (script.equals("Chosen")) { + token = CopyPermanentEffect.getProtoType(sa, chosen, pe.getKey()); + } else { + token = TokenInfo.getProtoType(script, sa, pe.getKey()); + } if (token == null) { throw new RuntimeException("don't find Token for TokenScript: " + script); diff --git a/forge-gui/res/cardsfolder/e/esix_fractal_bloom.txt b/forge-gui/res/cardsfolder/e/esix_fractal_bloom.txt index c92f0d037a2..1c1fee01076 100644 --- a/forge-gui/res/cardsfolder/e/esix_fractal_bloom.txt +++ b/forge-gui/res/cardsfolder/e/esix_fractal_bloom.txt @@ -4,8 +4,8 @@ Types:Legendary Creature Fractal PT:4/4 K:Flying R:Event$ CreateToken | ActiveZones$ Battlefield | CheckSVar$ X | SVarCompare$ EQ0 | ValidPlayer$ You | PlayerTurn$ True | Optional$ True | ReplaceWith$ DBCopy | Description$ The first time you would create one or more tokens during each of your turns, you may instead choose a creature other than CARDNAME and create that many tokens that are copies of that creature. -SVar:DBCopy:DB$ CopyPermanent | Choices$ Creature.Other | NumCopies$ Y +SVar:DBCopy:DB$ ReplaceToken | Type$ ReplaceToken | ValidChoices$ Creature.Other | TokenScript$ Chosen SVar:X:PlayerCountPropertyYou$TokensCreatedThisTurn -SVar:Y:ReplaceCount$TokenNum DeckHas:Ability$Token +AI:RemoveDeck:All Oracle:Flying\nThe first time you would create one or more tokens during each of your turns, you may instead choose a creature other than Esix, Fractal Bloom and create that many tokens that are copies of that creature.