diff --git a/Mage.Sets/src/mage/cards/v/VindictiveVampire.java b/Mage.Sets/src/mage/cards/v/VindictiveVampire.java index 1a49b81e000..5a5e617e26b 100644 --- a/Mage.Sets/src/mage/cards/v/VindictiveVampire.java +++ b/Mage.Sets/src/mage/cards/v/VindictiveVampire.java @@ -10,7 +10,6 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; -import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.permanent.AnotherPredicate; @@ -21,7 +20,7 @@ import java.util.UUID; */ public final class VindictiveVampire extends CardImpl { - private static FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); + private static FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature you control"); static { filter.add(AnotherPredicate.instance); diff --git a/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java index d6dc69c5c6d..4f844626d21 100644 --- a/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DiesCreatureTriggeredAbility.java @@ -1,5 +1,6 @@ package mage.abilities.common; +import mage.MageObject; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; import mage.constants.Zone; @@ -9,6 +10,7 @@ import mage.filter.predicate.permanent.AnotherPredicate; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; /** @@ -40,7 +42,8 @@ public class DiesCreatureTriggeredAbility extends TriggeredAbilityImpl { } public DiesCreatureTriggeredAbility(Effect effect, boolean optional, FilterPermanent filter, boolean setTargetPointer) { - this(Zone.BATTLEFIELD, effect, optional, filter, setTargetPointer); + // Needs "Zone.ALL" if the source itself should trigger or multiple (incl. source go to grave) + this(Zone.ALL, effect, optional, filter, setTargetPointer); } public DiesCreatureTriggeredAbility(Zone zone, Effect effect, boolean optional, FilterPermanent filter, boolean setTargetPointer) { @@ -60,6 +63,20 @@ public class DiesCreatureTriggeredAbility extends TriggeredAbilityImpl { return new DiesCreatureTriggeredAbility(this); } + @Override + public boolean isInUseableZone(Game game, MageObject source, GameEvent event) { + Permanent sourcePermanent; + if (game.getState().getZone(getSourceId()) == Zone.BATTLEFIELD) { + sourcePermanent = game.getPermanent(getSourceId()); + } else { + sourcePermanent = (Permanent) game.getPermanentOrLKIBattlefield(getSourceId()); + } + if (sourcePermanent == null) { + return false; + } + return hasSourceObjectAbility(game, sourcePermanent, event); + } + @Override public boolean checkEventType(GameEvent event, Game game) { return event.getType() == GameEvent.EventType.ZONE_CHANGE; @@ -67,15 +84,20 @@ public class DiesCreatureTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { + if (game.getPermanentOrLKIBattlefield(getSourceId()) == null) { + return false; + } ZoneChangeEvent zEvent = (ZoneChangeEvent) event; if (zEvent.isDiesEvent()) { - if (filter.match(zEvent.getTarget(), sourceId, controllerId, game) && zEvent.getTarget().isCreature()) { - if (setTargetPointer) { - for (Effect effect : this.getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getTargetId(), game)); + if (zEvent.getTarget() != null) { + if (filter.match(zEvent.getTarget(), getSourceId(), getControllerId(), game)) { + if (setTargetPointer) { + for (Effect effect : this.getEffects()) { + effect.setTargetPointer(new FixedTarget(event.getTargetId(), game)); + } } + return true; } - return true; } } return false;