From ee2fa5e6e65e699a4464a15c98cba1f03e126872 Mon Sep 17 00:00:00 2001 From: "jakub.salavec" Date: Mon, 28 Apr 2025 12:05:57 +0200 Subject: [PATCH] Fixed - join tournament late --- .../com/gempukku/lotro/hall/HallServer.java | 9 ++++---- .../lotro/tournament/BaseTournament.java | 22 +++++++++++++++++++ .../gempukku/lotro/tournament/Tournament.java | 1 + .../lotro/tournament/TournamentService.java | 9 ++++++++ 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java index f3354efb3..63c660502 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java @@ -555,10 +555,11 @@ public class HallServer extends AbstractServer { if (tournament.getInfo().Parameters().requiresDeck) { lotroDeck = validateUserAndDeck(_formatLibrary.getFormat(tournament.getFormatCode()), player, deckName, tournament.getCollectionType()); } - - _tournamentService.recordTournamentPlayer(tournamentId, player.getName(), lotroDeck); - tournament.issuePlayerMaterial(player.getName()); - result = "Joined tournament " + tournament.getTournamentName() + " successfully."; + if (_tournamentService.joinTournamentLate(tournamentId, player.getName(), lotroDeck)) { + result = "Joined tournament " + tournament.getTournamentName() + " successfully."; + } else { + result = "Joining tournament " + tournament.getTournamentName() + " failed."; + } hallChanged(); } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/BaseTournament.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/BaseTournament.java index e7d84faa6..e2fa9de02 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/BaseTournament.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/BaseTournament.java @@ -536,4 +536,26 @@ public abstract class BaseTournament implements Tournament { public String getTableDescription() { return null; } + + @Override + public boolean join(String playerName, LotroDeck lotroDeck) { + // Assumes the deck is validated for the tournament or null if the tournament is limited + writeLock.lock(); + try { + if (!isJoinable()) { + return false; + } + + if (_players.contains(playerName)) { + return false; + } + _tournamentService.recordTournamentPlayer(_tournamentId, playerName, lotroDeck); + issuePlayerMaterial(playerName); + _players.add(playerName); + regeneratePlayerList(); + return true; + } finally { + writeLock.unlock(); + } + } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/Tournament.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/Tournament.java index 863188b82..fef2956bd 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/Tournament.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/Tournament.java @@ -206,6 +206,7 @@ public interface Tournament { TournamentInfo getInfo(); boolean isJoinable(); + boolean join(String playerName, LotroDeck lotroDeck); long getSecondsRemaining() throws IllegalStateException; String getTableDescription(); } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentService.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentService.java index 31c0e83da..8f0104e59 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentService.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentService.java @@ -332,6 +332,15 @@ public class TournamentService { _tournamentPlayerDao.addPlayer(tournamentId, playerName, deck); } + public boolean joinTournamentLate(String tournamentId, String playerName, LotroDeck deck) { + // Assumes the deck is validated for the tournament or null if the tournament is limited + Tournament tournament = getTournamentById(tournamentId); + if (tournament == null) { + return false; + } + return tournament.join(playerName, deck); + } + public void recordPlayerTournamentAbandon(String tournamentId, String playerName) { _tournamentPlayerDao.dropPlayer(tournamentId, playerName); }