From af61e8b43b21de6ec6f36807affe46a54a28e105 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 6 Oct 2015 23:26:22 +0200 Subject: [PATCH] * Fixed some cards with "When a spell or ability an opponent controls causes you to discard" trigger (e.g. Guerilla Tactics). --- .../src/mage/sets/futuresight/Quagnoth.java | 16 +++++++++----- .../sets/ninthedition/GuerrillaTactics.java | 11 ++++++---- .../saviorsofkamigawa/PureIntentions.java | 22 +++++++++++++------ 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/Mage.Sets/src/mage/sets/futuresight/Quagnoth.java b/Mage.Sets/src/mage/sets/futuresight/Quagnoth.java index 83c191c5817..bd4fa8f57e3 100644 --- a/Mage.Sets/src/mage/sets/futuresight/Quagnoth.java +++ b/Mage.Sets/src/mage/sets/futuresight/Quagnoth.java @@ -57,10 +57,10 @@ public class Quagnoth extends CardImpl { // Split second this.addAbility(new SplitSecondAbility()); - + // Shroud this.addAbility(ShroudAbility.getInstance()); - + // When a spell or ability an opponent controls causes you to discard Quagnoth, return it to your hand. this.addAbility(new QuagnothTriggeredAbility()); } @@ -97,13 +97,17 @@ class QuagnothTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { - return game.getOpponents(this.getControllerId()).contains(game.getControllerId(event.getSourceId())) && - StackObject.class.isInstance(game.getObject(event.getSourceId())) && - getSourceId().equals(event.getTargetId()); + if (getSourceId().equals(event.getTargetId())) { + StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); + if (stackObject != null) { + return game.getOpponents(this.getControllerId()).contains(stackObject.getControllerId()); + } + } + return false; } @Override public String getRule() { return "When a spell or ability an opponent controls causes you to discard {this}, " + super.getRule(); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/ninthedition/GuerrillaTactics.java b/Mage.Sets/src/mage/sets/ninthedition/GuerrillaTactics.java index 052be88b5cf..e49ec5a5267 100644 --- a/Mage.Sets/src/mage/sets/ninthedition/GuerrillaTactics.java +++ b/Mage.Sets/src/mage/sets/ninthedition/GuerrillaTactics.java @@ -50,7 +50,6 @@ public class GuerrillaTactics extends CardImpl { super(ownerId, 196, "Guerrilla Tactics", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{1}{R}"); this.expansionSetCode = "9ED"; - // Guerrilla Tactics deals 2 damage to target creature or player. this.getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); @@ -91,9 +90,13 @@ class GuerrillaTacticsTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { - return game.getOpponents(this.getControllerId()).contains(game.getControllerId(event.getSourceId())) && - StackObject.class.isInstance(game.getObject(event.getSourceId())) && - getSourceId().equals(event.getTargetId()); + if (getSourceId().equals(event.getTargetId())) { + StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); + if (stackObject != null) { + return game.getOpponents(this.getControllerId()).contains(stackObject.getControllerId()); + } + } + return false; } @Override diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/PureIntentions.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/PureIntentions.java index 7a1ccdf9675..e3ae09ccbe2 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/PureIntentions.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/PureIntentions.java @@ -92,11 +92,12 @@ class PureIntentionsAllTriggeredAbility extends DelayedTriggeredAbility { @Override public boolean checkTrigger(GameEvent event, Game game) { - if (game.getOpponents(this.getControllerId()).contains(game.getControllerId(event.getSourceId())) && - StackObject.class.isInstance(game.getObject(event.getSourceId()))) { + StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); + if (stackObject != null + && game.getOpponents(this.getControllerId()).contains(stackObject.getControllerId())) { Card card = game.getCard(event.getTargetId()); if (card != null && card.getOwnerId().equals(getControllerId())) { - for(Effect effect : getEffects()) { + for (Effect effect : getEffects()) { effect.setTargetPointer(new FixedTarget(event.getTargetId())); } return true; @@ -116,7 +117,6 @@ class PureIntentionsAllTriggeredAbility extends DelayedTriggeredAbility { } } - class PureIntentionsTriggeredAbility extends TriggeredAbilityImpl { public PureIntentionsTriggeredAbility() { @@ -140,9 +140,17 @@ class PureIntentionsTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { - return game.getOpponents(this.getControllerId()).contains(game.getControllerId(event.getSourceId())) && - StackObject.class.isInstance(game.getObject(event.getSourceId())) && - event.getTargetId().equals(getSourceId()); + if (getSourceId().equals(event.getTargetId())) { + StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); + if (stackObject != null + && game.getOpponents(this.getControllerId()).contains(stackObject.getControllerId())) { + for (Effect effect : getEffects()) { + effect.setTargetPointer(new FixedTarget(event.getTargetId())); + } + return true; + } + } + return false; } @Override