From 4f2c21a146e9bfc801d239a03fbda80a588e196c Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 2 Jan 2016 16:31:42 +0100 Subject: [PATCH] * Fixed a bug that target event was wrongly created if effects like chnage target of Spellskite didn't change the target. --- .../sets/riseoftheeldrazi/FlameSlash.java | 16 ++++++------ .../test/cards/triggers/SpellskiteTest.java | 25 +++++++++++++++++++ ...getOfTargetSpellAbilityToSourceEffect.java | 3 +++ 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/FlameSlash.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/FlameSlash.java index 1851647f65a..3ec35b89f67 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/FlameSlash.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/FlameSlash.java @@ -1,16 +1,16 @@ /* * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. - * + * * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR @@ -20,19 +20,18 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.sets.riseoftheeldrazi; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Rarity; import mage.abilities.effects.common.DamageTargetEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; import mage.target.common.TargetCreaturePermanent; /** @@ -45,6 +44,7 @@ public class FlameSlash extends CardImpl { super(ownerId, 145, "Flame Slash", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{R}"); this.expansionSetCode = "ROE"; + // Flame Slash deals 4 damage to target creature. this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addEffect(new DamageTargetEffect(4)); } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SpellskiteTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SpellskiteTest.java index 5c2a7cdd982..0fe0e93c2eb 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SpellskiteTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/SpellskiteTest.java @@ -225,4 +225,29 @@ public class SpellskiteTest extends CardTestPlayerBase { assertLife(playerB, 20); } + + /** + * When an AI opponent casts a spell targeting one of my creatures, Wild + * Defiance does not trigger. (Tested with Flame Slash, which was able to + * kill my Spellskite) + */ + @Test + public void testWildDefiance() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); + // Flame Slash deals 4 damage to target creature. + addCard(Zone.HAND, playerA, "Flame Slash"); // {R} + + // Whenever a creature you control becomes the target of an instant or sorcery spell, that creature gets +3/+3 until end of turn. + addCard(Zone.BATTLEFIELD, playerB, "Wild Defiance", 1); + addCard(Zone.BATTLEFIELD, playerB, "Spellskite", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Flame Slash", "Spellskite"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Flame Slash", 1); + assertPowerToughness(playerB, "Spellskite", 3, 7); + } + } diff --git a/Mage/src/main/java/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java index d332b7ac6cd..40d64df9a7d 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ChangeATargetOfTargetSpellAbilityToSourceEffect.java @@ -58,6 +58,9 @@ public class ChangeATargetOfTargetSpellAbilityToSourceEffect extends OneShotEffe boolean twoTimesTarget = false; if (targets.size() == 1 && targets.get(0).getTargets().size() == 1) { Target target = targets.get(0); + if (target.getFirstTarget().equals(source.getSourceId())) { + return true; // Target was already the same source, so no change / target event to create + } if (target.canTarget(stackObject.getControllerId(), source.getSourceId(), sourceAbility, game)) { oldTargetName = getTargetName(targets.getFirstTarget(), game); target.clearChosen();