From 904660e624b7e22a4747ad3331c1cf055ccbed97 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sun, 10 Mar 2019 16:04:25 +0400 Subject: [PATCH] Fixed freeze while disconnects on choose target and card in library dialogs; --- .../src/main/java/mage/target/TargetImpl.java | 35 ++++++++++++------- .../target/common/TargetCardInLibrary.java | 9 ++++- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/Mage/src/main/java/mage/target/TargetImpl.java b/Mage/src/main/java/mage/target/TargetImpl.java index f063eeaa4cb..cb6f2323d5f 100644 --- a/Mage/src/main/java/mage/target/TargetImpl.java +++ b/Mage/src/main/java/mage/target/TargetImpl.java @@ -269,25 +269,34 @@ public abstract class TargetImpl implements Target { @Override public boolean choose(Outcome outcome, UUID playerId, UUID sourceId, Game game) { Player player = game.getPlayer(playerId); - if (player != null) { - while (!isChosen() && !doneChosing()) { - if (!player.canRespond()) { - return chosen = targets.size() >= getNumberOfTargets(); - } - chosen = targets.size() >= getNumberOfTargets(); - if (!player.choose(outcome, this, sourceId, game)) { - return chosen; - } - chosen = targets.size() >= getNumberOfTargets(); - } - return chosen = true; + if (player == null) { + return false; } - return false; + + while (!isChosen() && !doneChosing()) { + if (!player.canRespond()) { + return chosen = targets.size() >= getNumberOfTargets(); + } + chosen = targets.size() >= getNumberOfTargets(); + if (!player.choose(outcome, this, sourceId, game)) { + return chosen; + } + chosen = targets.size() >= getNumberOfTargets(); + } + return chosen = true; } @Override public boolean chooseTarget(Outcome outcome, UUID playerId, Ability source, Game game) { + Player player = game.getPlayer(playerId); + if (player == null) { + return false; + } + while (!isChosen() && !doneChosing()) { + if (!player.canRespond()) { + return chosen = targets.size() >= getNumberOfTargets(); + } chosen = targets.size() >= getNumberOfTargets(); if (isRandom()) { Set possibleTargets = possibleTargets(source.getSourceId(), playerId, game); diff --git a/Mage/src/main/java/mage/target/common/TargetCardInLibrary.java b/Mage/src/main/java/mage/target/common/TargetCardInLibrary.java index 71ae125321f..2e923b3fb6e 100644 --- a/Mage/src/main/java/mage/target/common/TargetCardInLibrary.java +++ b/Mage/src/main/java/mage/target/common/TargetCardInLibrary.java @@ -61,6 +61,10 @@ public class TargetCardInLibrary extends TargetCard { targetPlayer = player; } + if (player == null) { + return false; + } + List cards; if (librarySearchLimit == Integer.MAX_VALUE) { cards = targetPlayer.getLibrary().getCards(game); @@ -72,14 +76,17 @@ public class TargetCardInLibrary extends TargetCard { for (Card card : cards) { cardsId.add(card); } + while (!isChosen() && !doneChosing()) { + if (!player.canRespond()) { + return chosen = targets.size() >= minNumberOfTargets; + } chosen = targets.size() >= minNumberOfTargets; if (!player.chooseTarget(outcome, cardsId, this, null, game)) { return chosen; } chosen = targets.size() >= minNumberOfTargets; } - return chosen = true; }