From a5aa83837d278fa7f014faf17c51089210f355a3 Mon Sep 17 00:00:00 2001 From: Agetian Date: Tue, 20 Nov 2018 08:15:23 +0300 Subject: [PATCH] - Added puzzle PS_GRN7. - Fixed effect cards lingering in the command zone across Setup Game State calls from the dev mode menu. --- forge-ai/src/main/java/forge/ai/GameState.java | 6 ++++++ forge-game/src/main/java/forge/game/zone/Zone.java | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/forge-ai/src/main/java/forge/ai/GameState.java b/forge-ai/src/main/java/forge/ai/GameState.java index 10fee4a5847..522281d6884 100644 --- a/forge-ai/src/main/java/forge/ai/GameState.java +++ b/forge-ai/src/main/java/forge/ai/GameState.java @@ -1004,6 +1004,12 @@ public abstract class GameState { private void setupPlayerState(int life, Map cardTexts, final Player p, final int landsPlayed, final int landsPlayedLastTurn) { // Lock check static as we setup player state + // Clear all zones first, this ensures that any lingering cards and effects (e.g. in command zone) get cleared up + // before setting up a new state + for (ZoneType zt : ZONES.keySet()) { + p.getZone(zt).removeAllCards(true); + } + Map playerCards = new EnumMap(ZoneType.class); for (Entry kv : cardTexts.entrySet()) { String value = kv.getValue(); diff --git a/forge-game/src/main/java/forge/game/zone/Zone.java b/forge-game/src/main/java/forge/game/zone/Zone.java index 35f9f785410..229efd04468 100644 --- a/forge-game/src/main/java/forge/game/zone/Zone.java +++ b/forge-game/src/main/java/forge/game/zone/Zone.java @@ -141,6 +141,19 @@ public class Zone implements java.io.Serializable, Iterable { game.fireEvent(new GameEventZone(zoneType, getPlayer(), EventValueChangeType.ComplexUpdate, null)); } + public final void removeAllCards(boolean forcedWithoutEvents) { + if (forcedWithoutEvents) { + cardList.clear(); + } else { + for (Card c : cardList) { + if (cardList.remove(c)) { + onChanged(); + game.fireEvent(new GameEventZone(zoneType, getPlayer(), EventValueChangeType.Removed, c)); + } + } + } + } + public final boolean is(final ZoneType zone) { return zone == zoneType; }