From 42d6faf6468ebd5b4befbb395ae687321b23276e Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Thu, 17 Sep 2020 17:10:25 -0400 Subject: [PATCH] [ZNR] fixed Kargan Intimidator issues (#7046) --- Mage/src/main/java/mage/abilities/Modes.java | 24 +++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/Mage/src/main/java/mage/abilities/Modes.java b/Mage/src/main/java/mage/abilities/Modes.java index fe9febad9d2..1d3e31ecabb 100644 --- a/Mage/src/main/java/mage/abilities/Modes.java +++ b/Mage/src/main/java/mage/abilities/Modes.java @@ -36,7 +36,6 @@ public class Modes extends LinkedHashMap { private boolean isRandom = false; private String chooseText = null; private boolean resetEachTurn = false; - private int turnNum = 0; public Modes() { this.currentMode = new Mode(); @@ -70,7 +69,6 @@ public class Modes extends LinkedHashMap { this.isRandom = modes.isRandom; this.chooseText = modes.chooseText; this.resetEachTurn = modes.resetEachTurn; - this.turnNum = modes.turnNum; if (modes.getSelectedModes().isEmpty()) { this.currentMode = values().iterator().next(); } else { @@ -218,9 +216,9 @@ public class Modes extends LinkedHashMap { public boolean choose(Game game, Ability source) { if (this.isResetEachTurn()) { - if (this.turnNum != game.getTurnNum()) { + if (this.getTurnNum(game, source) != game.getTurnNum()) { this.clearAlreadySelectedModes(source, game); - this.turnNum = game.getTurnNum(); + this.setTurnNum(game, source); } } if (this.size() > 1) { @@ -338,7 +336,7 @@ public class Modes extends LinkedHashMap { } private void clearAlreadySelectedModes(Ability source, Game game) { - for (UUID modeId : getSelectedModes()) { + for (UUID modeId : getAlreadySelectedModes(source, game)) { String key = getKey(source, game, modeId); game.getState().setValue(key, false); } @@ -380,7 +378,7 @@ public class Modes extends LinkedHashMap { Set onceSelectedModes = new HashSet<>(); for (UUID modeId : this.keySet()) { Object exist = game.getState().getValue(getKey(source, game, modeId)); - if (exist != null) { + if (exist == Boolean.TRUE) { onceSelectedModes.add(modeId); } } @@ -392,6 +390,20 @@ public class Modes extends LinkedHashMap { return source.getSourceId().toString() + game.getState().getZoneChangeCounter(source.getSourceId()) + modeId.toString(); } + private static int getTurnNum(Game game, Ability source) { + String key = source.getSourceId().toString() + game.getState().getZoneChangeCounter(source.getSourceId()) + "turnNum"; + Object object = game.getState().getValue(key); + if (object instanceof Integer) { + return (Integer) object; + } + return 0; + } + + private static void setTurnNum(Game game, Ability source) { + String key = source.getSourceId().toString() + game.getState().getZoneChangeCounter(source.getSourceId()) + "turnNum"; + game.getState().setValue(key, game.getTurnNum()); + } + /** * Returns all (still) available modes of the ability *