mirror of
https://github.com/magefree/mage.git
synced 2025-12-24 20:41:58 -08:00
Merge branch 'master' into Network_Upgrade
Conflicts: Mage.Client/src/main/java/mage/client/MageFrame.java Mage.Client/src/main/java/mage/client/chat/ChatPanel.java Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java Mage.Client/src/main/java/mage/client/dialog/UserRequestDialog.java Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java Mage.Client/src/main/java/mage/client/table/TablesPanel.java Mage.Common/src/mage/remote/SessionImpl.java Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java
This commit is contained in:
commit
38da157f8c
807 changed files with 13691 additions and 4039 deletions
|
|
@ -157,7 +157,7 @@ public class Session {
|
|||
if (user == null) {
|
||||
user = UserManager.getInstance().findUser("Admin");
|
||||
}
|
||||
user.setUserData(new UserData(UserGroup.ADMIN, 0, false, false, null));
|
||||
user.setUserData(new UserData(UserGroup.ADMIN, 0, false, false, false, null, "world.png"));
|
||||
if (!UserManager.getInstance().connectToSession(sessionId, user.getId())) {
|
||||
logger.info("Error connecting Admin!");
|
||||
}
|
||||
|
|
@ -169,7 +169,10 @@ public class Session {
|
|||
if (user != null) {
|
||||
UserData userData = user.getUserData();
|
||||
if (userData == null) {
|
||||
userData = new UserData(UserGroup.PLAYER, userDataView.getAvatarId(), userDataView.isShowAbilityPickerForced(), userDataView.allowRequestShowHandCards(), userDataView.getUserSkipPrioritySteps());
|
||||
userData = new UserData(UserGroup.PLAYER, userDataView.getAvatarId(),
|
||||
userDataView.isShowAbilityPickerForced(), userDataView.allowRequestShowHandCards(),
|
||||
userDataView.confirmEmptyManaPool(), userDataView.getUserSkipPrioritySteps(),
|
||||
userDataView.getFlagName());
|
||||
user.setUserData(userData);
|
||||
} else {
|
||||
if (userDataView.getAvatarId() == 51) { // Update special avatar if first avatar is selected
|
||||
|
|
@ -179,6 +182,7 @@ public class Session {
|
|||
userData.setShowAbilityPickerForced(userDataView.isShowAbilityPickerForced());
|
||||
userData.setAllowRequestShowHandCards(userDataView.allowRequestShowHandCards());
|
||||
userData.setUserSkipPrioritySteps(userDataView.getUserSkipPrioritySteps());
|
||||
userData.setConfirmEmptyManaPool(userDataView.confirmEmptyManaPool());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ import mage.constants.RangeOfInfluence;
|
|||
import mage.constants.TableState;
|
||||
import mage.game.Game;
|
||||
import mage.game.GameException;
|
||||
import mage.game.GameOptions;
|
||||
import mage.game.Seat;
|
||||
import mage.game.Table;
|
||||
import mage.game.draft.Draft;
|
||||
|
|
@ -570,7 +571,10 @@ public class TableController {
|
|||
try {
|
||||
match.startGame();
|
||||
table.initGame();
|
||||
GameManager.getInstance().createGameSession(match.getGame(), userPlayerMap, table.getId(), choosingPlayerId);
|
||||
GameOptions gameOptions = new GameOptions();
|
||||
gameOptions.rollbackTurnsAllowed = match.getOptions().isRollbackTurnsAllowed();
|
||||
match.getGame().setGameOptions(gameOptions);
|
||||
GameManager.getInstance().createGameSession(match.getGame(), userPlayerMap, table.getId(), choosingPlayerId, gameOptions);
|
||||
String creator = null;
|
||||
StringBuilder opponent = new StringBuilder();
|
||||
for (Entry<UUID, UUID> entry: userPlayerMap.entrySet()) { // no AI players
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ import mage.constants.PlayerAction;
|
|||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.GameException;
|
||||
import mage.game.GameOptions;
|
||||
import mage.game.Table;
|
||||
import mage.game.events.Listener;
|
||||
import mage.game.events.PlayerQueryEvent;
|
||||
|
|
@ -118,15 +119,23 @@ public class GameController implements GameCallback {
|
|||
private UUID choosingPlayerId;
|
||||
private Future<?> gameFuture;
|
||||
private boolean useTimeout = true;
|
||||
private GameOptions gameOptions;
|
||||
|
||||
private UUID userReqestingRollback;
|
||||
private int turnsToRollback;
|
||||
private int requestsOpen;
|
||||
|
||||
|
||||
public GameController(Game game, ConcurrentHashMap<UUID, UUID> userPlayerMap, UUID tableId, UUID choosingPlayerId) {
|
||||
public GameController(Game game, ConcurrentHashMap<UUID, UUID> userPlayerMap, UUID tableId, UUID choosingPlayerId, GameOptions gameOptions) {
|
||||
gameSessionId = UUID.randomUUID();
|
||||
this.userPlayerMap = userPlayerMap;
|
||||
chatId = ChatManager.getInstance().createChatSession("Game " + game.getId());
|
||||
this.userReqestingRollback = null;
|
||||
this.game = game;
|
||||
this.game.setSaveGame(ConfigSettings.getInstance().isSaveGameActivated());
|
||||
this.tableId = tableId;
|
||||
this.choosingPlayerId = choosingPlayerId;
|
||||
this.gameOptions = gameOptions;
|
||||
for (Player player: game.getPlayers().values()) {
|
||||
if (!player.isHuman()) {
|
||||
useTimeout = false; // no timeout for AI players because of beeing idle
|
||||
|
|
@ -477,14 +486,70 @@ public class GameController implements GameCallback {
|
|||
case UNDO:
|
||||
game.undo(getPlayerId(userId));
|
||||
break;
|
||||
case ROLLBACK_TURNS: // basic request of a player to rollback
|
||||
if (data instanceof Integer) {
|
||||
turnsToRollback = (Integer) data;
|
||||
if (game.canRollbackTurns(turnsToRollback)) {
|
||||
requestsOpen = requestPermissionToRollback(userId, turnsToRollback);
|
||||
if (requestsOpen == 0) {
|
||||
game.rollbackTurns(turnsToRollback);
|
||||
turnsToRollback = -1;
|
||||
requestsOpen = -1;
|
||||
} else {
|
||||
userReqestingRollback = userId;
|
||||
}
|
||||
} else {
|
||||
UUID playerId = getPlayerId(userId);
|
||||
if (playerId != null) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
game.informPlayer(player, "That turn is not available for rollback.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ADD_PERMISSION_TO_ROLLBACK_TURN:
|
||||
if (userReqestingRollback != null && requestsOpen > 0 && !userId.equals(userReqestingRollback)) {
|
||||
requestsOpen--;
|
||||
if (requestsOpen == 0) {
|
||||
game.rollbackTurns(turnsToRollback);
|
||||
turnsToRollback = -1;
|
||||
userReqestingRollback = null;
|
||||
requestsOpen = -1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DENY_PERMISSON_TO_ROLLBACK_TURN: // one player has denied - so cancel the request
|
||||
{
|
||||
UUID playerId = getPlayerId(userId);
|
||||
if (playerId != null) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
if (userReqestingRollback != null && requestsOpen > 0 && !userId.equals(userReqestingRollback)) {
|
||||
turnsToRollback = -1;
|
||||
userReqestingRollback = null;
|
||||
requestsOpen = -1;
|
||||
game.informPlayers("Rollback request denied by " + player.getLogName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CONCEDE:
|
||||
game.concede(getPlayerId(userId));
|
||||
break;
|
||||
case MANA_AUTO_PAYMENT_OFF:
|
||||
game.setManaPoolMode(getPlayerId(userId), false);
|
||||
game.setManaPaymentMode(getPlayerId(userId), false);
|
||||
break;
|
||||
case MANA_AUTO_PAYMENT_ON:
|
||||
game.setManaPoolMode(getPlayerId(userId), true);
|
||||
game.setManaPaymentMode(getPlayerId(userId), true);
|
||||
break;
|
||||
case MANA_AUTO_PAYMENT_RESTRICTED_OFF:
|
||||
game.setManaPaymentModeRestricted(getPlayerId(userId), false);
|
||||
break;
|
||||
case MANA_AUTO_PAYMENT_RESTRICTED_ON:
|
||||
game.setManaPaymentModeRestricted(getPlayerId(userId), true);
|
||||
break;
|
||||
case ADD_PERMISSION_TO_SEE_HAND_CARDS:
|
||||
if (data instanceof UUID) {
|
||||
|
|
@ -516,6 +581,23 @@ public class GameController implements GameCallback {
|
|||
}
|
||||
}
|
||||
|
||||
private int requestPermissionToRollback(UUID userIdRequester, int numberTurns) {
|
||||
int requests = 0;
|
||||
for (Player player: game.getState().getPlayers().values()) {
|
||||
User requestedUser = getUserByPlayerId(player.getId());
|
||||
if (player.isInGame() && player.isHuman() &&
|
||||
requestedUser != null &&
|
||||
!requestedUser.getId().equals(userIdRequester)) {
|
||||
requests++;
|
||||
GameSessionPlayer gameSession = gameSessions.get(player.getId());
|
||||
if (gameSession != null) {
|
||||
gameSession.requestPermissionToRollbackTurn(userIdRequester, numberTurns);
|
||||
}
|
||||
}
|
||||
}
|
||||
return requests;
|
||||
}
|
||||
|
||||
private void requestPermissionToSeeHandCards(UUID userIdRequester, UUID userIdGranter) {
|
||||
Player grantingPlayer = game.getPlayer(userIdGranter);
|
||||
if (grantingPlayer != null) {
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import mage.cards.decks.DeckCardLists;
|
|||
import mage.constants.ManaType;
|
||||
import mage.constants.PlayerAction;
|
||||
import mage.game.Game;
|
||||
import mage.game.GameOptions;
|
||||
import mage.view.GameView;
|
||||
|
||||
/**
|
||||
|
|
@ -51,8 +52,8 @@ public class GameManager {
|
|||
|
||||
private final ConcurrentHashMap<UUID, GameController> gameControllers = new ConcurrentHashMap<>();
|
||||
|
||||
public UUID createGameSession(Game game, ConcurrentHashMap<UUID, UUID> userPlayerMap, UUID tableId, UUID choosingPlayerId) {
|
||||
GameController gameController = new GameController(game, userPlayerMap, tableId, choosingPlayerId);
|
||||
public UUID createGameSession(Game game, ConcurrentHashMap<UUID, UUID> userPlayerMap, UUID tableId, UUID choosingPlayerId, GameOptions gameOptions) {
|
||||
GameController gameController = new GameController(game, userPlayerMap, tableId, choosingPlayerId, gameOptions);
|
||||
gameControllers.put(game.getId(), gameController);
|
||||
return gameController.getSessionId();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,6 +170,34 @@ public class GameSessionPlayer extends GameSessionWatcher {
|
|||
}
|
||||
}
|
||||
|
||||
public void requestPermissionToRollbackTurn(UUID requestingUserId, int numberTurns) {
|
||||
if (!killed) {
|
||||
User requestingUser = UserManager.getInstance().getUser(requestingUserId);
|
||||
User requestedUser = UserManager.getInstance().getUser(userId);
|
||||
if (requestedUser != null && requestingUser != null) {
|
||||
String message;
|
||||
switch(numberTurns) {
|
||||
case 0:
|
||||
message = "Allow rollback to the start of the current turn?";
|
||||
break;
|
||||
case 1:
|
||||
message = "Allow rollback to the start of the previous turn?";
|
||||
break;
|
||||
default:
|
||||
message = "Allow to rollback "+numberTurns+ " turns?";
|
||||
}
|
||||
UserRequestMessage userRequestMessage = new UserRequestMessage(
|
||||
"Request by " + requestedUser.getName(), message
|
||||
, PlayerAction.REQUEST_PERMISSION_TO_ROLLBACK_TURN);
|
||||
userRequestMessage.setRelatedUser(requestingUserId, requestingUser.getName());
|
||||
userRequestMessage.setGameId(game.getId());
|
||||
userRequestMessage.setButton1("Accept", PlayerAction.ADD_PERMISSION_TO_ROLLBACK_TURN);
|
||||
userRequestMessage.setButton2("Deny", PlayerAction.DENY_PERMISSON_TO_ROLLBACK_TURN);
|
||||
requestedUser.fireCallback(new ClientCallback("userRequestDialog", game.getId(), userRequestMessage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void requestPermissionToSeeHandCards(UUID watcherId) {
|
||||
if (!killed) {
|
||||
User watcher = UserManager.getInstance().getUser(watcherId);
|
||||
|
|
@ -237,7 +265,7 @@ public class GameSessionPlayer extends GameSessionWatcher {
|
|||
Map<String, SimpleCardsView> handCards = new HashMap<>();
|
||||
for (UUID controlledPlayerId : player.getPlayersUnderYourControl()) {
|
||||
Player opponent = game.getPlayer(controlledPlayerId);
|
||||
handCards.put(opponent.getName(), new SimpleCardsView(opponent.getHand().getCards(game)));
|
||||
handCards.put(opponent.getName(), new SimpleCardsView(opponent.getHand().getCards(game), true));
|
||||
}
|
||||
gameView.setOpponentHands(handCards);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ public class GameSessionWatcher {
|
|||
Map<String, SimpleCardsView> handCards = new HashMap<>();
|
||||
for (Player player: game.getPlayers().values()) {
|
||||
if (player.hasUserPermissionToSeeHand(userId)) {
|
||||
handCards.put(player.getName(), new SimpleCardsView(player.getHand().getCards(game)));
|
||||
handCards.put(player.getName(), new SimpleCardsView(player.getHand().getCards(game), true));
|
||||
gameView.setWatchedHands(handCards);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ import org.apache.log4j.Logger;
|
|||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
* @param <T>
|
||||
*/
|
||||
public class GameWorker<T> implements Callable {
|
||||
|
||||
|
|
|
|||
|
|
@ -123,10 +123,17 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable {
|
|||
for (User user : UserManager.getInstance().getUsers()) {
|
||||
Session session = SessionManager.getInstance().getSession(user.getSessionId());
|
||||
try {
|
||||
<<<<<<< HEAD
|
||||
users.add(new UsersView(user.getName(), user.getInfo(), user.getGameInfo(), session.getPingInfo()));
|
||||
} catch (Exception ex) {
|
||||
logger.fatal("User update exception: " + user.getName() + " - " + ex.toString(), ex);
|
||||
users.add(new UsersView(user.getName(), user.getInfo(), "[exception]", session.getPingInfo()));
|
||||
=======
|
||||
users.add(new UsersView(user.getUserData().getFlagName(), user.getName(), user.getInfo(), user.getGameInfo(), user.getPingInfo()));
|
||||
} catch (Exception ex) {
|
||||
logger.fatal("User update exception: " + user.getName() + " - " + ex.toString(), ex);
|
||||
users.add(new UsersView(user.getUserData().getFlagName(), user.getName(), user.getInfo(), "[exception]", user.getPingInfo()));
|
||||
>>>>>>> master
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue