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);
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) {

View File

@@ -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 = $("<td></td>");
@@ -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)

View File

@@ -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<String, String> 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<String, String> 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)));
}

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,
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);
}

View File

@@ -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 {

View File

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

View File

@@ -558,4 +558,9 @@ public abstract class BaseTournament implements Tournament {
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)
&& (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
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);

View File

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

View File

@@ -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;

View File

@@ -50,4 +50,6 @@ public interface TournamentQueue {
boolean confirmReadyCheck(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(),
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());
}
}