Modified - wc attribute is now part of TournamentParams

This commit is contained in:
jakub.salavec
2025-05-14 14:43:08 +02:00
parent 38a75ed544
commit b487be32dc
13 changed files with 52 additions and 28 deletions

View File

@@ -982,7 +982,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
int minPlayers = Throw400IfNullOrNonInteger("minPlayers", minPlayersStr); int minPlayers = Throw400IfNullOrNonInteger("minPlayers", minPlayersStr);
boolean manualKickoff = ParseBoolean("manualKickoff", manualKickoffStr, false); boolean manualKickoff = ParseBoolean("manualKickoff", manualKickoffStr, false);
if(wc) { if (wc) {
tournamentId = DateUtils.Now().getYear() + "-wc-" + tournamentId; tournamentId = DateUtils.Now().getYear() + "-wc-" + tournamentId;
} }
@@ -1071,6 +1071,10 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
params.minimumPlayers = minPlayers; params.minimumPlayers = minPlayers;
params.manualKickoff = manualKickoff; params.manualKickoff = manualKickoff;
if (wc) {
params.wc = true;
}
TournamentInfo info; TournamentInfo info;
if(type == Tournament.TournamentType.SEALED) { if(type == Tournament.TournamentType.SEALED) {

View File

@@ -404,7 +404,7 @@ var GempLotrHallUI = Class.extend({
for (var i = 0; i < queues.length; i++) { for (var i = 0; i < queues.length; i++) {
var queue = queues[i]; var queue = queues[i];
var id = queue.getAttribute("id"); var id = queue.getAttribute("id");
var isWC = id.toLowerCase().includes("wc"); var isWC = queue.getAttribute("wc") == "true";
var action = queue.getAttribute("action"); var action = queue.getAttribute("action");
if (action == "add" || action == "update") { if (action == "add" || action == "update") {
var actionsField = $("<td></td>"); var actionsField = $("<td></td>");
@@ -660,7 +660,7 @@ var GempLotrHallUI = Class.extend({
for (var i = 0; i < tournaments.length; i++) { for (var i = 0; i < tournaments.length; i++) {
var tournament = tournaments[i]; var tournament = tournaments[i];
var id = tournament.getAttribute("id"); var id = tournament.getAttribute("id");
var isWC = id.toLowerCase().includes("wc"); var isWC = tournament.getAttribute("wc") == "true";
var action = tournament.getAttribute("action"); var action = tournament.getAttribute("action");
var type = tournament.getAttribute("type"); var type = tournament.getAttribute("type");
if(type !== null) if(type !== null)

View File

@@ -107,7 +107,7 @@ public class HallCommunicationChannel implements LongPollableResource {
@Override @Override
public void visitTournamentQueue(String tournamentQueueKey, int cost, String collectionName, String formatName, String type, String tournamentQueueName, 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, 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<String, String> props = new HashMap<>(); Map<String, String> props = new HashMap<>();
props.put("cost", String.valueOf(cost)); props.put("cost", String.valueOf(cost));
props.put("collection", collectionName); props.put("collection", collectionName);
@@ -124,6 +124,7 @@ public class HallCommunicationChannel implements LongPollableResource {
props.put("startable", String.valueOf(startable)); props.put("startable", String.valueOf(startable));
props.put("readyCheckSecsRemaining", String.valueOf(readyCheckSecsRemaining)); props.put("readyCheckSecsRemaining", String.valueOf(readyCheckSecsRemaining));
props.put("confirmedReadyCheck", String.valueOf(confirmedReadyCheck)); props.put("confirmedReadyCheck", String.valueOf(confirmedReadyCheck));
props.put("wc", String.valueOf(wc));
if (tournamentQueueKey.contains("table")) { if (tournamentQueueKey.contains("table")) {
props.put("draftCode", tournamentQueueKey.replace("_queue", "")); props.put("draftCode", tournamentQueueKey.replace("_queue", ""));
} }
@@ -134,7 +135,7 @@ public class HallCommunicationChannel implements LongPollableResource {
@Override @Override
public void visitTournament(String tournamentKey, String collectionName, String formatName, String tournamentName, String type, String pairingDescription, 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, String tournamentStage, int round, int playerCount, String playerList, boolean playerInCompetition, boolean abandoned, boolean joinable,
long secsRemaining) { long secsRemaining, boolean wc) {
Map<String, String> props = new HashMap<>(); Map<String, String> props = new HashMap<>();
props.put("collection", collectionName); props.put("collection", collectionName);
props.put("format", formatName); props.put("format", formatName);
@@ -148,6 +149,7 @@ public class HallCommunicationChannel implements LongPollableResource {
props.put("signedUp", String.valueOf(playerInCompetition)); props.put("signedUp", String.valueOf(playerInCompetition));
props.put("abandoned", String.valueOf(abandoned)); props.put("abandoned", String.valueOf(abandoned));
props.put("joinable", String.valueOf(joinable)); props.put("joinable", String.valueOf(joinable));
props.put("wc", String.valueOf(wc));
if (secsRemaining >= 0) { if (secsRemaining >= 0) {
props.put("timeRemaining", DateUtils.HumanDuration(Duration.ofSeconds(secsRemaining))); props.put("timeRemaining", DateUtils.HumanDuration(Duration.ofSeconds(secsRemaining)));
} }

View File

@@ -15,11 +15,11 @@ public interface HallInfoVisitor {
public void visitTournamentQueue(String tournamentQueueKey, int cost, String collectionName, String formatName, String type, String tournamentQueueName, String tournamentPrizes, 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, 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, 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, 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); public void runningPlayerGame(String gameId);
} }

View File

@@ -911,9 +911,7 @@ public class HallServer extends AbstractServer {
public class HallTournamentCallback implements TournamentCallback { public class HallTournamentCallback implements TournamentCallback {
private final String tournamentId; private final String tournamentId;
private final String tournamentName; private final String tournamentName;
private final GameSettings tournamentGameSettings; private final GameSettings gameSettings;
private final GameSettings wcGameSettings;
private HallTournamentCallback(Tournament tournament) { private HallTournamentCallback(Tournament tournament) {
tournamentId = tournament.getTournamentId(); tournamentId = tournament.getTournamentId();
@@ -921,13 +919,16 @@ public class HallServer extends AbstractServer {
// Tournaments with no prizes and no entry are not competitive // Tournaments with no prizes and no entry are not competitive
boolean casual = tournament.getInfo().Parameters().prizes == Tournament.PrizeType.NONE boolean casual = tournament.getInfo().Parameters().prizes == Tournament.PrizeType.NONE
&& tournament.getInfo().Parameters().cost == 0; && 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()), if (tournament.isWC()) {
tournamentId, null, null, true, true, false, gameSettings = new GameSettings(null, _formatLibrary.getFormat(tournament.getFormatCode()),
false, GameTimer.CHAMPIONSHIP_TIMER, null); 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 @Override
@@ -942,11 +943,7 @@ public class HallServer extends AbstractServer {
_hallDataAccessLock.writeLock().lock(); _hallDataAccessLock.writeLock().lock();
try { try {
if (!_shutdown) { if (!_shutdown) {
var settings = tournamentGameSettings; final GameTable gameTable = tableHolder.setupTournamentTable(gameSettings, participants);
if (tournamentId.toLowerCase().contains("wc")) {
settings = wcGameSettings;
}
final GameTable gameTable = tableHolder.setupTournamentTable(settings, participants);
final LotroGameMediator mediator = createGameMediator(participants, final LotroGameMediator mediator = createGameMediator(participants,
new GameResultListener() { new GameResultListener() {
@Override @Override
@@ -958,7 +955,7 @@ public class HallServer extends AbstractServer {
public void gameCancelled() { public void gameCancelled() {
createGameInternal(participants); createGameInternal(participants);
} }
}, tournamentName, settings); }, tournamentName, gameSettings);
gameTable.startGame(mediator); gameTable.startGame(mediator);
} }
} finally { } finally {

View File

@@ -395,4 +395,9 @@ public abstract class AbstractTournamentQueue implements TournamentQueue {
readyCheckTask = null; readyCheckTask = null;
} }
} }
@Override
public boolean isWC() {
return _tournamentInfo._params.wc;
}
} }

View File

@@ -558,4 +558,9 @@ public abstract class BaseTournament implements Tournament {
writeLock.unlock(); writeLock.unlock();
} }
} }
@Override
public boolean isWC() {
return _tournamentInfo._params.wc;
}
} }

View File

@@ -136,4 +136,12 @@ public class ConstructedTournament extends BaseTournament implements Tournament
getTournamentStage() == Tournament.Stage.PAUSED || getTournamentStage() == Tournament.Stage.AWAITING_KICKOFF) getTournamentStage() == Tournament.Stage.PAUSED || getTournamentStage() == Tournament.Stage.AWAITING_KICKOFF)
&& (maximumPlayers > activePlayers.size() || maximumPlayers < 0); && (maximumPlayers > activePlayers.size() || maximumPlayers < 0);
} }
@Override
public String getTableDescription() {
if (isWC()) {
return DateUtils.Now().getYear() + " World Championship";
}
return null;
}
} }

View File

@@ -58,7 +58,7 @@ public class ScheduledTournamentQueue extends AbstractTournamentQueue implements
@Override @Override
public boolean isJoinable() { public boolean isJoinable() {
var window = _signupTimeBeforeStart; var window = _signupTimeBeforeStart;
if (_tournamentInfo.Parameters().tournamentId.toLowerCase().contains("wc")) { if (isWC()) {
window = _wcSignupTimeBeforeStart; window = _wcSignupTimeBeforeStart;
} }
return DateUtils.Now().isAfter(_startTime.minus(window)) && (maximumPlayers < 0 || _players.size() < maximumPlayers); return DateUtils.Now().isAfter(_startTime.minus(window)) && (maximumPlayers < 0 || _players.size() < maximumPlayers);

View File

@@ -209,4 +209,6 @@ public interface Tournament {
boolean join(String playerName, LotroDeck lotroDeck); boolean join(String playerName, LotroDeck lotroDeck);
long getSecondsRemaining() throws IllegalStateException; long getSecondsRemaining() throws IllegalStateException;
String getTableDescription(); String getTableDescription();
boolean isWC();
} }

View File

@@ -1,9 +1,6 @@
package com.gempukku.lotro.tournament; package com.gempukku.lotro.tournament;
import com.gempukku.lotro.game.LotroFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZonedDateTime;
public class TournamentParams { public class TournamentParams {
public String tournamentId; public String tournamentId;
@@ -21,6 +18,8 @@ public class TournamentParams {
public int maximumPlayers = -1; // Negative value = no maximum set public int maximumPlayers = -1; // Negative value = no maximum set
public Tournament.PrizeType prizes = Tournament.PrizeType.NONE; public Tournament.PrizeType prizes = Tournament.PrizeType.NONE;
public boolean wc = false;
public Tournament.Stage getInitialStage() { public Tournament.Stage getInitialStage() {
if(manualKickoff) if(manualKickoff)
return Tournament.Stage.AWAITING_KICKOFF; return Tournament.Stage.AWAITING_KICKOFF;

View File

@@ -50,4 +50,6 @@ public interface TournamentQueue {
boolean confirmReadyCheck(String player); boolean confirmReadyCheck(String player);
boolean hasConfirmedReadyCheck(String player); boolean hasConfirmedReadyCheck(String player);
boolean isWC();
} }

View File

@@ -253,7 +253,7 @@ public class TournamentService {
formatLibrary.getFormat(queue.getFormatCode()).getName(), queue.getInfo().Parameters().type.toString(), queue.getTournamentQueueName(), formatLibrary.getFormat(queue.getFormatCode()).getName(), queue.getInfo().Parameters().type.toString(), queue.getTournamentQueueName(),
queue.getPrizesDescription(), queue.getPairingDescription(), queue.getStartCondition(), queue.getPrizesDescription(), queue.getPairingDescription(), queue.getStartCondition(),
queue.getPlayerCount(), queue.getPlayerList(), queue.isPlayerSignedUp(player.getName()), queue.isJoinable(), queue.isStartable(player.getName()), 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()) { 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(), formatLibrary.getFormat(tournament.getFormatCode()).getName(), tournament.getTournamentName(), tournament.getInfo().Parameters().type.toString(), tournament.getPlayOffSystem(),
tournament.getTournamentStage().getHumanReadable(), tournament.getTournamentStage().getHumanReadable(),
tournament.getCurrentRound(), tournament.getPlayersInCompetitionCount(), tournament.getPlayerList(), tournament.isPlayerInCompetition(player.getName()), tournament.isPlayerAbandoned(player.getName()), tournament.getCurrentRound(), tournament.getPlayersInCompetitionCount(), tournament.getPlayerList(), tournament.isPlayerInCompetition(player.getName()), tournament.isPlayerAbandoned(player.getName()),
tournament.isJoinable(), secsRemaining); tournament.isJoinable(), secsRemaining, tournament.isWC());
} }
} }