diff --git a/Mage.Sets/src/mage/sets/magic2010/IceCage.java b/Mage.Sets/src/mage/sets/magic2010/IceCage.java index e074bda971..b75f03934e 100644 --- a/Mage.Sets/src/mage/sets/magic2010/IceCage.java +++ b/Mage.Sets/src/mage/sets/magic2010/IceCage.java @@ -112,10 +112,10 @@ class IceCageEffect extends ReplacementEffectImpl<IceCageEffect> { @Override public boolean applies(GameEvent event, Ability source, Game game) { - Permanent enchantment = game.getPermanent(source.getSourceId()); - if (enchantment != null && enchantment.getAttachedTo() != null) { - if (source.getSourceId().equals(enchantment.getAttachedTo())) { - if (event.getType() == EventType.DECLARE_ATTACKER || event.getType() == EventType.DECLARE_BLOCKER || event.getType() == EventType.ACTIVATE_ABILITY) { + if (event.getType() == EventType.DECLARE_ATTACKER || event.getType() == EventType.DECLARE_BLOCKER || event.getType() == EventType.ACTIVATE_ABILITY) { + Permanent enchantment = game.getPermanent(source.getSourceId()); + if (enchantment != null && enchantment.getAttachedTo() != null) { + if (event.getSourceId().equals(enchantment.getAttachedTo())) { return true; } } @@ -147,11 +147,13 @@ class IceCageAbility extends TriggeredAbilityImpl<IceCageAbility> { @Override public boolean checkTrigger(GameEvent event, Game game) { - Permanent enchantment = game.getPermanent(sourceId); - if (enchantment != null && enchantment.getAttachedTo() != null) { - if (event.getTargetId().equals(enchantment.getAttachedTo()) && event.getType() == EventType.TARGETED) { - trigger(game, event.getPlayerId()); - return true; + if (event.getType() == EventType.TARGETED) { + Permanent enchantment = game.getPermanent(sourceId); + if (enchantment != null && enchantment.getAttachedTo() != null) { + if (event.getTargetId().equals(enchantment.getAttachedTo())) { + trigger(game, event.getPlayerId()); + return true; + } } } return false; diff --git a/Mage.Sets/src/mage/sets/magic2011/GarruksPackleader.java b/Mage.Sets/src/mage/sets/magic2011/GarruksPackleader.java index ff19458902..afd136ff4d 100644 --- a/Mage.Sets/src/mage/sets/magic2011/GarruksPackleader.java +++ b/Mage.Sets/src/mage/sets/magic2011/GarruksPackleader.java @@ -49,7 +49,7 @@ import mage.game.permanent.Permanent; public class GarruksPackleader extends CardImpl<GarruksPackleader> { public GarruksPackleader(UUID ownerId) { - super(ownerId, 177, "Garruks Packleader", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{G}"); + super(ownerId, 177, "Garruk's Packleader", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{G}"); this.expansionSetCode = "M11"; this.subtype.add("Beast"); this.color.setGreen(true); diff --git a/Mage.Sets/src/mage/sets/magic2011/HarborSerpent.java b/Mage.Sets/src/mage/sets/magic2011/HarborSerpent.java index 5fed85eb42..2fd9aadedb 100644 --- a/Mage.Sets/src/mage/sets/magic2011/HarborSerpent.java +++ b/Mage.Sets/src/mage/sets/magic2011/HarborSerpent.java @@ -33,8 +33,10 @@ import mage.Constants.CardType; import mage.Constants.Duration; import mage.Constants.Outcome; import mage.Constants.Rarity; +import mage.Constants.Zone; import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ReplacementEffectImpl; import mage.abilities.keyword.IslandwalkAbility; import mage.cards.CardImpl; @@ -59,6 +61,7 @@ public class HarborSerpent extends CardImpl<HarborSerpent> { this.toughness = new MageInt(5); this.addAbility(IslandwalkAbility.getInstance()); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new HarborSerpentEffect())); } public HarborSerpent(final HarborSerpent card) { diff --git a/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java b/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java index 7fde378cb8..29a1d71d2a 100644 --- a/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java +++ b/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java @@ -69,7 +69,7 @@ public class HoardingDragon extends CardImpl<HoardingDragon> { this.addAbility(FlyingAbility.getInstance()); this.addAbility(new EntersBattlefieldTriggeredAbility(new HoardingDragonEffect(this.getId()), true)); - this.addAbility(new PutIntoGraveFromBattlefieldTriggeredAbility(new ReturnFromExileEffect(this.getId(), Zone.BATTLEFIELD), true)); + this.addAbility(new PutIntoGraveFromBattlefieldTriggeredAbility(new ReturnFromExileEffect(this.getId(), Zone.BATTLEFIELD), false)); } public HoardingDragon(final HoardingDragon card) { diff --git a/Mage.Sets/src/mage/sets/tenth/GoblinPiker.java b/Mage.Sets/src/mage/sets/tenth/GoblinPiker.java index ed70addd50..0ac9ee94b9 100644 --- a/Mage.Sets/src/mage/sets/tenth/GoblinPiker.java +++ b/Mage.Sets/src/mage/sets/tenth/GoblinPiker.java @@ -41,7 +41,7 @@ import mage.cards.CardImpl; public class GoblinPiker extends CardImpl<GoblinPiker> { public GoblinPiker(UUID ownerId) { - super(ownerId, 209, "GoblinPiker", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); + super(ownerId, 209, "Goblin Piker", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); this.expansionSetCode = "10E"; this.subtype.add("Goblin"); this.subtype.add("Warrier"); diff --git a/Mage/src/mage/abilities/TriggeredAbilityImpl.java b/Mage/src/mage/abilities/TriggeredAbilityImpl.java index ffdff7caa5..df530369a2 100644 --- a/Mage/src/mage/abilities/TriggeredAbilityImpl.java +++ b/Mage/src/mage/abilities/TriggeredAbilityImpl.java @@ -31,6 +31,7 @@ package mage.abilities; import java.util.UUID; import mage.Constants.AbilityType; import mage.Constants.Zone; +import mage.MageObject; import mage.abilities.effects.Effect; import mage.game.Game; import mage.game.permanent.Permanent; @@ -78,8 +79,14 @@ public abstract class TriggeredAbilityImpl<T extends TriggeredAbilityImpl<T>> ex public boolean resolve(Game game) { if (optional) { Player player = game.getPlayer(this.getControllerId()); - Permanent permanent = game.getPermanent(sourceId); - if (!player.chooseUse(this.effects.get(0).getOutcome(), "Use " + this.getRule() + " ability from " + permanent.getName() + "?", game)) { + MageObject object = game.getObject(sourceId); + StringBuilder sb = new StringBuilder(); + sb.append("Use ").append(this.getRule()).append("ability"); + if (object != null) { + sb.append(" from ").append(object.getName()); + } + sb.append("?"); + if (!player.chooseUse(this.effects.get(0).getOutcome(), sb.toString(), game)) { return false; } } diff --git a/Mage/src/mage/abilities/effects/common/ReturnFromExileEffect.java b/Mage/src/mage/abilities/effects/common/ReturnFromExileEffect.java index ce8904fde7..e4ea5d504b 100644 --- a/Mage/src/mage/abilities/effects/common/ReturnFromExileEffect.java +++ b/Mage/src/mage/abilities/effects/common/ReturnFromExileEffect.java @@ -34,6 +34,7 @@ import mage.Constants.Zone; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; +import mage.game.ExileZone; import mage.game.Game; import mage.players.Player; @@ -65,13 +66,16 @@ public class ReturnFromExileEffect extends OneShotEffect<ReturnFromExileEffect> @Override public boolean apply(Game game, Ability source) { - Player player; - for (UUID cardId: game.getExile().getExileZone(exileId)) { - Card card = game.getCard(cardId); - card.moveToZone(zone, game, false); + ExileZone exile = game.getExile().getExileZone(exileId); + if (exile != null) { + for (UUID cardId: exile) { + Card card = game.getCard(cardId); + card.moveToZone(zone, game, false); + } + exile.clear(); + return true; } - game.getExile().getExileZone(exileId).clear(); - return true; + return false; } @Override diff --git a/Mage/src/mage/cards/CardImpl.java b/Mage/src/mage/cards/CardImpl.java index 46b674078c..f8b8dbfaa1 100644 --- a/Mage/src/mage/cards/CardImpl.java +++ b/Mage/src/mage/cards/CardImpl.java @@ -228,6 +228,7 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T> else { game.getExile().createZone(exileId, name).add(this); } + zone = event.getToZone(); game.fireEvent(new ZoneChangeEvent(this.getId(), ownerId, fromZone, Zone.EXILED)); return true; } @@ -238,6 +239,7 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T> public boolean putOntoBattlefield(Game game, Zone fromZone, UUID controllerId) { PermanentCard permanent = new PermanentCard(this, controllerId); game.getBattlefield().addPermanent(permanent); + zone = Zone.BATTLEFIELD; permanent.entersBattlefield(game); game.applyEffects(); game.fireEvent(new ZoneChangeEvent(permanent.getId(), controllerId, fromZone, Zone.BATTLEFIELD)); diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 28a94e814f..0386ca70b9 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -409,12 +409,12 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser protected boolean playAbility(ActivatedAbility ability, Game game) { //20091005 - 602.2a - if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.ACTIVATE_ABILITY, ability.getId(), playerId))) { + if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.ACTIVATE_ABILITY, ability.getSourceId(), ability.getId(), playerId))) { game.bookmarkState(); game.getStack().push(new StackAbility(ability, playerId)); String message = ability.getActivatedMessage(game); if (ability.activate(game, false)) { - game.fireEvent(GameEvent.getEvent(GameEvent.EventType.ACTIVATED_ABILITY, ability.getId(), playerId)); + game.fireEvent(GameEvent.getEvent(GameEvent.EventType.ACTIVATED_ABILITY, ability.getSourceId(), ability.getId(), playerId)); game.fireInformEvent(name + message); game.removeLastBookmark(); return true; @@ -426,10 +426,10 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser protected boolean specialAction(SpecialAction action, Game game) { //20091005 - 114 - if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.ACTIVATE_ABILITY, action.getId(), playerId))) { + if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.ACTIVATE_ABILITY, action.getSourceId(), action.getId(), playerId))) { game.bookmarkState(); if (action.activate(game, false)) { - game.fireEvent(GameEvent.getEvent(GameEvent.EventType.ACTIVATED_ABILITY, action.getId(), playerId)); + game.fireEvent(GameEvent.getEvent(GameEvent.EventType.ACTIVATED_ABILITY, action.getSourceId(), action.getId(), playerId)); game.fireInformEvent(name + action.getActivatedMessage(game)); if (action.resolve(game)) { game.removeLastBookmark(); diff --git a/Mage/src/mage/target/common/TargetAttackingCreature.java b/Mage/src/mage/target/common/TargetAttackingCreature.java index 8061ba0fbe..b52fd31c56 100644 --- a/Mage/src/mage/target/common/TargetAttackingCreature.java +++ b/Mage/src/mage/target/common/TargetAttackingCreature.java @@ -46,7 +46,7 @@ public class TargetAttackingCreature extends TargetCreaturePermanent<TargetAttac } public TargetAttackingCreature(int minNumTargets, int maxNumTargets, FilterAttackingCreature filter, boolean notTarget) { - super(1, 1, filter, notTarget); + super(minNumTargets, maxNumTargets, filter, notTarget); this.targetName = filter.getMessage(); } diff --git a/Mage/src/mage/target/common/TargetCreaturePermanent.java b/Mage/src/mage/target/common/TargetCreaturePermanent.java index e652b9ab42..37085d74a2 100644 --- a/Mage/src/mage/target/common/TargetCreaturePermanent.java +++ b/Mage/src/mage/target/common/TargetCreaturePermanent.java @@ -50,7 +50,7 @@ public class TargetCreaturePermanent<T extends TargetCreaturePermanent<T>> exten } public TargetCreaturePermanent(int minNumTargets, int maxNumTargets, FilterCreaturePermanent filter, boolean notTarget) { - super(1, 1, filter, notTarget); + super(minNumTargets, maxNumTargets, filter, notTarget); this.targetName = filter.getMessage(); } diff --git a/Mage/src/mage/target/common/TargetLandPermanent.java b/Mage/src/mage/target/common/TargetLandPermanent.java index caf85da1f9..a2e9758e67 100644 --- a/Mage/src/mage/target/common/TargetLandPermanent.java +++ b/Mage/src/mage/target/common/TargetLandPermanent.java @@ -51,7 +51,7 @@ public class TargetLandPermanent<T extends TargetLandPermanent<T>> extends Targe } public TargetLandPermanent(int minNumTargets, int maxNumTargets, FilterLandPermanent filter, boolean notTarget) { - super(1, 1, filter, notTarget); + super(minNumTargets, maxNumTargets, filter, notTarget); this.targetName = filter.getMessage(); } diff --git a/Mage/src/mage/target/common/TargetNonlandPermanent.java b/Mage/src/mage/target/common/TargetNonlandPermanent.java index 9bec9d1865..317fb8f468 100644 --- a/Mage/src/mage/target/common/TargetNonlandPermanent.java +++ b/Mage/src/mage/target/common/TargetNonlandPermanent.java @@ -46,7 +46,7 @@ public class TargetNonlandPermanent extends TargetPermanent<TargetNonlandPermane } public TargetNonlandPermanent(int minNumTargets, int maxNumTargets, boolean notTarget) { - super(1, 1, new FilterNonlandPermanent(), notTarget); + super(minNumTargets, maxNumTargets, new FilterNonlandPermanent(), notTarget); this.targetName = filter.getMessage(); }