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 fc436c76b19..d5ed1fe1953 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java @@ -339,7 +339,7 @@ public class NewTableDialog extends MageDialog { for (TablePlayerPanel player: players) { if (!player.getPlayerType().equals("Human")) { if (!player.joinTable(roomId, table.getTableId())) { - JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Error joining table.", "Error", JOptionPane.ERROR_MESSAGE); + // error message must be send by the server session.removeTable(roomId, table.getTableId()); table = null; return; diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form index 636cf216ecb..01d0b361c34 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form @@ -113,7 +113,7 @@ - + @@ -124,7 +124,7 @@ - + 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 bf8e1a61d9b..1c76bcee668 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java @@ -401,7 +401,7 @@ public class NewTournamentDialog extends MageDialog { for (TournamentPlayerPanel player: players) { if (!player.getPlayerType().toString().equals("Human")) { if (!player.joinTournamentTable(roomId, table.getTableId())) { - JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Error joining tournament.", "Error", JOptionPane.ERROR_MESSAGE); + // error message must be send by sever session.removeTable(roomId, table.getTableId()); table = null; return; diff --git a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/src/mage/player/ai/ComputerDraftPlayer.java b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/src/mage/player/ai/ComputerDraftPlayer.java index 28f802006a1..48bac674dab 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/src/mage/player/ai/ComputerDraftPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/src/mage/player/ai/ComputerDraftPlayer.java @@ -30,6 +30,8 @@ package mage.player.ai; import mage.constants.RangeOfInfluence; import mage.game.Game; +import mage.game.Table; +import mage.game.tournament.TournamentType; import mage.players.Player; /** @@ -65,4 +67,15 @@ public class ComputerDraftPlayer extends ComputerPlayer imp game.concede(playerId); return true; } + + @Override + public boolean canJoinTable(Table table) { + if (table.isTournament()) { + TournamentType tournamentType = table.getTournament().getTournamentType(); + if(tournamentType != null && tournamentType.isDraft()) { + return true; + } + } + return false; + } } diff --git a/Mage.Server/config/log4j.properties b/Mage.Server/config/log4j.properties index f1f6e4f3dbc..6f00057f9cc 100644 --- a/Mage.Server/config/log4j.properties +++ b/Mage.Server/config/log4j.properties @@ -1,5 +1,6 @@ #default levels log4j.rootLogger=debug, console, logfile +log4j.logger.com.j256.ormlite=warn #console log log4j.appender.console=org.apache.log4j.ConsoleAppender diff --git a/Mage.Server/release/config/log4j.properties b/Mage.Server/release/config/log4j.properties index 6a3d87231f1..8a5569910fd 100644 --- a/Mage.Server/release/config/log4j.properties +++ b/Mage.Server/release/config/log4j.properties @@ -1,6 +1,6 @@ #default levels -log4j.rootLogger=warn, console, logfile - +log4j.rootLogger=info, console, logfile +log4j.logger.com.j256.ormlite=warn #console log log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout diff --git a/Mage.Server/src/main/java/mage/server/ChatSession.java b/Mage.Server/src/main/java/mage/server/ChatSession.java index da69d2d8518..4f92b2bcbf7 100644 --- a/Mage.Server/src/main/java/mage/server/ChatSession.java +++ b/Mage.Server/src/main/java/mage/server/ChatSession.java @@ -61,7 +61,7 @@ public class ChatSession { String userName = user.getName(); clients.put(userId, userName); broadcast(userName, " has joined", MessageColor.BLUE); - logger.info(userName + " joined chat " + chatId); + logger.debug(userName + " joined chat " + chatId); } } @@ -81,7 +81,7 @@ public class ChatSession { message = " has left chat"; } broadcast(userName, message, MessageColor.BLUE); - logger.info(userName + message + " " + chatId); + logger.debug(userName + message + " " + chatId); } } diff --git a/Mage.Server/src/main/java/mage/server/MageServerImpl.java b/Mage.Server/src/main/java/mage/server/MageServerImpl.java index cd9c546edeb..e4b00b104ab 100644 --- a/Mage.Server/src/main/java/mage/server/MageServerImpl.java +++ b/Mage.Server/src/main/java/mage/server/MageServerImpl.java @@ -28,6 +28,11 @@ package mage.server; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.UUID; +import java.util.concurrent.ExecutorService; import mage.MageException; import mage.cards.decks.DeckCardLists; import mage.cards.repository.CardInfo; @@ -44,26 +49,37 @@ import mage.interfaces.ServerState; import mage.interfaces.callback.ClientCallback; import mage.remote.MageVersionException; import mage.server.draft.DraftManager; -import mage.server.game.*; +import mage.server.game.DeckValidatorFactory; +import mage.server.game.GameFactory; +import mage.server.game.GameManager; +import mage.server.game.GamesRoom; +import mage.server.game.GamesRoomManager; +import mage.server.game.PlayerFactory; +import mage.server.game.ReplayManager; import mage.server.services.LogKeys; import mage.server.services.impl.FeedbackServiceImpl; import mage.server.services.impl.LogServiceImpl; import mage.server.tournament.TournamentFactory; import mage.server.tournament.TournamentManager; +import mage.server.util.ConfigSettings; import mage.server.util.ServerMessagesUtil; import mage.server.util.ThreadExecutor; -import mage.utils.*; -import mage.view.*; +import mage.utils.ActionWithBooleanResult; +import mage.utils.ActionWithNullNegativeResult; +import mage.utils.ActionWithTableViewResult; +import mage.utils.CompressUtil; +import mage.utils.MageVersion; +import mage.view.ChatMessage; import mage.view.ChatMessage.MessageColor; +import mage.view.DraftPickView; +import mage.view.GameView; +import mage.view.MatchView; +import mage.view.TableView; +import mage.view.TournamentView; +import mage.view.UserDataView; +import mage.view.UserView; import org.apache.log4j.Logger; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.UUID; -import java.util.concurrent.ExecutorService; -import mage.server.util.ConfigSettings; - /** * * @author BetaSteward_at_googlemail.com, noxx @@ -133,7 +149,7 @@ public class MageServerImpl implements MageServer { public TableView execute() throws MageException { UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTable(userId, options); - logger.info("Table " + table.getTableId() + " created"); + logger.debug("Table " + table.getTableId() + " created"); LogServiceImpl.instance.log(LogKeys.KEY_TABLE_CREATED, sessionId, userId.toString(), table.getTableId().toString()); return table; } @@ -166,7 +182,7 @@ public class MageServerImpl implements MageServer { } } TableView table = GamesRoomManager.getInstance().getRoom(roomId).createTournamentTable(userId, options); - logger.info("Tournament table " + table.getTableId() + " created"); + logger.debug("Tournament table " + table.getTableId() + " created"); LogServiceImpl.instance.log(LogKeys.KEY_TOURNAMENT_TABLE_CREATED, sessionId, userId.toString(), table.getTableId().toString()); return table; } catch (Exception ex) { @@ -195,7 +211,7 @@ public class MageServerImpl implements MageServer { public Boolean execute() throws MageException { UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTable(userId, tableId, name, playerType, skill, deckList); - logger.info("Session " + sessionId + " joined table " + tableId); + logger.debug("Session " + sessionId + " joined table " + tableId); return ret; } }); @@ -208,7 +224,7 @@ public class MageServerImpl implements MageServer { public Boolean execute() throws MageException { UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTournamentTable(userId, tableId, name, playerType, skill); - logger.info("Session " + sessionId + " joined table " + tableId); + logger.debug("Session " + sessionId + " joined table " + tableId); return ret; } }); @@ -221,7 +237,7 @@ public class MageServerImpl implements MageServer { public Boolean execute() throws MageException { UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId(); boolean ret = TableManager.getInstance().submitDeck(userId, tableId, deckList); - logger.info("Session " + sessionId + " submitted deck"); + logger.debug("Session " + sessionId + " submitted deck"); return ret; } }); @@ -318,7 +334,7 @@ public class MageServerImpl implements MageServer { @Override public void execute() { SessionManager.getInstance().disconnect(sessionId, true); - logger.info("Client deregistered ..."); + logger.debug("Client deregistered ..."); } }); } diff --git a/Mage.Server/src/main/java/mage/server/Main.java b/Mage.Server/src/main/java/mage/server/Main.java index b3b99f9ca2d..40edb45cb50 100644 --- a/Mage.Server/src/main/java/mage/server/Main.java +++ b/Mage.Server/src/main/java/mage/server/Main.java @@ -167,13 +167,13 @@ public class Main { } else { sessionName = session.getHost(); } - if (throwable instanceof ClientDisconnectedException) { + if (throwable instanceof ClientDisconnectedException) { SessionManager.getInstance().disconnect(client.getSessionId(), true); - logger.info("client disconnected - " + sessionName); + logger.info("Client disconnected - " + sessionName); } else { SessionManager.getInstance().disconnect(client.getSessionId(), false); - logger.info("connection to client lost - " + sessionName); + logger.info("Connection to client lost - " + sessionName); } } } @@ -249,7 +249,7 @@ public class Main { private static Class loadPlugin(Plugin plugin) { try { classLoader.addURL(new File(pluginFolder + "/" + plugin.getJar()).toURI().toURL()); - logger.info("Loading plugin: " + plugin.getClassName()); + logger.debug("Loading plugin: " + plugin.getClassName()); return Class.forName(plugin.getClassName(), true, classLoader); } catch (ClassNotFoundException ex) { logger.warn("Plugin not Found:" + plugin.getJar() + " - check plugin folder"); @@ -262,7 +262,7 @@ public class Main { private static MatchType loadGameType(GamePlugin plugin) { try { classLoader.addURL(new File(pluginFolder + "/" + plugin.getJar()).toURI().toURL()); - logger.info("Loading game type: " + plugin.getClassName()); + logger.debug("Loading game type: " + plugin.getClassName()); return (MatchType) Class.forName(plugin.getTypeName(), true, classLoader).newInstance(); } catch (ClassNotFoundException ex) { logger.warn("Game type not found:" + plugin.getJar() + " - check plugin folder"); @@ -275,7 +275,7 @@ public class Main { private static TournamentType loadTournamentType(GamePlugin plugin) { try { classLoader.addURL(new File(pluginFolder + "/" + plugin.getJar()).toURI().toURL()); - logger.info("Loading tournament type: " + plugin.getClassName()); + logger.debug("Loading tournament type: " + plugin.getClassName()); return (TournamentType) Class.forName(plugin.getTypeName(), true, classLoader).newInstance(); } catch (ClassNotFoundException ex) { logger.warn("Tournament type not found:" + plugin.getJar() + " - check plugin folder"); diff --git a/Mage.Server/src/main/java/mage/server/Session.java b/Mage.Server/src/main/java/mage/server/Session.java index 0ec408fae18..5c346a1fa2b 100644 --- a/Mage.Server/src/main/java/mage/server/Session.java +++ b/Mage.Server/src/main/java/mage/server/Session.java @@ -82,7 +82,7 @@ public class Session { Pattern p = Pattern.compile(ConfigSettings.getInstance().getUserNamePattern(), Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(userName); if (m.find()) { - throw new MageException("User name includes not allowed characters: use a-z, A-Z and 0-9"); + throw new MageException("User name '" + userName + "' includes not allowed characters: use a-z, A-Z and 0-9"); } User user = UserManager.getInstance().createUser(userName, host); if (user == null) { // user already exists @@ -99,11 +99,11 @@ public class Session { } } else { - throw new MageException("User name already in use"); + throw new MageException("User name " + userName + " already in use"); } } if (!UserManager.getInstance().connectToSession(sessionId, user.getId())) { - throw new MageException("Error connecting"); + throw new MageException("Error connecting " + userName); } this.userId = user.getId(); } diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index 3ffc5311c4f..8898d4be360 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -28,7 +28,6 @@ package mage.server; -import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.UUID; @@ -36,15 +35,14 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; -import mage.constants.RangeOfInfluence; -import mage.constants.TableState; import mage.MageException; import mage.cards.decks.Deck; import mage.cards.decks.DeckCardLists; import mage.cards.decks.InvalidDeckException; +import mage.constants.RangeOfInfluence; +import mage.constants.TableState; import mage.game.GameException; import mage.game.GameOptions; -import mage.game.GameState; import mage.game.Seat; import mage.game.Table; import mage.game.draft.Draft; @@ -57,18 +55,20 @@ import mage.game.match.MatchPlayer; import mage.game.tournament.Tournament; import mage.game.tournament.TournamentOptions; import mage.game.tournament.TournamentPlayer; -import mage.interfaces.callback.ClientCallback; import mage.players.Player; import mage.server.challenge.ChallengeManager; import mage.server.draft.DraftManager; -import mage.server.game.*; +import mage.server.game.DeckValidatorFactory; +import mage.server.game.GameFactory; +import mage.server.game.GameManager; +import mage.server.game.PlayerFactory; +import mage.server.game.ReplayManager; import mage.server.services.LogKeys; import mage.server.services.impl.LogServiceImpl; import mage.server.tournament.TournamentFactory; import mage.server.tournament.TournamentManager; import mage.server.util.ServerMessagesUtil; import mage.server.util.ThreadExecutor; -import mage.view.GameEndView; import org.apache.log4j.Logger; @@ -164,8 +164,12 @@ public class TableController { logger.fatal(new StringBuilder("couldn't get user ").append(name).append(" for join tornament userId = ").append(userId).toString()); return false; } + if (!player.canJoinTable(table)) { + user.showUserMessage("Join Table", new StringBuilder("A ").append(seat.getPlayerType()).append(" player can't join this table.").toString()); + return false; + } user.addTable(player.getId(), table); - logger.info("player joined " + player.getId()); + logger.debug("player joined " + player.getId()); //only inform human players and add them to sessionPlayerMap if (seat.getPlayer().isHuman()) { user.joinedTable(table.getRoomId(), table.getId(), true); @@ -227,10 +231,14 @@ public class TableController { user.showUserMessage("Join Table",message); return false; } + if (!player.canJoinTable(table)) { + user.showUserMessage("Join Table", new StringBuilder("A ").append(seat.getPlayerType()).append(" player can't join this table.").toString()); + return false; + } match.addPlayer(player, deck); table.joinTable(player, seat); user.addTable(player.getId(), table); - logger.info("player joined " + player.getId()); + logger.debug("player joined " + player.getId()); //only inform human players and add them to sessionPlayerMap if (seat.getPlayer().isHuman()) { user.joinedTable(table.getRoomId(), table.getId(), false); @@ -348,7 +356,7 @@ public class TableController { player = PlayerFactory.getInstance().createPlayer(playerType, name, options.getRange(), skill); } if (player != null) { - logger.info("Player created " + player.getId()); + logger.debug("Player created " + player.getId()); } return player; } diff --git a/Mage.Server/src/main/java/mage/server/TableManager.java b/Mage.Server/src/main/java/mage/server/TableManager.java index 639f00182d4..627f152c087 100644 --- a/Mage.Server/src/main/java/mage/server/TableManager.java +++ b/Mage.Server/src/main/java/mage/server/TableManager.java @@ -309,7 +309,7 @@ public class TableManager { } private void checkExpired() { - logger.info("Table expire checking..."); + logger.debug("Table expire checking..."); Date now = new Date(); List toRemove = new ArrayList(); @@ -318,7 +318,7 @@ public class TableManager { // remove all not finished tables created more than expire_time ago long diff = (now.getTime() - table.getCreateTime().getTime()) / EXPIRE_TIME_UNIT_VALUE; if (diff >= EXPIRE_TIME) { - logger.info("Table expired: id = " + table.getId() + ", created_by=" + table.getControllerName() + ". Removing..."); + logger.warn("Table expired: id = " + table.getId() + ", created_by=" + table.getControllerName() + ". Removing..."); toRemove.add(table.getId()); } // remove immediately non tournament tables with no human players @@ -326,7 +326,7 @@ public class TableManager { boolean canBeRemoved = true; for (MatchPlayer matchPlayer :table.getMatch().getPlayers()) { Player player = matchPlayer.getPlayer(); - if (player != null && player.isHuman()) { + if (player != null && player.isHuman() && !player.hasLeft()) { canBeRemoved = false; } // tournament sub tables may not be removed as long the tournament is not finished @@ -335,7 +335,7 @@ public class TableManager { } } if (canBeRemoved) { - logger.info("Table with no human player: id = " + table.getId() + ", created_by=" + table.getControllerName() + ". Removing..."); + logger.warn("Table with no active human player: id = " + table.getId() + ", created_by=" + table.getControllerName() + ". Removing..."); toRemove.add(table.getId()); } } diff --git a/Mage.Server/src/main/java/mage/server/UserManager.java b/Mage.Server/src/main/java/mage/server/UserManager.java index 05b55b38c11..62f45a9a2f0 100644 --- a/Mage.Server/src/main/java/mage/server/UserManager.java +++ b/Mage.Server/src/main/java/mage/server/UserManager.java @@ -104,7 +104,8 @@ public class UserManager { if (userId != null) { ChatManager.getInstance().removeUser(userId, User.DisconnectReason.Disconnected); if (users.containsKey(userId)) { - logger.info("user disconnected " + userId); + User user = users.get(userId); + logger.info(new StringBuilder("User ").append(user.getName()).append("disconnected id:").append(userId).toString()); users.get(userId).setSessionId(""); ChatManager.getInstance().broadcast(userId, "has lost connection", MessageColor.BLACK); } @@ -122,7 +123,7 @@ public class UserManager { if (users.containsKey(userId)) { logger.info("Remove user " + users.get(userId).getName() + ": " + userId + " Reason: " + reason.toString()); ChatManager.getInstance().removeUser(userId, reason); - ChatManager.getInstance().broadcast(userId, "has disconnected", MessageColor.BLACK); + ChatManager.getInstance().broadcast(userId, new StringBuilder("has disconnected (").append(reason.toString()).append(")").toString(), MessageColor.BLACK); users.get(userId).kill(reason); users.remove(userId); } diff --git a/Mage.Server/src/main/java/mage/server/draft/DraftController.java b/Mage.Server/src/main/java/mage/server/draft/DraftController.java index 7867cc50f9e..9c830f97331 100644 --- a/Mage.Server/src/main/java/mage/server/draft/DraftController.java +++ b/Mage.Server/src/main/java/mage/server/draft/DraftController.java @@ -110,7 +110,7 @@ public class DraftController { for (DraftPlayer player: draft.getPlayers()) { if (!player.getPlayer().isHuman()) { player.setJoined(); - logger.info("player " + player.getPlayer().getId() + " has joined draft " + draft.getId()); + logger.debug("player " + player.getPlayer().getId() + " has joined draft " + draft.getId()); } } checkStart(); @@ -125,7 +125,7 @@ public class DraftController { DraftSession draftSession = new DraftSession(draft, userId, playerId); draftSessions.put(playerId, draftSession); UserManager.getInstance().getUser(userId).addDraft(playerId, draftSession); - logger.info("User " + UserManager.getInstance().getUser(userId).getName() + " has joined draft " + draft.getId()); + logger.debug("User " + UserManager.getInstance().getUser(userId).getName() + " has joined draft " + draft.getId()); draft.getPlayer(playerId).setJoined(); checkStart(); } @@ -198,7 +198,7 @@ public class DraftController { public void timeout(UUID userId) { if (userPlayerMap.containsKey(userId)) { draft.autoPick(userPlayerMap.get(userId)); - logger.info("Draft pick timeout - autopick for player: " + userPlayerMap.get(userId)); + logger.debug("Draft pick timeout - autopick for player: " + userPlayerMap.get(userId)); } } diff --git a/Mage.Server/src/main/java/mage/server/game/DeckValidatorFactory.java b/Mage.Server/src/main/java/mage/server/game/DeckValidatorFactory.java index 1076525ccd2..8eccb0ccb6d 100644 --- a/Mage.Server/src/main/java/mage/server/game/DeckValidatorFactory.java +++ b/Mage.Server/src/main/java/mage/server/game/DeckValidatorFactory.java @@ -63,7 +63,7 @@ public class DeckValidatorFactory { logger.fatal("DeckValidatorFactory error", ex); return null; } - logger.info("Deck validator created: " + validator.getName()); + logger.debug("Deck validator created: " + validator.getName()); return validator; } diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java index ba77547a7f2..71913b73387 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameController.java +++ b/Mage.Server/src/main/java/mage/server/game/GameController.java @@ -248,7 +248,7 @@ public class GameController implements GameCallback { @Override public void execute() throws MageException { game.concede(initPlayerId); - logger.info("Game timeout for player: " + initPlayerId + ". Conceding."); + logger.debug("Game timeout for player: " + initPlayerId + ". Conceding."); } }); timers.put(playerId, timer); @@ -267,7 +267,7 @@ public class GameController implements GameCallback { User user = UserManager.getInstance().getUser(userId); gameSession.setUserData(user.getUserData()); user.addGame(playerId, gameSession); - logger.info(new StringBuilder("Player ").append(playerId).append(" has joined game ").append(game.getId()).toString()); + logger.debug(new StringBuilder("Player ").append(playerId).append(" has joined game ").append(game.getId()).toString()); ChatManager.getInstance().broadcast(chatId, "", new StringBuilder(game.getPlayer(playerId).getName()).append(" has joined the game").toString(), MessageColor.BLACK); checkStart(); } @@ -694,7 +694,7 @@ public class GameController implements GameCallback { finally { output.close(); } - logger.info("Saved game:" + game.getId()); + logger.debug("Saved game:" + game.getId()); } catch(IOException ex) { logger.fatal("Cannot save game.", ex); diff --git a/Mage.Server/src/main/java/mage/server/game/GameFactory.java b/Mage.Server/src/main/java/mage/server/game/GameFactory.java index ab36710576d..b3033668099 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameFactory.java +++ b/Mage.Server/src/main/java/mage/server/game/GameFactory.java @@ -70,7 +70,7 @@ public class GameFactory { logger.fatal("Error creating match - " + gameType, ex); return null; } - logger.info("Game created: " + gameType); // + game.getId().toString()); + logger.debug("Game created: " + gameType); // + game.getId().toString()); return match; } 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 d3e4cf802b0..4c3960188a3 100644 --- a/Mage.Server/src/main/java/mage/server/game/PlayerFactory.java +++ b/Mage.Server/src/main/java/mage/server/game/PlayerFactory.java @@ -61,7 +61,7 @@ public class PlayerFactory { if (playerTypeClass != null) { con = playerTypeClass.getConstructor(new Class[]{String.class, RangeOfInfluence.class, int.class}); player = (Player)con.newInstance(new Object[] {name, range, skill}); - logger.info("Player created: " + name + "-" + player.getId().toString()); + logger.debug("Player created: " + name + "-" + player.getId().toString()); return player; } else { diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java index 5453f6917b6..53832c72dc8 100644 --- a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java +++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java @@ -136,7 +136,7 @@ public class TournamentController { for (TournamentPlayer player: tournament.getPlayers()) { if (!player.getPlayer().isHuman()) { player.setJoined(); - logger.info("player " + player.getPlayer().getId() + " has joined tournament " + tournament.getId()); + logger.debug("player " + player.getPlayer().getId() + " has joined tournament " + tournament.getId()); ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has joined the tournament", MessageColor.BLACK); } } @@ -150,7 +150,7 @@ public class TournamentController { UserManager.getInstance().getUser(userId).addTournament(playerId, tournamentSession); TournamentPlayer player = tournament.getPlayer(playerId); player.setJoined(); - logger.info("player " + playerId + " has joined tournament " + tournament.getId()); + logger.debug("player " + playerId + " has joined tournament " + tournament.getId()); ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has joined the tournament", MessageColor.BLACK); checkStart(); } diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentFactory.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentFactory.java index 76ab8dd0d76..f000cdba9a6 100644 --- a/Mage.Server/src/main/java/mage/server/tournament/TournamentFactory.java +++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentFactory.java @@ -67,6 +67,7 @@ public class TournamentFactory { con = tournaments.get(tournamentType).getConstructor(new Class[]{TournamentOptions.class}); tournament = con.newInstance(new Object[] {options}); // transfer set information, create short info string for included sets + tournament.setTournamentType(tournamentTypes.get(tournamentType)); Map setInfo = new LinkedHashMap(); for (String setCode: options.getLimitedOptions().getSetCodes()) { tournament.getSets().add(Sets.findSet(setCode)); @@ -82,7 +83,7 @@ public class TournamentFactory { logger.fatal("TournamentFactory error ", ex); return null; } - logger.info("Tournament created: " + tournamentType); // + game.getId().toString()); + logger.debug("Tournament created: " + tournamentType); // + game.getId().toString()); return tournament; } diff --git a/Mage.Server/src/main/resources/log4j.properties b/Mage.Server/src/main/resources/log4j.properties index c4371dba194..0d434db2d8e 100644 --- a/Mage.Server/src/main/resources/log4j.properties +++ b/Mage.Server/src/main/resources/log4j.properties @@ -1,5 +1,6 @@ #default levels log4j.rootLogger=info, console, logfile +log4j.logger.com.j256.ormlite=warn #log4j.logger.mage.player.ai=TRACE #log4j.logger.mage.player.ai.ComputerPlayer6=debug #log4j.logger.mage.player.ai.ComputerPlayer7=debug diff --git a/Mage/src/mage/game/tournament/Tournament.java b/Mage/src/mage/game/tournament/Tournament.java index eac15b1d2aa..6c031fb1899 100644 --- a/Mage/src/mage/game/tournament/Tournament.java +++ b/Mage/src/mage/game/tournament/Tournament.java @@ -77,4 +77,7 @@ public interface Tournament { // tournament times Date getStartTime(); Date getEndTime(); + // tournament type + TournamentType getTournamentType(); + void setTournamentType(TournamentType tournamentType); } diff --git a/Mage/src/mage/game/tournament/TournamentImpl.java b/Mage/src/mage/game/tournament/TournamentImpl.java index deeb1ee48af..11caeeb1ead 100644 --- a/Mage/src/mage/game/tournament/TournamentImpl.java +++ b/Mage/src/mage/game/tournament/TournamentImpl.java @@ -52,6 +52,7 @@ public abstract class TournamentImpl implements Tournament { protected static Random rnd = new Random(); protected String matchName; protected TournamentOptions options; + protected TournamentType tournamentType; protected List sets = new ArrayList(); protected String setsInfoShort; @@ -332,4 +333,14 @@ public abstract class TournamentImpl implements Tournament { return new Date(endTime.getTime()); } + @Override + public TournamentType getTournamentType() { + return tournamentType; + } + + @Override + public void setTournamentType(TournamentType tournamentType) { + this.tournamentType = tournamentType; + } + } diff --git a/Mage/src/mage/game/tournament/TournamentOptions.java b/Mage/src/mage/game/tournament/TournamentOptions.java index d8838383f6d..9ff711b35a7 100644 --- a/Mage/src/mage/game/tournament/TournamentOptions.java +++ b/Mage/src/mage/game/tournament/TournamentOptions.java @@ -40,7 +40,7 @@ import mage.game.match.MatchOptions; public class TournamentOptions implements Serializable { protected String name; - protected String tournamentType; + protected String tournamentType;; protected List playerTypes = new ArrayList(); protected MatchOptions matchOptions = new MatchOptions("", "Two Player Duel"); protected LimitedOptions limitedOptions; diff --git a/Mage/src/mage/players/Player.java b/Mage/src/mage/players/Player.java index 80264d8e967..e119fb165ce 100644 --- a/Mage/src/mage/players/Player.java +++ b/Mage/src/mage/players/Player.java @@ -28,19 +28,32 @@ package mage.players; -import mage.constants.Outcome; -import mage.constants.RangeOfInfluence; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import mage.MageItem; import mage.MageObject; -import mage.abilities.*; +import mage.abilities.Abilities; +import mage.abilities.Ability; +import mage.abilities.ActivatedAbility; +import mage.abilities.Mode; +import mage.abilities.Modes; +import mage.abilities.SpellAbility; +import mage.abilities.TriggeredAbility; import mage.abilities.costs.mana.ManaCost; import mage.cards.Card; import mage.cards.Cards; import mage.cards.decks.Deck; import mage.choices.Choice; +import mage.constants.Outcome; +import mage.constants.RangeOfInfluence; import mage.counters.Counter; import mage.counters.Counters; import mage.game.Game; +import mage.game.Table; import mage.game.draft.Draft; import mage.game.match.Match; import mage.game.permanent.Permanent; @@ -52,9 +65,6 @@ import mage.target.TargetCard; import mage.target.common.TargetCardInLibrary; import mage.util.Copyable; -import java.io.Serializable; -import java.util.*; - /** * * @author BetaSteward_at_googlemail.com @@ -322,4 +332,11 @@ public interface Player extends MageItem, Copyable { void setReachedNextTurnAfterLeaving(boolean reachedNextTurnAfterLeaving); boolean hasReachedNextTurnAfterLeaving(); + /** + * Checks if a AI player is able to join a table + * i.e. Draft - bot can not enter a table with constructed format + * @param table + * @return + */ + boolean canJoinTable(Table table); } diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 5fe36f3b068..2ed37566658 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -91,6 +91,7 @@ import mage.filter.predicate.Predicates; import mage.filter.predicate.permanent.PermanentIdPredicate; import mage.game.ExileZone; import mage.game.Game; +import mage.game.Table; import mage.game.combat.CombatGroup; import mage.game.events.DamagePlayerEvent; import mage.game.events.DamagedPlayerEvent; @@ -2027,5 +2028,9 @@ public abstract class PlayerImpl> implements Player, Ser public boolean hasReachedNextTurnAfterLeaving() { return reachedNextTurnAfterLeaving; } - + + @Override + public boolean canJoinTable(Table table) { + return true; + } }