From 130fa8544f56214b138432a18d9fbc947beffc2a Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Tue, 20 Sep 2011 23:57:10 +0000 Subject: [PATCH] Concession and real deck size is always used to sent to client, not the adventure deck sometimes. --- .../com/gempukku/lotro/game/state/GameState.java | 4 ++-- .../lotro/logic/timing/DefaultLotroGame.java | 16 +++++++++------- .../gempukku/lotro/game/LotroGameMediator.java | 10 ++++++++++ .../gempukku/lotro/server/ServerResource.java | 16 ++++++++++++++++ .../src/main/webapp/js/communication.js | 11 +++++++++++ .../gemp-lotr-web/src/main/webapp/js/gameUi.js | 9 ++++++++- 6 files changed, 56 insertions(+), 10 deletions(-) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index f55ac5d3f..ca648df5c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -285,7 +285,7 @@ public class GameState { for (GameStateListener listener : getPrivateGameStateListeners(card)) listener.cardRemoved(card); - if (zone == Zone.DECK || zone == Zone.HAND || zone == Zone.DISCARD || zone == Zone.DEAD) + if ((zone == Zone.DECK && card.getBlueprint().getCardType() != CardType.SITE) || zone == Zone.HAND || zone == Zone.DISCARD || zone == Zone.DEAD) for (GameStateListener listener : getAllGameStateListeners()) listener.setZoneSize(card.getOwner(), zone, zoneCards.size()); } @@ -306,7 +306,7 @@ public class GameState { else if (isZonePrivate(zone)) for (GameStateListener listener : getPrivateGameStateListeners(card)) listener.cardCreated(card); - if (zone == Zone.DECK || zone == Zone.HAND || zone == Zone.DISCARD || zone == Zone.DEAD) + if ((zone == Zone.DECK && card.getBlueprint().getCardType() != CardType.SITE) || zone == Zone.HAND || zone == Zone.DISCARD || zone == Zone.DEAD) for (GameStateListener listener : getAllGameStateListeners()) listener.setZoneSize(card.getOwner(), zone, zoneCards.size()); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java index 9f947c470..5e4a03914 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java @@ -105,14 +105,16 @@ public class DefaultLotroGame implements LotroGame { @Override public void playerLost(String playerId, String reason) { - _losers.put(playerId, reason); - if (_gameState != null) - _gameState.sendMessage(playerId + " lost due to: " + reason); + if (_losers.get(playerId) == null) { + _losers.put(playerId, reason); + if (_gameState != null) + _gameState.sendMessage(playerId + " lost due to: " + reason); - if (_losers.size() + 1 == _allPlayers.size()) { - List allPlayers = new LinkedList(_allPlayers); - allPlayers.removeAll(_losers.keySet()); - playerWon(allPlayers.get(0), "Last remaining player in game"); + if (_losers.size() + 1 == _allPlayers.size()) { + List allPlayers = new LinkedList(_allPlayers); + allPlayers.removeAll(_losers.keySet()); + playerWon(allPlayers.get(0), "Last remaining player in game"); + } } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java index 66e047d11..f9cf2c12f 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java @@ -140,6 +140,16 @@ public class LotroGameMediator { } } + public void concede(String playerId) { + _writeLock.lock(); + try { + if (_lotroGame.getWinnerPlayerId() == null) + _lotroGame.playerLost(playerId, "Concession"); + } finally { + _writeLock.unlock(); + } + } + public void playerAnswered(String lotroGameParticipant, int decisionId, String answer) { _writeLock.lock(); try { diff --git a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerResource.java b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerResource.java index cf48ab0ea..2b5864157 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerResource.java +++ b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerResource.java @@ -148,6 +148,22 @@ public class ServerResource { return gameMediator.produceCardInfo(participantId, cardId); } + @Path("/game/{gameId}/concede") + @POST + public void concede( + @PathParam("gameId") String gameId, + @FormParam("participantId") String participantId, + @Context HttpServletRequest request) throws ParserConfigurationException { + if (!_test) + participantId = getLoggedUser(request); + + LotroGameMediator gameMediator = _lotroServer.getGameById(gameId); + if (gameMediator == null) + sendError(Response.Status.NOT_FOUND); + + gameMediator.concede(participantId); + } + @Path("/game/{gameId}") @POST @Produces(MediaType.APPLICATION_XML) diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/communication.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/communication.js index f5b7f1934..5a68dabe3 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/communication.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/communication.js @@ -55,6 +55,17 @@ var GempLotrCommunication = Class.extend({ dataType: "xml" }); }, + concede: function() { + $.ajax({ + type: "POST", + url: this.url + "/game/" + getUrlParam("gameId") + "/concede", + cache: false, + data: { + participantId: getUrlParam("participantId")}, + error: this.failure, + dataType: "xml" + }); + }, getDeck: function(deckType, callback) { $.ajax({ type: "GET", diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js index baaced061..b258dfbe1 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js @@ -184,7 +184,8 @@ var GempLotrGameUI = Class.extend({ addBottomLeftTabPane: function() { var that = this; - this.tabPane = $("").tabs(); + this.tabPane = $("").tabs(); $("#main").append(this.tabPane); @@ -217,6 +218,12 @@ var GempLotrGameUI = Class.extend({ }); this.chatBox = new ChatBoxUI("Game" + getUrlParam("gameId"), $("#chatBox"), this.communication.url); + + $("#gameOptionsBox").append(""); + $("#concedeGame").button().click( + function() { + that.communication.concede(); + }); }, clickCardFunction: function(event) {