mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 04:52:07 -08:00
Improved player quits / leaves mage handling for tournaments (not perfect yet, will more improve it).
This commit is contained in:
parent
0d1e45fff6
commit
85b8edf630
12 changed files with 155 additions and 34 deletions
|
|
@ -584,6 +584,17 @@ public class MageServerImpl implements MageServer {
|
|||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void quitTournament(final UUID tournamentId, final String sessionId) throws MageException {
|
||||
execute("quitTournament", sessionId, new Action() {
|
||||
@Override
|
||||
public void execute() {
|
||||
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
|
||||
TournamentManager.getInstance().quit(tournamentId, userId);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void undo(final UUID gameId, final String sessionId) throws MageException {
|
||||
execute("undo", sessionId, new Action() {
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ import mage.game.match.MatchOptions;
|
|||
import mage.game.tournament.Tournament;
|
||||
import mage.game.tournament.TournamentPairing;
|
||||
import mage.game.tournament.TournamentPlayer;
|
||||
import mage.players.Player;
|
||||
import mage.server.ChatManager;
|
||||
import mage.server.TableManager;
|
||||
import mage.server.UserManager;
|
||||
|
|
@ -237,10 +238,10 @@ public class TournamentController {
|
|||
public void submitDeck(UUID playerId, Deck deck) {
|
||||
if (tournamentSessions.containsKey(playerId)) {
|
||||
TournamentPlayer player = tournament.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
if (player != null && !player.hasQuit()) {
|
||||
tournamentSessions.get(playerId).submitDeck(deck);
|
||||
ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has submitted his tournament deck", MessageColor.BLACK);
|
||||
}
|
||||
tournamentSessions.get(playerId).submitDeck(deck);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -257,23 +258,37 @@ public class TournamentController {
|
|||
}
|
||||
}
|
||||
|
||||
// public UUID getSessionId() {
|
||||
// return this.sessionId;
|
||||
// }
|
||||
|
||||
public UUID getChatId() {
|
||||
return chatId;
|
||||
}
|
||||
|
||||
public void kill(UUID userId) {
|
||||
if (userPlayerMap.containsKey(userId)) {
|
||||
tournamentSessions.get(userPlayerMap.get(userId)).setKilled();
|
||||
tournamentSessions.remove(userPlayerMap.get(userId));
|
||||
leave(userId);
|
||||
userPlayerMap.remove(userId);
|
||||
public void quit(UUID userId) {
|
||||
UUID playerId = userPlayerMap.get(userId);
|
||||
if (playerId != null) {
|
||||
TournamentPlayer player = tournament.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has quit the tournament", MessageColor.BLACK);
|
||||
String info;
|
||||
if (tournament.isDoneConstructing()) {
|
||||
info = new StringBuilder("during round ").append(tournament.getRounds().size()).toString();
|
||||
} else {
|
||||
info = "during Construction phase";
|
||||
}
|
||||
player.setQuit(info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void kill(UUID userId) {
|
||||
quit(userId);
|
||||
// if (userPlayerMap.containsKey(userId)) {
|
||||
// tournamentSessions.get(userPlayerMap.get(userId)).setKilled();
|
||||
// tournamentSessions.remove(userPlayerMap.get(userId));
|
||||
// leave(userId);
|
||||
// userPlayerMap.remove(userId);
|
||||
// }
|
||||
}
|
||||
|
||||
private void leave(UUID userId) {
|
||||
tournament.leave(getPlayerId(userId));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,6 +57,11 @@ public class TournamentManager {
|
|||
controllers.get(tournamentId).join(userId);
|
||||
}
|
||||
|
||||
public void quit(UUID tournamentId, UUID userId) {
|
||||
controllers.get(tournamentId).quit(userId);
|
||||
}
|
||||
|
||||
|
||||
public void kill(UUID tournamentId, UUID userId) {
|
||||
controllers.get(tournamentId).kill(userId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ public class TournamentSession {
|
|||
|
||||
public void setKilled() {
|
||||
killed = true;
|
||||
TournamentManager.getInstance().kill(tournament.getId(), userId);
|
||||
}
|
||||
|
||||
private synchronized void setupTimeout(int seconds) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue