From 360a62917b735a62cdb7246d70cfb0502b9c0ca6 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 7 Oct 2013 18:14:27 +0200 Subject: [PATCH] Added optional server config parameter to limit the number of AI players when creating tournaments. --- .../client/dialog/NewTournamentDialog.java | 2 +- Mage.Server/config/config.xml | 13 +++++- .../main/java/mage/server/MageServerImpl.java | 40 +++++++++++++++---- .../java/mage/server/game/PlayerFactory.java | 3 +- .../java/mage/server/util/ConfigSettings.java | 4 ++ .../main/xml-resources/jaxb/Config/Config.xsd | 7 ++-- 6 files changed, 55 insertions(+), 14 deletions(-) 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 012e0fa0451..bf8e1a61d9b 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java @@ -394,7 +394,7 @@ public class NewTournamentDialog extends MageDialog { table = session.createTournamentTable(roomId, tOptions); if (table == null) { - JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Error creating table.", "Error", JOptionPane.ERROR_MESSAGE); + // message must be send by server! return; } if (session.joinTournamentTable(roomId, table.getTableId(), this.txtPlayer1Name.getText(), "Human", 1)) { diff --git a/Mage.Server/config/config.xml b/Mage.Server/config/config.xml index c2b4c2c883a..c20474563c2 100644 --- a/Mage.Server/config/config.xml +++ b/Mage.Server/config/config.xml @@ -1,13 +1,22 @@ - + - + diff --git a/Mage.Server/src/main/java/mage/server/MageServerImpl.java b/Mage.Server/src/main/java/mage/server/MageServerImpl.java index 83e29312e9c..cd9c546edeb 100644 --- a/Mage.Server/src/main/java/mage/server/MageServerImpl.java +++ b/Mage.Server/src/main/java/mage/server/MageServerImpl.java @@ -62,6 +62,7 @@ import java.util.List; import java.util.Locale; import java.util.UUID; import java.util.concurrent.ExecutorService; +import mage.server.util.ConfigSettings; /** * @@ -144,11 +145,34 @@ public class MageServerImpl implements MageServer { return executeWithResult("createTournamentTable", sessionId, new ActionWithTableViewResult() { @Override public TableView execute() throws MageException { - UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); - TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTournamentTable(userId, options); - logger.info("Tournament table " + table.getTableId() + " created"); - LogServiceImpl.instance.log(LogKeys.KEY_TOURNAMENT_TABLE_CREATED, sessionId, userId.toString(), table.getTableId().toString()); - return table; + try { + UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); + // check AI players max + String maxAiOpponents = ConfigSettings.getInstance().getMaxAiOpponents(); + if (maxAiOpponents != null) { + int max = Integer.parseInt(maxAiOpponents); + int aiPlayers = 0; + for (String playerType : options.getPlayerTypes()) { + if (!playerType.equals("Human")) { + aiPlayers++; + } + } + if (aiPlayers > max) { + User user = UserManager.getInstance().getUser(userId); + if (user != null) { + user.showUserMessage("Create tournament", "It's only allowed to use a maximum of " + max + " AI players."); + } + throw new MageException("No message"); + } + } + TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTournamentTable(userId, options); + logger.info("Tournament table " + table.getTableId() + " created"); + LogServiceImpl.instance.log(LogKeys.KEY_TOURNAMENT_TABLE_CREATED, sessionId, userId.toString(), table.getTableId().toString()); + return table; + } catch (Exception ex) { + handleException(ex); + } + return null; } }); } @@ -816,8 +840,10 @@ public class MageServerImpl implements MageServer { } public void handleException(Exception ex) throws MageException { - logger.fatal("", ex); - throw new MageException("Server error: " + ex.getMessage()); + if (!ex.getMessage().equals("No message")) { + logger.fatal("", ex); + throw new MageException("Server error: " + ex.getMessage()); + } } @Override diff --git a/Mage.Server/src/main/java/mage/server/game/PlayerFactory.java b/Mage.Server/src/main/java/mage/server/game/PlayerFactory.java index 7751f22a395..d3e4cf802b0 100644 --- a/Mage.Server/src/main/java/mage/server/game/PlayerFactory.java +++ b/Mage.Server/src/main/java/mage/server/game/PlayerFactory.java @@ -78,8 +78,9 @@ public class PlayerFactory { } public void addPlayerType(String name, Class playerType) { - if (playerType != null) + if (playerType != null) { this.playerTypes.put(name, playerType); + } } } diff --git a/Mage.Server/src/main/java/mage/server/util/ConfigSettings.java b/Mage.Server/src/main/java/mage/server/util/ConfigSettings.java index 6255b3b18cb..92c1cfd987d 100644 --- a/Mage.Server/src/main/java/mage/server/util/ConfigSettings.java +++ b/Mage.Server/src/main/java/mage/server/util/ConfigSettings.java @@ -94,6 +94,10 @@ public class ConfigSettings { public String getUserNamePattern() { return config.getServer().getUserNamePattern(); } + + public String getMaxAiOpponents() { + return config.getServer().getMaxAiOpponents(); + } public List getPlayerTypes() { return config.getPlayerTypes().getPlayerType(); diff --git a/Mage.Server/src/main/xml-resources/jaxb/Config/Config.xsd b/Mage.Server/src/main/xml-resources/jaxb/Config/Config.xsd index ddcce51ad0b..03651148904 100644 --- a/Mage.Server/src/main/xml-resources/jaxb/Config/Config.xsd +++ b/Mage.Server/src/main/xml-resources/jaxb/Config/Config.xsd @@ -21,9 +21,10 @@ - - - + + + +