diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java index 4ecc346a460..576bab15c73 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java @@ -312,6 +312,7 @@ public class NewTableDialog extends MageDialog { options.getPlayerTypes().add(player.getPlayerType()); } options.setDeckType((String) this.cbDeckType.getSelectedItem()); + options.setLimited(false); options.setAttackOption((MultiplayerAttackOption) this.cbAttackOption.getSelectedItem()); options.setRange((RangeOfInfluence) this.cbRange.getSelectedItem()); options.setWinsNeeded((Integer)this.spnNumWins.getValue()); diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java index cf686cf6579..77b402e9f11 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java @@ -306,6 +306,7 @@ public class NewTournamentDialog extends MageDialog { tOptions.getMatchOptions().setWinsNeeded(2); tOptions.getMatchOptions().setAttackOption(MultiplayerAttackOption.LEFT); tOptions.getMatchOptions().setRange(RangeOfInfluence.ALL); + tOptions.getMatchOptions().setLimited(true); table = session.createTournamentTable(roomId, tOptions); if (table == null) { JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Error creating table.", "Error", JOptionPane.ERROR_MESSAGE); diff --git a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java index 3510ab5381d..b22c07dfbf4 100644 --- a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java +++ b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java @@ -209,7 +209,10 @@ public class CallbackClientImpl implements CallbackClient { TableClientMessage message = (TableClientMessage) callback.getData(); DeckView deckView = message.getDeck(); Deck deck = DeckUtil.construct(deckView); - sideboard(deck, message.getTableId(), message.getTime()); + if (message.getFlag()) + construct(deck, message.getTableId(), message.getTime()); + else + sideboard(deck, message.getTableId(), message.getTime()); } else if (callback.getMethod().equals("construct")) { TableClientMessage message = (TableClientMessage) callback.getData(); diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index 21ff3db5bf3..f3532c3fee4 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -514,7 +514,7 @@ public class TablesPanel extends javax.swing.JPanel { options.setWinsNeeded(1); table = session.createTable(roomId, options); session.joinTable(roomId, table.getTableId(), "Human", "Human", 1, Sets.loadDeck("test.dck")); - session.joinTable(roomId, table.getTableId(), "Computer", "Computer - minimax", 1, Sets.loadDeck("test.dck")); + session.joinTable(roomId, table.getTableId(), "Computer", "Computer - minimax", 5, Sets.loadDeck("test.dck")); session.startGame(roomId, table.getTableId()); } catch (Exception ex) { handleError(ex); diff --git a/Mage.Common/src/mage/view/TableClientMessage.java b/Mage.Common/src/mage/view/TableClientMessage.java index 8c8e6cd3630..a4357e9fc5e 100644 --- a/Mage.Common/src/mage/view/TableClientMessage.java +++ b/Mage.Common/src/mage/view/TableClientMessage.java @@ -46,7 +46,7 @@ public class TableClientMessage implements Serializable { private UUID gameId; private UUID playerId; private int time; - private boolean flag; + private boolean flag = false; public TableClientMessage(Deck deck, UUID tableId, int time) { this.deck = new DeckView(deck); @@ -54,6 +54,13 @@ public class TableClientMessage implements Serializable { this.time = time; } + public TableClientMessage(Deck deck, UUID tableId, int time, boolean flag) { + this.deck = new DeckView(deck); + this.tableId = tableId; + this.time = time; + this.flag = flag; + } + public TableClientMessage(UUID gameId, UUID playerId) { this.gameId = gameId; this.playerId = playerId; diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index dfdb9e15ecc..e5505be2813 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -381,7 +381,7 @@ public class TableController { User user = UserManager.getInstance().getUser(entry.getKey()); int remaining = (int) futureTimeout.getDelay(TimeUnit.SECONDS); if (user != null) - user.sideboard(deck, table.getId(), remaining); + user.sideboard(deck, table.getId(), remaining, options.isLimited()); break; } } @@ -394,6 +394,10 @@ public class TableController { public void construct() { table.construct(); } + + public MatchOptions getOptions() { + return options; + } public void endGame() { UUID choosingPlayerId = match.getChooser(); diff --git a/Mage.Server/src/main/java/mage/server/User.java b/Mage.Server/src/main/java/mage/server/User.java index 875ddbff9d8..58c106d0a97 100644 --- a/Mage.Server/src/main/java/mage/server/User.java +++ b/Mage.Server/src/main/java/mage/server/User.java @@ -139,8 +139,8 @@ public class User { fireCallback(new ClientCallback("startTournament", tournamentId, new TableClientMessage(tournamentId, playerId))); } - public void sideboard(final Deck deck, final UUID tableId, final int time) { - fireCallback(new ClientCallback("sideboard", tableId, new TableClientMessage(deck, tableId, time))); + public void sideboard(final Deck deck, final UUID tableId, final int time, boolean limited) { + fireCallback(new ClientCallback("sideboard", tableId, new TableClientMessage(deck, tableId, time, limited))); sideboarding.put(tableId, deck); } @@ -203,8 +203,8 @@ public class User { entry.getValue().construct(0); } for (Entry entry: sideboarding.entrySet()) { - int remaining = TableManager.getInstance().getController(entry.getKey()).getRemainingTime(); - sideboard(entry.getValue(), entry.getKey(), remaining); + TableController controller = TableManager.getInstance().getController(entry.getKey()); + sideboard(entry.getValue(), entry.getKey(), controller.getRemainingTime(), controller.getOptions().isLimited()); } } diff --git a/Mage/src/mage/game/match/MatchOptions.java b/Mage/src/mage/game/match/MatchOptions.java index 5301c55e5bc..7b94d6afb71 100644 --- a/Mage/src/mage/game/match/MatchOptions.java +++ b/Mage/src/mage/game/match/MatchOptions.java @@ -46,6 +46,7 @@ public class MatchOptions implements Serializable { protected int winsNeeded; protected String gameType; protected String deckType; + protected boolean limited; protected List playerTypes = new ArrayList(); public MatchOptions(String name, String gameType) { @@ -100,5 +101,12 @@ public class MatchOptions implements Serializable { public List getPlayerTypes() { return playerTypes; } + + public boolean isLimited() { + return limited; + } + public void setLimited(boolean limited) { + this.limited = limited; + } }