@Override public void sideboard() { for (MatchPlayer player : this.players) { if (!player.hasQuit()) { if (player.getDeck() != null) { player.setSideboarding(); player.getPlayer().sideboard(this, player.getDeck()); } else { logger.error("Player " + player.getName() + " has no deck: " + player.getPlayer().getId()); } } } synchronized (this) { while (!isDoneSideboarding()) { try { this.wait(); } catch (InterruptedException ex) { } } } }
protected String createGameStartMessage() { StringBuilder sb = new StringBuilder(); sb.append("<br/><b>Match score:</b><br/>"); for (MatchPlayer mp : this.getPlayers()) { sb.append(" ").append(mp.getPlayer().getLogName()); sb.append(" - ").append(mp.getWins()).append(mp.getWins() == 1 ? " win" : " wins"); if (mp.hasQuit()) { sb.append(" QUITTED"); } sb.append("<br/>"); if (mp.getDeck() != null) { sb.append("DeckHash: ").append(mp.getDeck().getDeckHashCode()).append("<br/>"); } } if (getDraws() > 0) { sb.append(" Draws: ").append(getDraws()).append("<br/>"); } if (options.getRange() != null) { sb.append(" Range: ").append(options.getRange().toString()).append("<br/>"); } sb.append("<br/>").append("Match is ").append(this.getOptions().isRated() ? "" : "not ").append("rated<br/>"); sb.append("You have to win ").append(this.getWinsNeeded()).append(this.getWinsNeeded() == 1 ? " game" : " games").append(" to win the complete match<br/>"); sb.append("<br/>Game has started<br/><br/>"); return sb.toString(); }
private void autoSideboard() { for (MatchPlayer player : match.getPlayers()) { if (!player.isDoneSideboarding()) { match.submitDeck(player.getPlayer().getId(), player.generateDeck()); } } }
@Override public boolean isDoneSideboarding() { for (MatchPlayer player : this.players) { if (!player.hasQuit() && !player.isDoneSideboarding()) { return false; } } return true; }
@Override public boolean checkIfMatchEnds() { int activePlayers = 0; MatchPlayer matchWinner = null; for (MatchPlayer matchPlayer : players) { if (!matchPlayer.hasQuit()) { activePlayers++; matchWinner = matchPlayer; } if (matchPlayer.getWins() >= options.getWinsNeeded()) { matchPlayer.setMatchWinner(true); endTime = new Date(); return true; } } if (activePlayers < 2) { if (matchWinner != null) { matchWinner.setMatchWinner(true); } endTime = new Date(); return true; } return false; }
StringBuilder additonalText = new StringBuilder(); for (MatchPlayer matchPlayer : match.getPlayers()) { if (matchPlayer.getPlayer().equals(you)) { wins = matchPlayer.getWins(); if (matchPlayer.isMatchWinner()) { matchWinner = matchPlayer; if (matchPlayer.getPlayer().hasTimerTimeout()) { if (matchPlayer.getPlayer().equals(you)) { additonalText.append("You run out of time. "); } else { additonalText.append(matchPlayer.getName()).append(" runs out of time. "); } else if (matchPlayer.getPlayer().hasIdleTimeout()) { if (matchPlayer.getPlayer().equals(you)) { additonalText.append("You lost the match for being idle. "); } else { additonalText.append(matchPlayer.getName()).append(" lost for being idle. "); } else if (matchPlayer.hasQuit()) { if (matchPlayer.getPlayer().equals(you)) { additonalText.append("You have quit the match. "); } else { additonalText.append(matchPlayer.getName()).append(" has quit the match. "); if (matchWinner.getPlayer().equals(you)) { matchInfo = "You won the match!"; } else {
protected void initGame(Game game) throws GameException { addGame(); // raises only the number shufflePlayers(); for (MatchPlayer matchPlayer : this.players) { if (!matchPlayer.hasQuit() && matchPlayer.getDeck() != null) { matchPlayer.getPlayer().init(game); game.loadCards(matchPlayer.getDeck().getCards(), matchPlayer.getPlayer().getId()); game.loadCards(matchPlayer.getDeck().getSideboard(), matchPlayer.getPlayer().getId()); game.addPlayer(matchPlayer.getPlayer(), matchPlayer.getDeck()); // set the priority time left for the match if (games.isEmpty()) { // first game full time matchPlayer.getPlayer().setPriorityTimeLeft(options.getPriorityTime()); } else { if (matchPlayer.getPriorityTimeLeft() > 0) { matchPlayer.getPlayer().setPriorityTimeLeft(matchPlayer.getPriorityTimeLeft()); } } } else { if (matchPlayer.getDeck() == null) { logger.error("Match: " + this.getId() + " " + matchPlayer.getName() + " has no deck."); } } } game.setPriorityTime(options.getPriorityTime()); }
@Override public boolean hasEnded() { // Some workarounds to end match if for unknown reason the match was not ended regularly if (getGame() == null && isDoneSideboarding()) { checkIfMatchEnds(); } if (getGame() != null && getGame().hasEnded()) { for (MatchPlayer matchPlayer : players) { if (matchPlayer.getPlayer().hasQuit() && !matchPlayer.hasQuit()) { logger.warn("MatchPlayer was not set to quit matchId " + this.getId() + " - " + matchPlayer.getName()); matchPlayer.setQuit(true); } } checkIfMatchEnds(); } return endTime != null; }
} else { MatchPlayer matchPlayer = match.getPlayer(playerId); if (matchPlayer != null && !match.hasEnded() && !matchPlayer.hasQuit()) { Game game = match.getGame(); if (game != null && !game.hasEnded()) { Player player = match.getPlayer(playerId).getPlayer(); if (player != null && player.isInGame()) { GameManager.instance.quitMatch(game.getId(), userId); } else { if (table.getState() == TableState.SIDEBOARDING) { if (!matchPlayer.isDoneSideboarding()) { matchPlayer.submitDeck(matchPlayer.getDeck());
private static String getMatchResultString(TournamentPlayer p1, TournamentPlayer p2, Match match) { MatchPlayer mp1 = match.getPlayer(p1.getPlayer().getId()); MatchPlayer mp2 = match.getPlayer(p2.getPlayer().getId()); StringBuilder matchResult = new StringBuilder(); matchResult.append(p2.getPlayer().getName()); matchResult.append(" [").append(mp1.getWins()); if (mp1.hasQuit()) { matchResult.append(mp1.getPlayer().hasIdleTimeout() ? "I" : (mp1.getPlayer().hasTimerTimeout() ? "T" : "Q")); } if (match.getDraws() > 0) { matchResult.append('-').append(match.getDraws()); } matchResult.append('-').append(mp2.getWins()); if (mp2.hasQuit()) { matchResult.append(mp2.getPlayer().hasIdleTimeout() ? "I" : (mp2.getPlayer().hasTimerTimeout() ? "T" : "Q")); } matchResult.append("] "); return matchResult.toString(); }
continue; if (matchPlayer.getPlayer().isHuman()) { humanPlayers++; if ((table.getState() == TableState.WAITING || table.getState() == TableState.READY_TO_START) || !match.isDoneSideboarding() || (!matchPlayer.hasQuit() && match.getGame() != null && matchPlayer.getPlayer().isInGame())) { Optional<User> user = UserManager.instance.getUser(userPlayerEntry.getKey()); if (!user.isPresent() || !user.get().isActive()) { logger.warn("- Active user of match is missing: " + matchPlayer.getName()); logger.warn("-- matchId:" + match.getId()); logger.warn("-- userId:" + userPlayerEntry.getKey());
if (mPlayer == null || mPlayer.hasQuit()) { return true; // so the construct panel closes after submit TournamentPlayer tournamentPlayer = table.getTournament().getPlayer(mPlayer.getPlayer().getId()); if (tournamentPlayer != null) { tournamentPlayer.setStateInfo(""); // reset sideboarding state MatchPlayer mPlayer = table.getMatch().getPlayer(playerId); if (mPlayer != null) { deck.setName(mPlayer.getDeck().getName());
StringBuilder sbScore = new StringBuilder(); for (MatchPlayer matchPlayer : table.getMatch().getPlayers()) { if (matchPlayer.getPlayer() == null) { sb.append(", ").append("[unknown]"); sbScore.append('-').append(matchPlayer.getWins()); } else if (!matchPlayer.getName().equals(table.getControllerName())) { sb.append(", ").append(matchPlayer.getName()); sbScore.append('-').append(matchPlayer.getWins()); } else { sbScore.insert(0, matchPlayer.getWins()).insert(0, " Score: ");
@Override public void endGame() { Game game = getGame(); for (MatchPlayer matchPlayer : this.players) { Player player = game.getPlayer(matchPlayer.getPlayer().getId()); if (player != null) { // get the left time from player priority timer if (game.getPriorityTime() > 0) { matchPlayer.setPriorityTimeLeft(player.getPriorityTimeLeft()); } if (player.hasQuit()) { matchPlayer.setQuit(true); } if (player.hasWon()) { matchPlayer.addWin(); } } } if (game.isADraw()) { addDraw(); } checkIfMatchEnds(); game.fireGameEndInfo(); gamesInfo.add(createGameInfo(game)); }
private void viewLimitedDeck(UUID userIdRequester, UUID origId) { Player viewLimitedDeckPlayer = game.getPlayer(userIdRequester); if (viewLimitedDeckPlayer != null) { if (viewLimitedDeckPlayer.isHuman()) { for (MatchPlayer p : TableManager.instance.getTable(tableId).getMatch().getPlayers()) { if (p.getPlayer().getId().equals(userIdRequester)) { Optional<User> u = UserManager.instance.getUser(origId); if (u.isPresent() && p.getDeck() != null) { u.get().ccViewLimitedDeck(p.getDeck(), tableId, requestsOpen, true); } } } } } }
private void sideboard() { table.sideboard(); setupTimeout(Match.SIDEBOARD_TIME); if (table.isTournamentSubTable()) { for (MatchPlayer matchPlayer : match.getPlayers()) { if (!matchPlayer.hasQuit()) { TournamentPlayer tournamentPlayer = table.getTournament().getPlayer(matchPlayer.getPlayer().getId()); if (tournamentPlayer != null) { tournamentPlayer.setStateInfo("sideboarding"); } } } } match.sideboard(); cancelTimeout(); if (table.isTournamentSubTable()) { for (MatchPlayer matchPlayer : match.getPlayers()) { TournamentPlayer tournamentPlayer = table.getTournament().getPlayer(matchPlayer.getPlayer().getId()); if (tournamentPlayer != null && tournamentPlayer.getStateInfo().equals("sideboarding")) { tournamentPlayer.setStateInfo(""); } } } }
@Override public void submitDeck(UUID playerId, Deck deck) { MatchPlayer player = getPlayer(playerId); if (player != null) { // make sure the deck name (needed for Tiny Leaders) won't get lost by sideboarding deck.setName(player.getDeck().getName()); deck.setDeckHashCode(player.getDeck().getDeckHashCode()); player.submitDeck(deck); } synchronized (this) { this.notifyAll(); } }
this.life = player.getLife(); this.counters = player.getCounters(); this.wins = player.getMatchPlayer().getWins(); this.winsNeeded = player.getMatchPlayer().getWinsNeeded(); this.deckHashCode = player.getMatchPlayer().getDeck() != null ? player.getMatchPlayer().getDeck().getDeckHashCode() : 0; this.libraryCount = player.getLibrary().size(); this.handCount = player.getHand().size();
/** * Called by eliminate tournaments after each match */ public void eliminatePlayers() { if (match != null && match.hasEnded()) { MatchPlayer mPlayer1 = match.getPlayer(player1.getPlayer().getId()); MatchPlayer mPlayer2 = match.getPlayer(player2.getPlayer().getId()); if (mPlayer1.hasQuit() || !mPlayer1.isMatchWinner()) { player1.setEliminated(); } if (mPlayer2.hasQuit() || !mPlayer2.isMatchWinner()) { player2.setEliminated(); } } } public void finishPlayersThatPlayedLastRound() {