From b829ad499e7a50c7965472a217b727056b80f0b6 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 13 Apr 2014 02:04:43 +0200 Subject: [PATCH] * Tournament play - Player state set to "Eliminated" as soon as he lost a match in an elimination tournament. Points for a Bye for player are shown immediately. Players finishing the last round are set to Finishedinstead of wating for next round. --- .../src/main/java/mage/server/User.java | 32 ++++++++++--------- Mage/src/mage/game/tournament/Round.java | 3 ++ .../mage/game/tournament/TournamentImpl.java | 17 +++++++--- .../game/tournament/TournamentOptions.java | 2 +- .../game/tournament/TournamentPairing.java | 16 ++++++---- .../mage/game/tournament/TournamentSwiss.java | 1 + Utils/mtg-cards-data.txt | 3 +- 7 files changed, 46 insertions(+), 28 deletions(-) diff --git a/Mage.Server/src/main/java/mage/server/User.java b/Mage.Server/src/main/java/mage/server/User.java index eb21d23c634..6ac0b5ac199 100644 --- a/Mage.Server/src/main/java/mage/server/User.java +++ b/Mage.Server/src/main/java/mage/server/User.java @@ -351,21 +351,23 @@ public class User { for (Map.Entry tableEntry : tables.entrySet()) { Table table = tableEntry.getValue(); if (table.isTournament()) { - switch (table.getState()) { - case CONSTRUCTING: - construct++; - break; - case DRAFTING: - draft++; - break; - case DUELING: - tournament++; - break; - } - if (!isConnected()) { - table.getTournament().getPlayer(tableEntry.getKey()).setDisconnectInfo(disconnectInfo); - } else { - table.getTournament().getPlayer(tableEntry.getKey()).setDisconnectInfo(""); + if (!table.getTournament().getPlayer(tableEntry.getKey()).getEliminated()) { + switch (table.getState()) { + case CONSTRUCTING: + construct++; + break; + case DRAFTING: + draft++; + break; + case DUELING: + tournament++; + break; + } + if (!isConnected()) { + table.getTournament().getPlayer(tableEntry.getKey()).setDisconnectInfo(disconnectInfo); + } else { + table.getTournament().getPlayer(tableEntry.getKey()).setDisconnectInfo(""); + } } } else { switch (table.getState()) { diff --git a/Mage/src/mage/game/tournament/Round.java b/Mage/src/mage/game/tournament/Round.java index 77c20d2096c..2b107cde0dc 100644 --- a/Mage/src/mage/game/tournament/Round.java +++ b/Mage/src/mage/game/tournament/Round.java @@ -78,6 +78,9 @@ public class Round { if (!pair.isAlreadyPublished()) { tournament.updateResults(); pair.setAlreadyPublished(true); + if (tournament instanceof TournamentSingleElimination) { + pair.eliminatePlayers(); + } } } } diff --git a/Mage/src/mage/game/tournament/TournamentImpl.java b/Mage/src/mage/game/tournament/TournamentImpl.java index 9a2b2693df4..e190dca6752 100644 --- a/Mage/src/mage/game/tournament/TournamentImpl.java +++ b/Mage/src/mage/game/tournament/TournamentImpl.java @@ -195,6 +195,7 @@ public abstract class TournamentImpl implements Tournament { round.getPlayerByes().add(player1); player1.setState(TournamentPlayerState.WAITING); player1.setStateInfo("Round Bye"); + updateResults(); } return round; } @@ -244,13 +245,21 @@ public abstract class TournamentImpl implements Tournament { TournamentPlayer tp2 = pair.getPlayer2(); MatchPlayer mp1 = match.getPlayer(pair.getPlayer1().getPlayer().getId()); MatchPlayer mp2 = match.getPlayer(pair.getPlayer2().getPlayer().getId()); - // set player satte - if (round.getRoundNumber() == rounds.size()) { + // set player state if he finished the round + if (round.getRoundNumber() == rounds.size()) { // for elimination getRoundNumber = 0 so never true here if (tp1.getState().equals(TournamentPlayerState.DUELING)) { - tp1.setState(TournamentPlayerState.WAITING); + if (round.getRoundNumber() == getNumberRounds()) { + tp1.setState(TournamentPlayerState.FINISHED); + } else { + tp1.setState(TournamentPlayerState.WAITING); + } } if (tp2.getState().equals(TournamentPlayerState.DUELING)) { - tp2.setState(TournamentPlayerState.WAITING); + if (round.getRoundNumber() == getNumberRounds()) { + tp2.setState(TournamentPlayerState.FINISHED); + } else { + tp2.setState(TournamentPlayerState.WAITING); + } } } // Add round result diff --git a/Mage/src/mage/game/tournament/TournamentOptions.java b/Mage/src/mage/game/tournament/TournamentOptions.java index 6b5aea6d492..85453cbc952 100644 --- a/Mage/src/mage/game/tournament/TournamentOptions.java +++ b/Mage/src/mage/game/tournament/TournamentOptions.java @@ -41,7 +41,7 @@ public class TournamentOptions implements Serializable { protected String name; protected String tournamentType;; - protected List playerTypes = new ArrayList(); + protected List playerTypes = new ArrayList<>(); protected MatchOptions matchOptions = new MatchOptions("", "Two Player Duel"); protected LimitedOptions limitedOptions; protected boolean watchingAllowed = true; diff --git a/Mage/src/mage/game/tournament/TournamentPairing.java b/Mage/src/mage/game/tournament/TournamentPairing.java index 078e44bb82f..ccdd1f90da6 100644 --- a/Mage/src/mage/game/tournament/TournamentPairing.java +++ b/Mage/src/mage/game/tournament/TournamentPairing.java @@ -72,13 +72,15 @@ public class TournamentPairing { } public void eliminatePlayers() { - MatchPlayer mPlayer1 = match.getPlayer(player1.getPlayer().getId()); - MatchPlayer mPlayer2 = match.getPlayer(player2.getPlayer().getId()); - if (mPlayer1.hasQuit() || (!mPlayer2.hasQuit() && mPlayer1.getWins() < match.getWinsNeeded())) { - player1.setEliminated(); - } - if (mPlayer2.hasQuit() || (!mPlayer1.hasQuit() && mPlayer2.getWins() < match.getWinsNeeded())) { - player2.setEliminated(); + if (match.isMatchOver()) { + MatchPlayer mPlayer1 = match.getPlayer(player1.getPlayer().getId()); + MatchPlayer mPlayer2 = match.getPlayer(player2.getPlayer().getId()); + if (mPlayer1.hasQuit() || (!mPlayer2.hasQuit() && mPlayer1.getWins() < match.getWinsNeeded())) { + player1.setEliminated(); + } + if (mPlayer2.hasQuit() || (!mPlayer1.hasQuit() && mPlayer2.getWins() < match.getWinsNeeded())) { + player2.setEliminated(); + } } } diff --git a/Mage/src/mage/game/tournament/TournamentSwiss.java b/Mage/src/mage/game/tournament/TournamentSwiss.java index cc647770035..20cca5b82d6 100644 --- a/Mage/src/mage/game/tournament/TournamentSwiss.java +++ b/Mage/src/mage/game/tournament/TournamentSwiss.java @@ -113,6 +113,7 @@ public abstract class TournamentSwiss extends TournamentImpl { round.getPlayerByes().add(player1); player1.setState(TournamentPlayerState.WAITING); player1.setStateInfo("Round Bye"); + updateResults(); } } } diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index c50181e16e2..336759e7b50 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -23196,4 +23196,5 @@ Mana Confluence|Journey into Nyx|163|R||Land|||{T}, Pay 1 life: Add one mana of Hypnotic Siren|Journey into Nyx|42|R|{U}|Enchantment Creature - Siren|1|1|Bestow 5UU (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.)$Flying$You control enchanted creature.$Enchanted creature gets +1/+1 and has flying.| Kiora's Dismissal|Journey into Nyx|44|R|{U}|Instant|||Strive — Kiora's Dismissal costs U more to cast for each target beyond the first.$Return any number of target enchantments to their owners' hands.| Worst Fears|Journey into Nyx|97|M|{7}{B}|Sorcery|||You control target player during that player's next turn. Exile Worst Fears. (You see all cards that player could see and make all decisions for that player.)| -Ritual of the Returned|Journey into Nyx|80|U|{3}{B}|Instant|||Exile target creature card from your graveyard. Put a black Zombie creature token onto the battlefield with power equal to the exiled card's power and toughness equal to the exiled card's toughness.| \ No newline at end of file +Ritual of the Returned|Journey into Nyx|80|U|{3}{B}|Instant|||Exile target creature card from your graveyard. Put a black Zombie creature token onto the battlefield with power equal to the exiled card's power and toughness equal to the exiled card's toughness.| +Pheres Band Warchief|Journey into Nyx|135|R|{3}{G}|Creature - Centaur Warrior|3|3|Vigilance, trample$Other Centaur creatures you control get +1/+1 and have vigilance and trample.|