diff --git a/Mage.Server/src/main/java/mage/server/User.java b/Mage.Server/src/main/java/mage/server/User.java index 66db908d047..3e8ac4bd376 100644 --- a/Mage.Server/src/main/java/mage/server/User.java +++ b/Mage.Server/src/main/java/mage/server/User.java @@ -366,35 +366,39 @@ public class User { } int draft = 0, match = 0, sideboard = 0, tournament = 0, construct = 0; for (Map.Entry tableEntry : tables.entrySet()) { - Table table = tableEntry.getValue(); - if (table.isTournament()) { - if (!table.getTournament().getPlayer(tableEntry.getKey()).isEliminated()) { - switch (table.getState()) { - case CONSTRUCTING: - construct++; - break; - case DRAFTING: - draft++; - break; - case DUELING: - tournament++; - break; - } - if (!isConnected()) { - table.getTournament().getPlayer(tableEntry.getKey()).setDisconnectInfo(disconnectInfo); + if (tableEntry != null) { + Table table = tableEntry.getValue(); + if (table != null) { + if (table.isTournament()) { + if (!table.getTournament().getPlayer(tableEntry.getKey()).isEliminated()) { + switch (table.getState()) { + case CONSTRUCTING: + construct++; + break; + case DRAFTING: + draft++; + break; + case DUELING: + tournament++; + break; + } + if (!isConnected()) { + table.getTournament().getPlayer(tableEntry.getKey()).setDisconnectInfo(disconnectInfo); + } else { + table.getTournament().getPlayer(tableEntry.getKey()).setDisconnectInfo(""); + } + } } else { - table.getTournament().getPlayer(tableEntry.getKey()).setDisconnectInfo(""); + switch (table.getState()) { + case SIDEBOARDING: + sideboard++; + break; + case DUELING: + match++; + break; + } } } - } else { - switch (table.getState()) { - case SIDEBOARDING: - sideboard++; - break; - case DUELING: - match++; - break; - } } } if (match > 0) { @@ -415,7 +419,6 @@ public class User { if (watchedGames.size() > 0) { sb.append("Watch: ").append(watchedGames.size()).append(" "); } - sb.append(disconnectInfo); return sb.toString(); } diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java index 466b6dc112a..5ede24154de 100644 --- a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java +++ b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java @@ -116,9 +116,14 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { matchView = matchList; List users = new ArrayList<>(); for (User user : UserManager.getInstance().getUsers()) { - StringBuilder sb = new StringBuilder(user.getGameInfo()); - users.add(new UsersView(user.getName(), user.getInfo(), sb.toString())); + try { + users.add(new UsersView(user.getName(), user.getInfo(), user.getGameInfo())); + } catch (Exception ex) { + logger.fatal("User update exception: " + user.getName() + " - " + ex.toString(), ex); + users.add(new UsersView(user.getName(), user.getInfo(), "[exception]")); + } } + Collections.sort(users, new UserNameSorter()); usersView = users; } diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java index 614a213219c..40f7239a41a 100644 --- a/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java +++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java @@ -153,6 +153,7 @@ public class TournamentSession { private synchronized void cancelTimeout() { if (futureTimeout != null) { futureTimeout.cancel(false); + logger.debug("Timeout is Done: " + futureTimeout.isDone() + " userId: " + userId); } } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/NecroticOoze.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/NecroticOoze.java index 5d1da9c7266..b9bc7982553 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/NecroticOoze.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/NecroticOoze.java @@ -104,21 +104,28 @@ class NecroticOozeEffect extends ContinuousEffectImpl { @Override public boolean apply(Game game, Ability source) { - Permanent perm = game.getPermanent(source.getSourceId()); - if (perm != null) { - for (Player player: game.getPlayers().values()) { - for (Card card: player.getGraveyard().getCards(game)) { - if (card.getCardType().contains(CardType.CREATURE)) { - for (Ability ability: card.getAbilities()) { - if (ability instanceof ActivatedAbility) { - perm.addAbility(ability, game); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Permanent perm = game.getPermanent(source.getSourceId()); + if (perm != null) { + for (UUID playerId: controller.getInRange()) { + Player player = game.getPlayer(playerId); + if (player != null) { + for (Card card: player.getGraveyard().getCards(game)) { + if (card.getCardType().contains(CardType.CREATURE)) { + for (Ability ability: card.getAbilities()) { + if (ability instanceof ActivatedAbility) { + perm.addAbility(ability, game); + } + } } } } } } + return true; } - return true; + return false; } @Override