From e679b1003dafff832e9b7d7e14410a6416fc34fd Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Thu, 15 Feb 2018 16:51:47 +0100 Subject: [PATCH] * Fixed that all spells could be cast by canceling the mana payment process. --- Mage/src/main/java/mage/game/GameImpl.java | 9 +++++++-- Mage/src/main/java/mage/game/GameStates.java | 11 +++++------ Mage/src/main/java/mage/players/PlayerImpl.java | 8 +++----- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index 28b5d422fb4..efb8984d58c 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -668,8 +668,10 @@ public abstract class GameImpl implements Game, Serializable { if (!simulation && !this.hasEnded()) { // if player left or game is over no undo is possible - this could lead to wrong winner if (bookmark != 0) { if (!savedStates.contains(bookmark - 1)) { - logger.error("It was not possible to do the requested undo operation (bookmark " + (bookmark - 1) + " does not exist) context: " + context); - logger.info("Saved states: " + savedStates.toString()); + if (!savedStates.isEmpty()) { // empty if rollback to a turn was requested before, otherwise unclear why + logger.error("It was not possible to do the requested undo operation (bookmark " + (bookmark - 1) + " does not exist) context: " + context); + logger.info("Saved states: " + savedStates.toString()); + } } else { int stateNum = savedStates.get(bookmark - 1); removeBookmark(bookmark); @@ -2972,6 +2974,9 @@ public abstract class GameImpl implements Game, Serializable { informPlayers(GameLog.getPlayerRequestColoredText("Player request: Rolling back to start of turn " + restore.getTurnNum())); state.restoreForRollBack(restore); playerList.setCurrent(state.getPlayerByOrderId()); + // Reset temporary created bookmarks because no longer valid after rollback + savedStates.clear(); + gameStates.clear(); // because restore uses the objects without copy each copy the state again gameStatesRollBack.put(getTurnNum(), state.copy()); executingRollback = true; diff --git a/Mage/src/main/java/mage/game/GameStates.java b/Mage/src/main/java/mage/game/GameStates.java index e4e82b2efbf..627b3fa1b37 100644 --- a/Mage/src/main/java/mage/game/GameStates.java +++ b/Mage/src/main/java/mage/game/GameStates.java @@ -24,15 +24,13 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.game; -import org.apache.log4j.Logger; - import java.io.Serializable; import java.util.LinkedList; import java.util.List; +import org.apache.log4j.Logger; /** * @@ -41,8 +39,6 @@ import java.util.List; public class GameStates implements Serializable { private static final Logger logger = Logger.getLogger(GameStates.class); - -// private final List states; private final List states; public GameStates() { @@ -88,4 +84,7 @@ public class GameStates implements Serializable { return null; } + public void clear() { + states.clear(); + } } diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index bbdc63b2c9c..ceb43d787f0 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -1190,11 +1190,9 @@ public abstract class PlayerImpl implements Player, Serializable { } protected void restoreState(int bookmark, String text, Game game) { - if (storedBookmark > -1) { // e.g. a turn rollback sets this to -1 so no more rollback of current action may be done - game.restoreState(bookmark, text); - if (storedBookmark >= bookmark) { - resetStoredBookmark(game); - } + game.restoreState(bookmark, text); + if (storedBookmark >= bookmark) { + resetStoredBookmark(game); } }