From 4adc937b3c9bf2250f70451811fea27c935b2e52 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Thu, 20 Jan 2011 18:47:26 +0300 Subject: [PATCH] Fix for LKI. Ratchet Bomb works. --- .../sets/scarsofmirrodin/RatchetBomb.java | 8 +-- Mage/src/mage/game/GameImpl.java | 54 ++++++++++--------- .../mage/game/permanent/PermanentCard.java | 1 + 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/RatchetBomb.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/RatchetBomb.java index ff87e3d9af..0fd8c96f0c 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/RatchetBomb.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/RatchetBomb.java @@ -85,16 +85,18 @@ public class RatchetBomb extends CardImpl { @Override public boolean apply(Game game, Ability source) { Permanent p = game.getBattlefield().getPermanent(source.getSourceId()); - if (p == null) { + if (p == null) { p = (Permanent) game.getLastKnownInformation(source.getSourceId(), Zone.BATTLEFIELD); - if (p == null) + if (p == null) { return false; + } } int count = p.getCounters().getCount(CounterType.CHARGE); for (Permanent perm: game.getBattlefield().getAllActivePermanents()) { - if (perm.getManaCost().convertedManaCost() == count && !(perm.getCardType().contains(CardType.LAND))) + if (perm.getManaCost().convertedManaCost() == count && !(perm.getCardType().contains(CardType.LAND))) { perm.destroy(source.getId(), game, false); + } } return true; diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 5a48ea624c..f5bd9e3d6f 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -473,37 +473,39 @@ public abstract class GameImpl> implements Game, Serializa @Override public void playPriority(UUID activePlayerId) { - while (!isGameOver()) { - state.getPlayers().resetPassed(); - state.getPlayerList().setCurrent(activePlayerId); - Player player; + try { while (!isGameOver()) { - player = getPlayer(state.getPlayerList().get()); - state.setPriorityPlayerId(player.getId()); - while (!player.isPassed() && !player.hasLost() && !player.hasLeft()&& !isGameOver()) { - checkStateAndTriggered(); - if (isGameOver()) return; - // resetPassed should be called if player performs any action - player.priority(this); - if (isGameOver()) return; - applyEffects(); - resetLKI(); - } - if (isGameOver()) return; - if (allPassed()) { - if (!state.getStack().isEmpty()) { - //20091005 - 115.4 - state.getStack().resolve(this); + state.getPlayers().resetPassed(); + state.getPlayerList().setCurrent(activePlayerId); + Player player; + while (!isGameOver()) { + player = getPlayer(state.getPlayerList().get()); + state.setPriorityPlayerId(player.getId()); + while (!player.isPassed() && !player.hasLost() && !player.hasLeft() && !isGameOver()) { + checkStateAndTriggered(); + if (isGameOver()) return; + // resetPassed should be called if player performs any action + player.priority(this); + if (isGameOver()) return; applyEffects(); - state.getPlayers().resetPassed(); - fireUpdatePlayersEvent(); - break; } - else - return; + if (isGameOver()) return; + if (allPassed()) { + if (!state.getStack().isEmpty()) { + //20091005 - 115.4 + state.getStack().resolve(this); + applyEffects(); + state.getPlayers().resetPassed(); + fireUpdatePlayersEvent(); + break; + } else + return; + } + state.getPlayerList().getNext(); } - state.getPlayerList().getNext(); } + } finally { + resetLKI(); } } diff --git a/Mage/src/mage/game/permanent/PermanentCard.java b/Mage/src/mage/game/permanent/PermanentCard.java index 16c9b4fbfa..bfd47a74b2 100644 --- a/Mage/src/mage/game/permanent/PermanentCard.java +++ b/Mage/src/mage/game/permanent/PermanentCard.java @@ -153,6 +153,7 @@ public class PermanentCard extends PermanentImpl { if (!game.replaceEvent(event)) { Card card = game.getCard(objectId); Player owner = game.getPlayer(ownerId); + game.rememberLKI(objectId, Zone.BATTLEFIELD, this); if (owner != null) { switch (event.getToZone()) { case GRAVEYARD: