From ae5bc90915335c63a67fd7dd7e9876a552eea0a4 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 9 Jun 2023 06:26:47 +0400 Subject: [PATCH] Fixed game error on attack order disconnects --- .../java/mage/game/combat/CombatGroup.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Mage/src/main/java/mage/game/combat/CombatGroup.java b/Mage/src/main/java/mage/game/combat/CombatGroup.java index a41b84002bc..445e418eae7 100644 --- a/Mage/src/main/java/mage/game/combat/CombatGroup.java +++ b/Mage/src/main/java/mage/game/combat/CombatGroup.java @@ -663,15 +663,15 @@ public class CombatGroup implements Serializable, Copyable { } public void pickAttackerOrder(UUID playerId, Game game) { - if (attackers.isEmpty()) { + Player player = game.getPlayer(playerId); + if (attackers.isEmpty() || player == null) { return; } - Player player = game.getPlayer(playerId); List attackerList = new ArrayList<>(attackers); - attackerOrder.clear(); + List newAttackerOrder = new ArrayList<>(); while (true) { if (attackerList.size() == 1) { - attackerOrder.add(attackerList.get(0)); + newAttackerOrder.add(attackerList.get(0)); break; } else { List attackerPerms = new ArrayList<>(); @@ -682,12 +682,19 @@ public class CombatGroup implements Serializable, Copyable { if (attackerId == null) { break; } - attackerOrder.add(attackerId); + newAttackerOrder.add(attackerId); attackerList.remove(attackerId); } } - if (!game.isSimulation() && attackerOrder.size() > 1) { - logDamageAssignmentOrder("Creatures blocked by ", blockers, attackerOrder, game); + if (newAttackerOrder.size() == attackerOrder.size()) { + attackerOrder.clear(); + attackerOrder.addAll(newAttackerOrder); + + if (!game.isSimulation() && attackerOrder.size() > 1) { + logDamageAssignmentOrder("Creatures blocked by ", blockers, attackerOrder, game); + } + } else { + game.informPlayers(player.getLogName() + " try to skip choose attacker order"); } }