From eb846c0499b891c18d096e19682a4a1a5257e5ed Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 9 Jun 2020 16:37:42 +0200 Subject: [PATCH] * Added ID name instead of only the name to the replacement effect selector list. Otherwise you can't identify the related source if you have multiple sources with the same name (related #6298). --- Mage.Sets/src/mage/cards/p/PalisadeGiant.java | 2 +- .../cards/abilities/keywords/MadnessTest.java | 12 ++-- .../cards/abilities/keywords/RiotTest.java | 2 +- .../redirect/PalisadeGiantTest.java | 60 +++++++++++++++++++ .../abilities/effects/ContinuousEffects.java | 2 +- 5 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/replacement/redirect/PalisadeGiantTest.java diff --git a/Mage.Sets/src/mage/cards/p/PalisadeGiant.java b/Mage.Sets/src/mage/cards/p/PalisadeGiant.java index 0ceed13bfb4..f1c808fbe9b 100644 --- a/Mage.Sets/src/mage/cards/p/PalisadeGiant.java +++ b/Mage.Sets/src/mage/cards/p/PalisadeGiant.java @@ -65,7 +65,7 @@ class PalisadeGiantReplacementEffect extends ReplacementEffectImpl { PalisadeGiantReplacementEffect() { super(Duration.WhileOnBattlefield, Outcome.RedirectDamage); - staticText = "All damage that would be dealt to you or another permanent you control is dealt to Palisade Giant instead"; + staticText = "All damage that would be dealt to you or another permanent you control is dealt to {this} instead"; } PalisadeGiantReplacementEffect(final PalisadeGiantReplacementEffect effect) { diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MadnessTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MadnessTest.java index 26871817688..bb4c94e3832 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MadnessTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MadnessTest.java @@ -177,15 +177,15 @@ public class MadnessTest extends CardTestPlayerBase { addCard(Zone.HAND, playerA, "Forest"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Falkenrath Gorger"); + setChoice(playerA, "Yes"); // Discard a card and put a +1/+1 counter on that creature, it gains haste until end of turn, and it becomes a Vampire in addition to its other types? - setChoice(playerA, "Asylum Visitor"); - setChoice(playerA, "Asylum Visitor: Madness {1}{B}"); // choose replacement effect (TODO: 2 same madness effetcs: one from Asylum Visitor, one from Falkenrath -- is that ok?!) - // - setChoice(playerA, "Yes"); // use madness triggered ability - setChoice(playerA, "Yes"); // use madness cast + setChoice(playerA, "Asylum Visitor"); // Card to discard from Falkenrath entering by Olivia effect + setChoice(playerA, "Asylum Visito"); // Madness {1}{B} + setChoice(playerA, "Yes"); // use madness triggered ability + setChoice(playerA, "Yes"); // use madness cast setChoice(playerA, "Yes"); // Discard a card and put a +1/+1 counter on that creature, it gains haste until end of turn, and it becomes a Vampire in addition to its other types? setChoice(playerA, "Forest"); - + setStrictChooseMode(true); setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RiotTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RiotTest.java index 310de3055ef..7315ce32c68 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RiotTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/RiotTest.java @@ -101,7 +101,7 @@ public class RiotTest extends CardTestPlayerBase { addCard(Zone.HAND, playerA, "Silvercoat Lion", 1); // Creature {1}{W} 2/2 castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); - setChoice(playerA, "Rhythm of the Wild: Nontoken creatu"); // choose replacement effect + setChoice(playerA, "Rhythm of the Wild"); // choose replacement effect setChoice(playerA, "Yes"); // yes - counter setChoice(playerA, "Yes"); // yes - counter diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/redirect/PalisadeGiantTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/redirect/PalisadeGiantTest.java new file mode 100644 index 00000000000..63410e6417d --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/redirect/PalisadeGiantTest.java @@ -0,0 +1,60 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.cards.replacement.redirect; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.permanent.Permanent; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class PalisadeGiantTest extends CardTestPlayerBase { + + /** + * when you have two Palisade Giants in play and your opponent deals you + * damage, the damage is applied to both of them rather than allowing you to + * choose which replacement effect applies (as it should). I experienced + * this multiple times in games vs the A.I. + */ + @Test + public void testRedirectDamage() { + + // All damage that would be dealt to you or another permanent you control is dealt to Palisade Giant instead. + addCard(Zone.BATTLEFIELD, playerA, "Palisade Giant", 2); // Creature 2/7 + + addCard(Zone.HAND, playerB, "Lightning Bolt"); // Instant {R} + addCard(Zone.BATTLEFIELD, playerB, "Mountain"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", playerA); + + setChoice(playerA, "Palisade Giant"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertAllCommandsUsed(); + + assertGraveyardCount(playerB, "Lightning Bolt", 1); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + int damage = 0; + for (Permanent permanent : currentGame.getBattlefield().getAllActivePermanents(playerA.getId())) { + if (permanent.getName().equals("Palisade Giant")) { + damage += permanent.getDamage(); + } + } + Assert.assertEquals("Only 3 damage in sum should be dealt to the Palisade Giants", 3, damage); + + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/ContinuousEffects.java b/Mage/src/main/java/mage/abilities/effects/ContinuousEffects.java index f32f87e537b..bf7d2beed13 100644 --- a/Mage/src/main/java/mage/abilities/effects/ContinuousEffects.java +++ b/Mage/src/main/java/mage/abilities/effects/ContinuousEffects.java @@ -1349,7 +1349,7 @@ public class ContinuousEffects implements Serializable { for (Ability ability : entry.getValue()) { MageObject object = game.getObject(ability.getSourceId()); if (object != null) { - texts.put(ability.getId().toString() + '_' + entry.getKey().getId().toString(), object.getName() + ": " + ability.getRule(object.getName())); + texts.put(ability.getId().toString() + '_' + entry.getKey().getId().toString(), object.getIdName() + ": " + ability.getRule(object.getName())); } else { texts.put(ability.getId().toString() + '_' + entry.getKey().getId().toString(), entry.getKey().getText(null)); }