diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java index 5a639a5a3..422c16a39 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java @@ -982,7 +982,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur int minPlayers = Throw400IfNullOrNonInteger("minPlayers", minPlayersStr); boolean manualKickoff = ParseBoolean("manualKickoff", manualKickoffStr, false); - if(wc) { + if (wc) { tournamentId = DateUtils.Now().getYear() + "-wc-" + tournamentId; } @@ -1071,6 +1071,10 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur params.minimumPlayers = minPlayers; params.manualKickoff = manualKickoff; + if (wc) { + params.wc = true; + } + TournamentInfo info; if(type == Tournament.TournamentType.SEALED) { diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/hallUi.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/hallUi.js index bf2f63f5b..1fe259231 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/hallUi.js +++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/hallUi.js @@ -404,7 +404,7 @@ var GempLotrHallUI = Class.extend({ for (var i = 0; i < queues.length; i++) { var queue = queues[i]; var id = queue.getAttribute("id"); - var isWC = id.toLowerCase().includes("wc"); + var isWC = queue.getAttribute("wc") == "true"; var action = queue.getAttribute("action"); if (action == "add" || action == "update") { var actionsField = $(""); @@ -660,7 +660,7 @@ var GempLotrHallUI = Class.extend({ for (var i = 0; i < tournaments.length; i++) { var tournament = tournaments[i]; var id = tournament.getAttribute("id"); - var isWC = id.toLowerCase().includes("wc"); + var isWC = tournament.getAttribute("wc") == "true"; var action = tournament.getAttribute("action"); var type = tournament.getAttribute("type"); if(type !== null) diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java index fc6615151..9a40b261a 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java @@ -107,7 +107,7 @@ public class HallCommunicationChannel implements LongPollableResource { @Override public void visitTournamentQueue(String tournamentQueueKey, int cost, String collectionName, String formatName, String type, String tournamentQueueName, String tournamentPrizes, String pairingDescription, String startCondition, int playerCount, String playerList, boolean playerSignedUp, - boolean joinable, boolean startable, int readyCheckSecsRemaining, boolean confirmedReadyCheck) { + boolean joinable, boolean startable, int readyCheckSecsRemaining, boolean confirmedReadyCheck, boolean wc) { Map props = new HashMap<>(); props.put("cost", String.valueOf(cost)); props.put("collection", collectionName); @@ -124,6 +124,7 @@ public class HallCommunicationChannel implements LongPollableResource { props.put("startable", String.valueOf(startable)); props.put("readyCheckSecsRemaining", String.valueOf(readyCheckSecsRemaining)); props.put("confirmedReadyCheck", String.valueOf(confirmedReadyCheck)); + props.put("wc", String.valueOf(wc)); if (tournamentQueueKey.contains("table")) { props.put("draftCode", tournamentQueueKey.replace("_queue", "")); } @@ -134,7 +135,7 @@ public class HallCommunicationChannel implements LongPollableResource { @Override public void visitTournament(String tournamentKey, String collectionName, String formatName, String tournamentName, String type, String pairingDescription, String tournamentStage, int round, int playerCount, String playerList, boolean playerInCompetition, boolean abandoned, boolean joinable, - long secsRemaining) { + long secsRemaining, boolean wc) { Map props = new HashMap<>(); props.put("collection", collectionName); props.put("format", formatName); @@ -148,6 +149,7 @@ public class HallCommunicationChannel implements LongPollableResource { props.put("signedUp", String.valueOf(playerInCompetition)); props.put("abandoned", String.valueOf(abandoned)); props.put("joinable", String.valueOf(joinable)); + props.put("wc", String.valueOf(wc)); if (secsRemaining >= 0) { props.put("timeRemaining", DateUtils.HumanDuration(Duration.ofSeconds(secsRemaining))); } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallInfoVisitor.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallInfoVisitor.java index a7abe541a..7e77e1ef8 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallInfoVisitor.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallInfoVisitor.java @@ -15,11 +15,11 @@ public interface HallInfoVisitor { public void visitTournamentQueue(String tournamentQueueKey, int cost, String collectionName, String formatName, String type, String tournamentQueueName, String tournamentPrizes, String pairingDescription, String startCondition, int playerCount, String playerList, boolean playerSignedUp, boolean joinable, boolean startable, - int readyCheckSecsRemaining, boolean confirmedReadyCheck); + int readyCheckSecsRemaining, boolean confirmedReadyCheck, boolean wc); public void visitTournament(String tournamentKey, String collectionName, String formatName, String tournamentName, String type, String pairingDescription, String tournamentStage, int round, int playerCount, String playerList, boolean playerInCompetition, boolean abandoned, boolean joinable, - long secsRemaining); + long secsRemaining, boolean wc); public void runningPlayerGame(String gameId); } 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 34a0e0a32..127ede121 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 @@ -911,9 +911,7 @@ public class HallServer extends AbstractServer { public class HallTournamentCallback implements TournamentCallback { private final String tournamentId; private final String tournamentName; - private final GameSettings tournamentGameSettings; - - private final GameSettings wcGameSettings; + private final GameSettings gameSettings; private HallTournamentCallback(Tournament tournament) { tournamentId = tournament.getTournamentId(); @@ -921,13 +919,16 @@ public class HallServer extends AbstractServer { // Tournaments with no prizes and no entry are not competitive boolean casual = tournament.getInfo().Parameters().prizes == Tournament.PrizeType.NONE && tournament.getInfo().Parameters().cost == 0; - tournamentGameSettings = new GameSettings(null, _formatLibrary.getFormat(tournament.getFormatCode()), - tournamentId, null, null, !casual, !casual, false, - false, GameTimer.TOURNAMENT_TIMER, null); - wcGameSettings = new GameSettings(null, _formatLibrary.getFormat(tournament.getFormatCode()), - tournamentId, null, null, true, true, false, - false, GameTimer.CHAMPIONSHIP_TIMER, null); + if (tournament.isWC()) { + gameSettings = new GameSettings(null, _formatLibrary.getFormat(tournament.getFormatCode()), + tournamentId, null, null, true, true, false, + false, GameTimer.CHAMPIONSHIP_TIMER, null); + } else { + gameSettings = new GameSettings(null, _formatLibrary.getFormat(tournament.getFormatCode()), + tournamentId, null, null, !casual, !casual, false, + false, GameTimer.TOURNAMENT_TIMER, null); + } } @Override @@ -942,11 +943,7 @@ public class HallServer extends AbstractServer { _hallDataAccessLock.writeLock().lock(); try { if (!_shutdown) { - var settings = tournamentGameSettings; - if (tournamentId.toLowerCase().contains("wc")) { - settings = wcGameSettings; - } - final GameTable gameTable = tableHolder.setupTournamentTable(settings, participants); + final GameTable gameTable = tableHolder.setupTournamentTable(gameSettings, participants); final LotroGameMediator mediator = createGameMediator(participants, new GameResultListener() { @Override @@ -958,7 +955,7 @@ public class HallServer extends AbstractServer { public void gameCancelled() { createGameInternal(participants); } - }, tournamentName, settings); + }, tournamentName, gameSettings); gameTable.startGame(mediator); } } finally { diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/AbstractTournamentQueue.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/AbstractTournamentQueue.java index c083c1679..1f16a293f 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/AbstractTournamentQueue.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/AbstractTournamentQueue.java @@ -395,4 +395,9 @@ public abstract class AbstractTournamentQueue implements TournamentQueue { readyCheckTask = null; } } + + @Override + public boolean isWC() { + return _tournamentInfo._params.wc; + } } 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 e2fa9de02..118a26b5f 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 @@ -558,4 +558,9 @@ public abstract class BaseTournament implements Tournament { writeLock.unlock(); } } + + @Override + public boolean isWC() { + return _tournamentInfo._params.wc; + } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/ConstructedTournament.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/ConstructedTournament.java index cd3f1e69d..3f6de74c0 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/ConstructedTournament.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/ConstructedTournament.java @@ -136,4 +136,12 @@ public class ConstructedTournament extends BaseTournament implements Tournament getTournamentStage() == Tournament.Stage.PAUSED || getTournamentStage() == Tournament.Stage.AWAITING_KICKOFF) && (maximumPlayers > activePlayers.size() || maximumPlayers < 0); } + + @Override + public String getTableDescription() { + if (isWC()) { + return DateUtils.Now().getYear() + " World Championship"; + } + return null; + } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/ScheduledTournamentQueue.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/ScheduledTournamentQueue.java index 65e1112e4..c7dd774f3 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/ScheduledTournamentQueue.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/ScheduledTournamentQueue.java @@ -58,7 +58,7 @@ public class ScheduledTournamentQueue extends AbstractTournamentQueue implements @Override public boolean isJoinable() { var window = _signupTimeBeforeStart; - if (_tournamentInfo.Parameters().tournamentId.toLowerCase().contains("wc")) { + if (isWC()) { window = _wcSignupTimeBeforeStart; } return DateUtils.Now().isAfter(_startTime.minus(window)) && (maximumPlayers < 0 || _players.size() < maximumPlayers); 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 fef2956bd..5dc109074 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 @@ -209,4 +209,6 @@ public interface Tournament { boolean join(String playerName, LotroDeck lotroDeck); long getSecondsRemaining() throws IllegalStateException; String getTableDescription(); + + boolean isWC(); } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentParams.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentParams.java index 8b048bc61..c7c2752cd 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentParams.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentParams.java @@ -1,9 +1,6 @@ package com.gempukku.lotro.tournament; -import com.gempukku.lotro.game.LotroFormat; - import java.time.LocalDateTime; -import java.time.ZonedDateTime; public class TournamentParams { public String tournamentId; @@ -21,6 +18,8 @@ public class TournamentParams { public int maximumPlayers = -1; // Negative value = no maximum set public Tournament.PrizeType prizes = Tournament.PrizeType.NONE; + public boolean wc = false; + public Tournament.Stage getInitialStage() { if(manualKickoff) return Tournament.Stage.AWAITING_KICKOFF; diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentQueue.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentQueue.java index a16642df0..592f6fa4c 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentQueue.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TournamentQueue.java @@ -50,4 +50,6 @@ public interface TournamentQueue { boolean confirmReadyCheck(String player); boolean hasConfirmedReadyCheck(String player); + + boolean isWC(); } 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 7f67e87e1..8358b3790 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 @@ -253,7 +253,7 @@ public class TournamentService { formatLibrary.getFormat(queue.getFormatCode()).getName(), queue.getInfo().Parameters().type.toString(), queue.getTournamentQueueName(), queue.getPrizesDescription(), queue.getPairingDescription(), queue.getStartCondition(), queue.getPlayerCount(), queue.getPlayerList(), queue.isPlayerSignedUp(player.getName()), queue.isJoinable(), queue.isStartable(player.getName()), - queue.getSecondsRemainingForReadyCheck(), queue.hasConfirmedReadyCheck(player.getName())); + queue.getSecondsRemainingForReadyCheck(), queue.hasConfirmedReadyCheck(player.getName()), queue.isWC()); } for (var entry : _activeTournaments.entrySet()) { @@ -269,7 +269,7 @@ public class TournamentService { formatLibrary.getFormat(tournament.getFormatCode()).getName(), tournament.getTournamentName(), tournament.getInfo().Parameters().type.toString(), tournament.getPlayOffSystem(), tournament.getTournamentStage().getHumanReadable(), tournament.getCurrentRound(), tournament.getPlayersInCompetitionCount(), tournament.getPlayerList(), tournament.isPlayerInCompetition(player.getName()), tournament.isPlayerAbandoned(player.getName()), - tournament.isJoinable(), secsRemaining); + tournament.isJoinable(), secsRemaining, tournament.isWC()); } }