From d1fb23d8a2e54c1cda01a47cf0ed3ad8b54d33e9 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 30 Dec 2013 19:28:37 +0100 Subject: [PATCH] * Jeleva, Nephalia's Scourge - Fixed that comes into play ability works with correctly (e.g. additional commander cast mana). --- .../commander2013/JelevaNephaliasScourge.java | 87 +++++++++++++++---- 1 file changed, 72 insertions(+), 15 deletions(-) diff --git a/Mage.Sets/src/mage/sets/commander2013/JelevaNephaliasScourge.java b/Mage.Sets/src/mage/sets/commander2013/JelevaNephaliasScourge.java index a962a30923d..09601592086 100644 --- a/Mage.Sets/src/mage/sets/commander2013/JelevaNephaliasScourge.java +++ b/Mage.Sets/src/mage/sets/commander2013/JelevaNephaliasScourge.java @@ -27,12 +27,13 @@ */ package mage.sets.commander2013; +import java.util.HashMap; +import java.util.Map; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.dynamicvalue.common.ManaSpentToCastCount; import mage.abilities.effects.OneShotEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.Card; @@ -40,12 +41,17 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; +import mage.constants.WatcherScope; import mage.filter.common.FilterInstantOrSorceryCard; import mage.game.Game; +import mage.game.events.GameEvent; import mage.game.permanent.Permanent; +import mage.game.stack.Spell; +import mage.game.stack.StackObject; import mage.players.Player; import mage.target.common.TargetCardInExile; import mage.util.CardUtil; +import mage.watchers.WatcherImpl; /** * @@ -72,6 +78,7 @@ public class JelevaNephaliasScourge extends CardImpl { this.addAbility(new EntersBattlefieldTriggeredAbility(new JelevaNephaliasScourgeEffect(), false)); // Whenever Jeleva attacks, you may cast an instant or sorcery card exiled with it without paying its mana cost. this.addAbility(new AttacksTriggeredAbility(new JelevaNephaliasCastEffect(), false)); + this.addWatcher(new JelevaNephaliasWatcher()); } @@ -104,25 +111,28 @@ class JelevaNephaliasScourgeEffect extends OneShotEffect 0) { + for (UUID playerId : controller.getInRange()) { + Player player = game.getPlayer(playerId); + if (player != null) { + int cardsToExile = Math.min(player.getLibrary().size(), xValue); + for(int i = 0; i < cardsToExile; i++) { + Card card = player.getLibrary().removeFromTop(game); + if (card != null) { + card.moveToExile(CardUtil.getCardExileZoneId(game, source), sourceCard.getName(), source.getSourceId(), game); + } + } } } } + return true; } - return true; } - - return false; } } @@ -162,3 +172,50 @@ class JelevaNephaliasCastEffect extends OneShotEffect return false; } } + +class JelevaNephaliasWatcher extends WatcherImpl { + + private Map manaSpendToCast = new HashMap(); // cast + + public JelevaNephaliasWatcher() { + super("ManaPaidToCastJelevaNephalias", WatcherScope.CARD); + } + + public JelevaNephaliasWatcher(final JelevaNephaliasWatcher watcher) { + super(watcher); + } + + @Override + public JelevaNephaliasWatcher copy() { + return new JelevaNephaliasWatcher(this); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.SPELL_CAST && event.getSourceId().equals(sourceId)) { + if (!game.getStack().isEmpty()) { + for (StackObject stackObject : game.getStack()) { + if (stackObject instanceof Spell && ((Spell)stackObject).getSourceId().equals(sourceId)) { + Card card = game.getCard(sourceId); + if (!manaSpendToCast.containsValue(card.getZoneChangeCounter())) { + manaSpendToCast.put(new Integer(card.getZoneChangeCounter()), new Integer(((Spell)stackObject).getSpellAbility().getManaCostsToPay().convertedManaCost())); + } + } + } + } + } + } + + public int getManaSpentToCastLastTime(int zoneChangeCounter) { + if (manaSpendToCast.containsKey(zoneChangeCounter)) { + return manaSpendToCast.get(zoneChangeCounter); + } + return 0; + } + + @Override + public void reset() { + super.reset(); + manaSpendToCast.clear(); + } +}