diff --git a/game-app/game-core/src/main/java/games/strategy/engine/data/GameStep.java b/game-app/game-core/src/main/java/games/strategy/engine/data/GameStep.java index e8d626aeb9..274d2b8beb 100644 --- a/game-app/game-core/src/main/java/games/strategy/engine/data/GameStep.java +++ b/game-app/game-core/src/main/java/games/strategy/engine/data/GameStep.java @@ -93,7 +93,7 @@ public GameStep( properties = stepProperties; } - public GamePlayer getPlayerId() { + public @Nullable GamePlayer getPlayerId() { return player; } diff --git a/game-app/game-core/src/main/java/games/strategy/engine/framework/ServerGame.java b/game-app/game-core/src/main/java/games/strategy/engine/framework/ServerGame.java index 876d14ba33..d0d560dc9b 100644 --- a/game-app/game-core/src/main/java/games/strategy/engine/framework/ServerGame.java +++ b/game-app/game-core/src/main/java/games/strategy/engine/framework/ServerGame.java @@ -1,6 +1,7 @@ package games.strategy.engine.framework; import static com.google.common.base.Preconditions.checkNotNull; +import static games.strategy.triplea.Constants.EDIT_MODE; import games.strategy.engine.GameOverException; import games.strategy.engine.data.Change; @@ -40,6 +41,7 @@ import games.strategy.net.Messengers; import games.strategy.net.websocket.ClientNetworkBridge; import games.strategy.triplea.delegate.DiceRoll; +import games.strategy.triplea.delegate.EditDelegate; import games.strategy.triplea.settings.ClientSetting; import java.io.IOException; import java.nio.file.Files; @@ -467,6 +469,15 @@ private void runStep(final boolean stepIsRestoredFromSavedGame) { ? launchAction.getAutoSaveFileUtils().getEvenRoundAutoSaveFile() : launchAction.getAutoSaveFileUtils().getOddRoundAutoSaveFile()); } + // Turn off Edit Mode if we're transitioning to an AI player to prevent infinite round combats. + if (EditDelegate.getEditMode(gameData.getProperties())) { + GamePlayer newPlayer = gameData.getSequence().getStep().getPlayerId(); + if (newPlayer != null && newPlayer.isAi() && !newPlayer.equals(currentStep.getPlayerId())) { + String text = "Turning off Edit Mode when switching to AI player"; + gameData.getHistory().getHistoryWriter().startEvent(text); + gameData.getProperties().set(EDIT_MODE, false); + } + } if (!isMoveStep && shouldAutoSaveAfterEnd(currentDelegate)) { autoSaveAfter(currentDelegate); } diff --git a/game-app/game-core/src/main/java/games/strategy/triplea/odds/calculator/BattleCalculator.java b/game-app/game-core/src/main/java/games/strategy/triplea/odds/calculator/BattleCalculator.java index 46e4837e73..d7df37c04c 100644 --- a/game-app/game-core/src/main/java/games/strategy/triplea/odds/calculator/BattleCalculator.java +++ b/game-app/game-core/src/main/java/games/strategy/triplea/odds/calculator/BattleCalculator.java @@ -1,5 +1,7 @@ package games.strategy.triplea.odds.calculator; +import static games.strategy.triplea.Constants.EDIT_MODE; + import com.google.common.base.Preconditions; import games.strategy.engine.data.CompositeChange; import games.strategy.engine.data.GameData; @@ -44,6 +46,7 @@ class BattleCalculator implements IBattleCalculator { BattleCalculator(byte[] data) { gameData = GameDataUtils.createGameDataFromBytes(data).orElseThrow(); + gameData.getProperties().set(EDIT_MODE, false); } @Override