From afb86d2a0e26e9a82aacef10a55bb7a5d2af4cac Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Fri, 27 Jan 2012 11:28:48 +0000 Subject: [PATCH] Rewarding winning games in league. --- .../lotro/collection/CollectionsManager.java | 50 ++++++++-- .../com/gempukku/lotro/hall/HallServer.java | 16 +++- .../gempukku/lotro/league/LeagueService.java | 92 +++++++++++++++---- .../gempukku/lotro/server/AdminResource.java | 23 ----- .../lotro/server/CollectionResource.java | 22 ----- .../lotro/server/DeliveryServiceProvider.java | 39 -------- .../gempukku/lotro/server/ServerProvider.java | 19 +++- 7 files changed, 148 insertions(+), 113 deletions(-) delete mode 100644 gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/DeliveryServiceProvider.java diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionsManager.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionsManager.java index 4c389d10e..eaebf7d3a 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionsManager.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionsManager.java @@ -20,11 +20,13 @@ public class CollectionsManager { private PlayerDAO _playerDAO; private CollectionDAO _collectionDAO; private LeagueService _leagueService; + private DeliveryService _deliveryService; - public CollectionsManager(PlayerDAO playerDAO, CollectionDAO collectionDAO, LeagueService leagueService) { + public CollectionsManager(PlayerDAO playerDAO, CollectionDAO collectionDAO, LeagueService leagueService, DeliveryService deliveryService) { _playerDAO = playerDAO; _collectionDAO = collectionDAO; _leagueService = leagueService; + _deliveryService = deliveryService; } public void clearDBCache() { @@ -71,8 +73,10 @@ public class CollectionsManager { return null; MutableCardCollection mutableCardCollection = new DefaultCardCollection(playerCollection); final CardCollection packContents = mutableCardCollection.openPack(packId, selection, packsStorage); - if (packContents != null) + if (packContents != null) { _collectionDAO.setCollectionForPlayer(player.getId(), collectionType, mutableCardCollection); + addPackage(player, collectionType, packContents); + } return packContents; } finally { _readWriteLock.writeLock().unlock(); @@ -85,16 +89,24 @@ public class CollectionsManager { final CardCollection playerCollection = getPlayerCollection(player, collectionType); if (playerCollection != null) { MutableCardCollection mutableCardCollection = new DefaultCardCollection(playerCollection); - for (Map.Entry item : items.entrySet()) + MutableCardCollection addedCards = new DefaultCardCollection(); + for (Map.Entry item : items.entrySet()) { mutableCardCollection.addItem(item.getKey(), item.getValue()); + addedCards.addItem(item.getKey(), item.getValue()); + } _collectionDAO.setCollectionForPlayer(player.getId(), collectionType, mutableCardCollection); + addPackage(player, collectionType, addedCards); } } finally { _readWriteLock.writeLock().unlock(); } } + public void addItemsToPlayerCollection(String player, String collectionType, Map items) { + addItemsToPlayerCollection(_playerDAO.getPlayer(player), collectionType, items); + } + public void moveCollectionToCollection(Player player, String collectionFrom, String collectionTo) { _readWriteLock.writeLock().lock(); try { @@ -107,6 +119,7 @@ public class CollectionsManager { mutableCardCollection.addItem(item.getKey(), item.getValue()); _collectionDAO.setCollectionForPlayer(player.getId(), collectionTo, mutableCardCollection); + addPackage(player, collectionTo, oldCollection); } } } finally { @@ -132,12 +145,18 @@ public class CollectionsManager { if (!removeItems(playerTwoCollection, itemsOfPlayerTwo)) return false; - addItems(playerOneCollection, itemsOfPlayerTwo); - addItems(playerTwoCollection, itemsOfPlayerOne); + MutableCardCollection addedCardsPlayerOne = new DefaultCardCollection(); + MutableCardCollection addedCardsPlayerTwo = new DefaultCardCollection(); + + addItems(playerOneCollection, addedCardsPlayerOne, itemsOfPlayerTwo); + addItems(playerTwoCollection, addedCardsPlayerTwo, itemsOfPlayerOne); _collectionDAO.setCollectionForPlayer(playerOne.getId(), collectionType, playerOneCollection); _collectionDAO.setCollectionForPlayer(playerTwo.getId(), collectionType, playerTwoCollection); + addPackage(playerOne, collectionType, addedCardsPlayerOne); + addPackage(playerTwo, collectionType, addedCardsPlayerTwo); + return true; } finally { _readWriteLock.writeLock().unlock(); @@ -151,8 +170,25 @@ public class CollectionsManager { return true; } - private void addItems(MutableCardCollection collection, Map items) { - for (Map.Entry item : items.entrySet()) + private void addItems(MutableCardCollection collection, MutableCardCollection addedCards, Map items) { + for (Map.Entry item : items.entrySet()) { collection.addItem(item.getKey(), item.getValue()); + addedCards.addItem(item.getKey(), item.getValue()); + } + } + + private void addPackage(Player player, String collectionType, CardCollection cards) { + _deliveryService.addPackage(player, getPackageNameByCollectionType(collectionType), cards); + } + + private String getPackageNameByCollectionType(String collectionType) { + String packageName; + if (collectionType.equals("permanent")) + packageName = "My cards"; + else { + League league = _leagueService.getLeagueByType(collectionType); + packageName = league.getName(); + } + return packageName; } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java index 47bd2eebb..80b6f59d9 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java @@ -9,6 +9,7 @@ import com.gempukku.lotro.db.vo.LeagueSerie; import com.gempukku.lotro.game.*; import com.gempukku.lotro.game.formats.*; import com.gempukku.lotro.league.LeagueService; +import com.gempukku.lotro.logic.timing.GameResultListener; import com.gempukku.lotro.logic.vo.LotroDeck; import java.util.*; @@ -298,11 +299,20 @@ public class HallServer extends AbstractServer { private void createGame(String tableId, AwaitingTable awaitingTable) { Set players = awaitingTable.getPlayers(); LotroGameParticipant[] participants = players.toArray(new LotroGameParticipant[players.size()]); - League league = awaitingTable.getLeague(); + final League league = awaitingTable.getLeague(); + final LeagueSerie leagueSerie = awaitingTable.getLeagueSerie(); String gameId = _lotroServer.createNewGame(awaitingTable.getLotroFormat(), participants, league != null); LotroGameMediator lotroGameMediator = _lotroServer.getGameById(gameId); - if (league != null) - _leagueService.leagueGameStarting(league, awaitingTable.getLeagueSerie(), lotroGameMediator); + if (league != null) { + lotroGameMediator.addGameResultListener( + new GameResultListener() { + @Override + public void gameFinished(String winnerPlayerId, String winReason, Map loserPlayerIdsWithReasons) { + final CardCollection winnerPrize = _leagueService.reportLeagueGameResult(league, leagueSerie, winnerPlayerId, loserPlayerIdsWithReasons.keySet().iterator().next()); + _collectionsManager.addItemsToPlayerCollection(winnerPlayerId, "permanent", winnerPrize.getAll()); + } + }); + } lotroGameMediator.startGame(); _runningTables.put(tableId, new RunningTable(gameId, awaitingTable.getLotroFormat().getName(), getTournamentName(awaitingTable))); _awaitingTables.remove(tableId); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java index 400e8a2f9..c6eb9cf4c 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java @@ -7,8 +7,9 @@ import com.gempukku.lotro.db.LeagueSerieDAO; import com.gempukku.lotro.db.vo.League; import com.gempukku.lotro.db.vo.LeagueMatch; import com.gempukku.lotro.db.vo.LeagueSerie; +import com.gempukku.lotro.game.CardCollection; +import com.gempukku.lotro.game.DefaultCardCollection; import com.gempukku.lotro.game.LotroGameMediator; -import com.gempukku.lotro.logic.timing.GameResultListener; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -28,11 +29,57 @@ public class LeagueService { private Map> _leagueStandings = new ConcurrentHashMap>(); private Map> _leagueSerieStandings = new ConcurrentHashMap>(); + private Map> _winnerPromos = new HashMap>(); + public LeagueService(LeagueDAO leagueDao, LeagueSerieDAO leagueSeasonDao, LeaguePointsDAO leaguePointsDao, LeagueMatchDAO leagueMatchDao) { _leagueDao = leagueDao; _leagueSeasonDao = leagueSeasonDao; _leaguePointsDao = leaguePointsDao; _leagueMatchDao = leagueMatchDao; + + List fotrPromos = new ArrayList(); + fotrPromos.add("0_1"); + fotrPromos.add("0_2"); + fotrPromos.add("0_3"); + fotrPromos.add("0_4"); + fotrPromos.add("0_5"); + fotrPromos.add("0_6"); + fotrPromos.add("0_7"); + fotrPromos.add("0_8"); + fotrPromos.add("0_9"); + fotrPromos.add("0_10"); + fotrPromos.add("0_11"); + fotrPromos.add("0_12"); + fotrPromos.add("0_13"); + fotrPromos.add("0_14"); + fotrPromos.add("0_15"); + fotrPromos.add("0_34"); + fotrPromos.add("0_36"); + fotrPromos.add("0_37"); + fotrPromos.add("0_41"); + fotrPromos.add("0_42"); + fotrPromos.add("0_43"); + _winnerPromos.put("fotr_block", fotrPromos); + + List tttPromos = new ArrayList(); + tttPromos.add("0_16"); + tttPromos.add("0_17"); + tttPromos.add("0_18"); + tttPromos.add("0_19"); + tttPromos.add("0_21"); + tttPromos.add("0_22"); + tttPromos.add("0_30"); + tttPromos.add("0_32"); + tttPromos.add("0_33"); + tttPromos.add("0_35"); + tttPromos.add("0_38"); + tttPromos.add("0_39"); + tttPromos.add("0_40"); + tttPromos.add("0_44"); + tttPromos.add("0_45"); + tttPromos.add("0_46"); + tttPromos.add("0_47"); + _winnerPromos.put("ttt_block", tttPromos); } public Set getActiveLeagues() { @@ -53,24 +100,33 @@ public class LeagueService { return _leagueSeasonDao.getSerieForLeague(league, startDay); } - public void leagueGameStarting(final League league, final LeagueSerie serie, LotroGameMediator gameMediator) { - if (isRanked(league, serie, gameMediator)) { - gameMediator.addGameResultListener( - new GameResultListener() { - @Override - public void gameFinished(String winnerPlayerId, String winReason, Map loserPlayerIdsWithReasons) { - String loser = loserPlayerIdsWithReasons.keySet().iterator().next(); - _leagueMatchDao.addPlayedMatch(league, serie, winnerPlayerId, loser); - _leaguePointsDao.addPoints(league, serie, winnerPlayerId, 2); - _leaguePointsDao.addPoints(league, serie, loser, 1); - _leagueStandings.remove(league); - _leagueSerieStandings.remove(serie); - } - }); - gameMediator.sendMessageToPlayers("This is a ranked game in " + league.getName()); - } else { - gameMediator.sendMessageToPlayers("This is NOT a ranked game in " + league.getName()); + public CardCollection reportLeagueGameResult(League league, LeagueSerie serie, String winner, String loser) { + _leagueMatchDao.addPlayedMatch(league, serie, winner, loser); + _leaguePointsDao.addPoints(league, serie, winner, 2); + _leaguePointsDao.addPoints(league, serie, loser, 1); + _leagueStandings.remove(league); + _leagueSerieStandings.remove(serie); + + int count = 0; + Collection playerMatchesPlayedOn = _leagueMatchDao.getPlayerMatchesPlayedOn(league, serie, winner); + for (LeagueMatch leagueMatch : playerMatchesPlayedOn) { + if (leagueMatch.getWinner().equals(winner)) + count++; } + + DefaultCardCollection winnerPrize = new DefaultCardCollection(); + winnerPrize.addItem("(S)Booster Choice", 1); + if (count == 2 || count == 4) { + winnerPrize.addItem(getRandomPromoForBlock(serie.getFormat()), 1); + } else if (count == 6 || count == 8 || count == 10) { + winnerPrize.addItem(getRandomPromoForBlock(serie.getFormat()) + "*", 1); + } + return winnerPrize; + } + + private String getRandomPromoForBlock(String format) { + final List promos = _winnerPromos.get(format); + return promos.get(new Random().nextInt(promos.size())); } public List getLeagueStandings(League league) { diff --git a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/AdminResource.java b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/AdminResource.java index 76631e834..8a0965616 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/AdminResource.java +++ b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/AdminResource.java @@ -141,7 +141,6 @@ public class AdminResource extends AbstractResource { for (Map.Entry playerCollection : playerCollections.entrySet()) { Player player = playerCollection.getKey(); _collectionsManager.addItemsToPlayerCollection(player, leagueType, productItems); - _deliveryService.addPackage(player, league.getName(), items); } return "OK"; @@ -156,8 +155,6 @@ public class AdminResource extends AbstractResource { @Context HttpServletRequest request) throws Exception { validateAdmin(request); - String packageName = getPackageNameByCollectionType(collectionType); - DefaultCardCollection items = new DefaultCardCollection(); Map productItems = getProductItems(product); @@ -170,7 +167,6 @@ public class AdminResource extends AbstractResource { Player player = _playerDao.getPlayer(playerName); _collectionsManager.addItemsToPlayerCollection(player, collectionType, productItems); - _deliveryService.addPackage(player, packageName, items); } return "OK"; @@ -184,35 +180,16 @@ public class AdminResource extends AbstractResource { @Context HttpServletRequest request) throws Exception { validateAdmin(request); - String toCollectionName = getPackageNameByCollectionType(collectionTo); - Map playerCollections = _collectionsManager.getPlayersCollection(collectionFrom); for (Map.Entry playerCollection : playerCollections.entrySet()) { Player player = playerCollection.getKey(); - CardCollection oldCollection = playerCollection.getValue(); - _collectionsManager.moveCollectionToCollection(player, collectionFrom, collectionTo); - - _deliveryService.addPackage(player, toCollectionName, oldCollection); } return "OK"; } - private String getPackageNameByCollectionType(String collectionType) { - String packageName; - if (collectionType.equals("permanent")) - packageName = "My cards"; - else { - League league = getLeagueByType(collectionType); - if (league == null) - throw new WebApplicationException(Response.Status.NOT_FOUND); - packageName = league.getName(); - } - return packageName; - } - private List getItems(String values) { List result = new LinkedList(); for (String pack : values.split("\n")) { diff --git a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/CollectionResource.java b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/CollectionResource.java index 0a56f7459..218fbcea6 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/CollectionResource.java +++ b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/CollectionResource.java @@ -174,8 +174,6 @@ public class CollectionResource extends AbstractResource { if (packContents == null) sendError(Response.Status.NOT_FOUND); - _deliveryService.addPackage(resourceOwner, getPackageNameByCollectionType(collectionType), packContents); - DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); @@ -206,24 +204,4 @@ public class CollectionResource extends AbstractResource { return doc; } - - private String getPackageNameByCollectionType(String collectionType) { - String packageName; - if (collectionType.equals("permanent")) - packageName = "My cards"; - else { - League league = getLeagueByType(collectionType); - if (league == null) - throw new WebApplicationException(Response.Status.NOT_FOUND); - packageName = league.getName(); - } - return packageName; - } - - private League getLeagueByType(String leagueType) { - for (League league : _leagueDao.getActiveLeagues()) - if (league.getType().equals(leagueType)) - return league; - return null; - } } diff --git a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/DeliveryServiceProvider.java b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/DeliveryServiceProvider.java deleted file mode 100644 index 13fa102bf..000000000 --- a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/DeliveryServiceProvider.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gempukku.lotro.server; - -import com.gempukku.lotro.collection.DeliveryService; -import com.sun.jersey.core.spi.component.ComponentContext; -import com.sun.jersey.core.spi.component.ComponentScope; -import com.sun.jersey.spi.inject.Injectable; -import com.sun.jersey.spi.inject.InjectableProvider; - -import javax.ws.rs.core.Context; -import javax.ws.rs.ext.Provider; -import java.lang.reflect.Type; - -@Provider -public class DeliveryServiceProvider implements Injectable, InjectableProvider { - private DeliveryService _deliveryService; - - @Override - public Injectable getInjectable(ComponentContext ic, Context context, Type type) { - if (type.equals(DeliveryService.class)) - return this; - return null; - } - - @Override - public ComponentScope getScope() { - return ComponentScope.Singleton; - } - - private DeliveryService createDeliveryService() { - return new DeliveryService(); - } - - @Override - public synchronized DeliveryService getValue() { - if (_deliveryService == null) - _deliveryService = createDeliveryService(); - return _deliveryService; - } -} diff --git a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerProvider.java b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerProvider.java index 46de688d6..543cc678f 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerProvider.java +++ b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/ServerProvider.java @@ -2,6 +2,7 @@ package com.gempukku.lotro.server; import com.gempukku.lotro.chat.ChatServer; import com.gempukku.lotro.collection.CollectionsManager; +import com.gempukku.lotro.collection.DeliveryService; import com.gempukku.lotro.db.*; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import com.gempukku.lotro.game.LotroServer; @@ -25,6 +26,7 @@ public class ServerProvider implements InjectableProvider { private Injectable _lotroServerInjectable; private Injectable _tradeServerInjectable; private Injectable _collectionsManagerInjectable; + private Injectable _deliveryServiceInjectable; @Context private PlayerDAO _playerDao; @@ -59,6 +61,8 @@ public class ServerProvider implements InjectableProvider { return getCollectionsManagerInjectable(); if (type.equals(TradeServer.class)) return getTradeServerInjectable(); + if (type.equals(DeliveryService.class)) + return getDeliveryServiceInjectable(); return null; } @@ -75,6 +79,19 @@ public class ServerProvider implements InjectableProvider { return _leagueServerInjectable; } + private synchronized Injectable getDeliveryServiceInjectable() { + if (_leagueServerInjectable == null) { + final DeliveryService deliveryService = new DeliveryService(); + _deliveryServiceInjectable = new Injectable() { + @Override + public DeliveryService getValue() { + return deliveryService; + } + }; + } + return _deliveryServiceInjectable; + } + private synchronized Injectable getHallServerInjectable() { if (_hallServerInjectable == null) { final HallServer hallServer = new HallServer(getLotroServerInjectable().getValue(), getChatServerInjectable().getValue(), getLeagueServiceInjectable().getValue(), _library, getCollectionsManagerInjectable().getValue(), false); @@ -133,7 +150,7 @@ public class ServerProvider implements InjectableProvider { private synchronized Injectable getCollectionsManagerInjectable() { if (_collectionsManagerInjectable == null) { - final CollectionsManager collectionsManager = new CollectionsManager(_playerDao, _collectionDao, getLeagueServiceInjectable().getValue()); + final CollectionsManager collectionsManager = new CollectionsManager(_playerDao, _collectionDao, getLeagueServiceInjectable().getValue(), getDeliveryServiceInjectable().getValue()); _collectionsManagerInjectable = new Injectable() { @Override public CollectionsManager getValue() {