diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java index 3f00ad33bae..4aef9d49d9a 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameController.java +++ b/Mage.Server/src/main/java/mage/server/game/GameController.java @@ -1322,87 +1322,13 @@ public class GameController implements GameCallback { List fixActions = new ArrayList<>(); // for logs info // fix active - Player playerActive = game.getPlayer(state.getActivePlayerId()); - sb.append("
Fixing active player: ").append(getName(playerActive)); - if (playerActive != null && !playerActive.canRespond()) { - fixActions.add("active player fix"); - - sb.append("
WARNING, active player can't respond."); - sb.append("
Try to concede..."); - playerActive.concede(game); - playerActive.leave(); // abort any wait response actions - sb.append(" (").append(asWarning("OK")).append(", concede done)"); - - sb.append("
Try to skip step..."); - Phase currentPhase = game.getPhase(); - if (currentPhase != null) { - currentPhase.getStep().skipStep(game, state.getActivePlayerId()); - fixedAlready = true; - sb.append(" (").append(asWarning("OK")).append(", skip step done)"); - } else { - sb.append(" (").append(asBad("FAIL")).append(", step is null)"); - } - } else { - sb.append(playerActive != null ? " (" + asGood("OK") + ", can respond)" : " (" + asGood("OK") + ", no player)"); - } + fixedAlready = fixPlayer(game.getPlayer(state.getActivePlayerId()), state, "active", sb, fixActions, fixedAlready); // fix lost choosing dialog - Player choosingPlayer = game.getPlayer(state.getChoosingPlayerId()); - sb.append("
Fixing choosing player: ").append(getName(choosingPlayer)); - if (choosingPlayer != null && !choosingPlayer.canRespond()) { - fixActions.add("choosing player fix"); - - sb.append("
WARNING, choosing player can't respond."); - sb.append("
Try to concede..."); - choosingPlayer.concede(game); - choosingPlayer.leave(); // abort any wait response actions - sb.append(" (").append(asWarning("OK")).append(", concede done)"); - - sb.append("
Try to skip step..."); - if (fixedAlready) { - sb.append(" (OK, already skipped before)"); - } else { - Phase currentPhase = game.getPhase(); - if (currentPhase != null) { - currentPhase.getStep().skipStep(game, state.getActivePlayerId()); - fixedAlready = true; - sb.append(" (").append(asWarning("OK")).append(", skip step done)"); - } else { - sb.append(" (").append(asBad("FAIL")).append(", step is null)"); - } - } - } else { - sb.append(choosingPlayer != null ? " (" + asGood("OK") + ", can respond)" : " (" + asGood("OK") + ", no player)"); - } + fixedAlready = fixPlayer(game.getPlayer(state.getChoosingPlayerId()), state, "choosing", sb, fixActions, fixedAlready); // fix lost priority - Player priorityPlayer = game.getPlayer(state.getPriorityPlayerId()); - sb.append("
Fixing priority player: ").append(getName(priorityPlayer)); - if (priorityPlayer != null && !priorityPlayer.canRespond()) { - fixActions.add("priority player fix"); - - sb.append("
WARNING, priority player can't respond."); - sb.append("
Try to concede..."); - priorityPlayer.concede(game); - priorityPlayer.leave(); // abort any wait response actions - sb.append(" (").append(asWarning("OK")).append(", concede done)"); - - sb.append("
Try to skip step..."); - if (fixedAlready) { - sb.append(" (").append(asWarning("OK")).append(", already skipped before)"); - } else { - Phase currentPhase = game.getPhase(); - if (currentPhase != null) { - currentPhase.getStep().skipStep(game, state.getActivePlayerId()); - fixedAlready = true; - sb.append(" (").append(asWarning("OK")).append(", skip step done)"); - } else { - sb.append(" (").append(asBad("FAIL")).append(", step is null)"); - } - } - } else { - sb.append(priorityPlayer != null ? " (" + asGood("OK") + ", can respond)" : " (" + asGood("OK") + ", no player)"); - } + fixedAlready = fixPlayer(game.getPlayer(state.getPriorityPlayerId()), state, "priority", sb, fixActions, fixedAlready); // fix timeout sb.append("
Fixing future timeout: "); @@ -1441,4 +1367,35 @@ public class GameController implements GameCallback { return sb.toString(); } + + private boolean fixPlayer(Player player, GameState state, String fixType, StringBuilder sb, List fixActions, boolean fixedAlready) { + sb.append("
Fixing ").append(fixType).append(" player: ").append(getName(player)); + if (player != null && !player.canRespond()) { + fixActions.add(fixType + " fix"); + + sb.append("
WARNING, ").append(fixType).append(" player can't respond."); + sb.append("
Try to concede..."); + player.concede(game); + player.leave(); // abort any wait response actions + sb.append(" (").append(asWarning("OK")).append(", concede done)"); + + sb.append("
Try to skip step..."); + if (!fixedAlready) { + Phase currentPhase = game.getPhase(); + if (currentPhase != null) { + currentPhase.getStep().skipStep(game, state.getActivePlayerId()); + fixedAlready = true; + sb.append(" (").append(asWarning("OK")).append(", skip step done)"); + } else { + sb.append(" (").append(asBad("FAIL")).append(", step is null)"); + } + } else { + sb.append(" (OK, already skipped before)"); + } + } else { + sb.append(player != null ? " (" + asGood("OK") + ", can respond)" : " (" + asGood("OK") + ", no player)"); + } + + return fixedAlready; + } }