From e3f76845f2a0a7d4c6760575e6ad654b5814a0bd Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Tue, 24 Apr 2012 23:02:56 +0000 Subject: [PATCH] New leagues management and prizes. --- .../lotro/cards/packs/RarityReader.java | 6 - .../java/com/gempukku/lotro/db/LeagueDAO.java | 11 +- .../lotro/league/ConstructedLeagueData.java | 2 +- .../gempukku/lotro/league/LeaguePrizes.java | 188 +---------------- .../lotro/league/NewLeaguePrizes.java | 115 +++++++++++ .../lotro/league/NewSealedLeagueData.java | 99 +++++++++ .../lotro/league/OldLeaguePrizes.java | 191 ++++++++++++++++++ .../lotro/league/SealedLeagueData.java | 2 +- .../src/main/resources/packs.txt | 3 +- .../lotro/league/LeaguePrizesTest.java | 4 +- .../lotro/server/AbstractResource.java | 2 +- .../gempukku/lotro/server/AdminResource.java | 37 +++- .../server/provider/PacksStorageProvider.java | 1 + .../gemp-lotr-web/src/main/webapp/admin.html | 18 -- .../images/boosters/tengwar_selection.png | Bin 0 -> 52877 bytes .../src/main/webapp/js/gemp-003/jCards.js | 1 + .../src/main/webapp/leagueAdmin.html | 22 ++ 17 files changed, 474 insertions(+), 228 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewLeaguePrizes.java create mode 100644 gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java create mode 100644 gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/OldLeaguePrizes.java create mode 100644 gemp-lotr/gemp-lotr-web/src/main/webapp/images/boosters/tengwar_selection.png create mode 100644 gemp-lotr/gemp-lotr-web/src/main/webapp/leagueAdmin.html diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/packs/RarityReader.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/packs/RarityReader.java index 17a1a7b03..fc73f2920 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/packs/RarityReader.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/packs/RarityReader.java @@ -22,12 +22,6 @@ public class RarityReader { if (line.endsWith("T")) { if (!line.substring(0, setNo.length()).equals(setNo)) throw new IllegalStateException("Seems the rarity is for some other set"); - String rarity = line.substring(setNo.length(), setNo.length() + 1); - List cards = cardsByRarity.get(rarity); - if (cards == null) { - cards = new LinkedList(); - cardsByRarity.put(rarity, cards); - } String blueprintId = setNo + "_" + line.substring(setNo.length() + 1); tengwar.add(blueprintId); } else { diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/LeagueDAO.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/LeagueDAO.java index 690b2a2fa..03546fc12 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/LeagueDAO.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/LeagueDAO.java @@ -17,18 +17,19 @@ public class LeagueDAO { _dbAccess = dbAccess; } - public void addLeague(int cost, String name, String type, String clazz, String parameters, int endTime) throws SQLException, IOException { + public void addLeague(int cost, String name, String type, String clazz, String parameters, int start, int endTime) throws SQLException, IOException { Connection conn = _dbAccess.getDataSource().getConnection(); try { - PreparedStatement statement = conn.prepareStatement("insert into league (name, type, class, parameters, end, status, cost) values (?, ?, ?, ?, ?, ?, ?)"); + PreparedStatement statement = conn.prepareStatement("insert into league (name, type, class, parameters, start, end, status, cost) values (?, ?, ?, ?, ?, ?, ?, ?)"); try { statement.setString(1, name); statement.setString(2, type); statement.setString(3, clazz); statement.setString(4, parameters); - statement.setInt(5, endTime); - statement.setInt(6, 0); - statement.setInt(7, cost); + statement.setInt(5, start); + statement.setInt(6, endTime); + statement.setInt(7, 0); + statement.setInt(8, cost); statement.execute(); } finally { statement.close(); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java index 9382c7ed3..749190d1a 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java @@ -14,7 +14,7 @@ public class ConstructedLeagueData implements LeagueData { private String _leaguePrizePool; private CollectionType _prizeCollectionType = new CollectionType("permanent", "My cards"); private float _prizeMultiplier; - private LeaguePrizes _leaguePrizes = new LeaguePrizes(); + private LeaguePrizes _leaguePrizes = new OldLeaguePrizes(); // Example params - 20120312,fotr_block,0.7,default,All cards,7,10,3,fotr1_block,fotr_block,fotr2_block,fotr_block,fotr_block,fotr_block // Which means - start date,league prize pool,prizes multiplier,collection type,collection name,serie length,serie match count,series count, diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeaguePrizes.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeaguePrizes.java index 26a6ad360..aa5639876 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeaguePrizes.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeaguePrizes.java @@ -1,191 +1,11 @@ package com.gempukku.lotro.league; -import com.gempukku.lotro.cards.packs.RarityReader; -import com.gempukku.lotro.cards.packs.SetRarity; import com.gempukku.lotro.game.CardCollection; -import com.gempukku.lotro.game.DefaultCardCollection; -import java.util.*; +public interface LeaguePrizes { + public CardCollection getPrizeForLeagueMatchWinner(int winCountThisSerie, int totalGamesPlayedThisSerie, String format); -public class LeaguePrizes { - private Map> _blockPromos = new HashMap>(); - private Map> _blockCommons = new HashMap>(); - private Map> _blockUncommons = new HashMap>(); - private static final String FOTR_BLOCK = "fotr_block"; - private static final String TTT_BLOCK = "ttt_block"; + public CardCollection getPrizeForLeagueMatchLoser(int winCountThisSerie, int totalGamesPlayedThisSerie, String format); - public LeaguePrizes() { - 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"); - _blockPromos.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"); - _blockPromos.put(TTT_BLOCK, tttPromos); - - RarityReader rarityReader = new RarityReader(); - SetRarity fotrRarity = rarityReader.getSetRarity("1"); - SetRarity momRarity = rarityReader.getSetRarity("2"); - SetRarity rotelRarity = rarityReader.getSetRarity("3"); - - SetRarity tttRarity = rarityReader.getSetRarity("4"); - SetRarity bohdRarity = rarityReader.getSetRarity("5"); - SetRarity eofRarity = rarityReader.getSetRarity("6"); - - List fotrCommons = new ArrayList(); - fotrCommons.addAll(fotrRarity.getCardsOfRarity("C")); - fotrCommons.addAll(momRarity.getCardsOfRarity("C")); - fotrCommons.addAll(rotelRarity.getCardsOfRarity("C")); - _blockCommons.put(FOTR_BLOCK, fotrCommons); - - List fotrUncommons = new ArrayList(); - fotrUncommons.addAll(fotrRarity.getCardsOfRarity("U")); - fotrUncommons.addAll(momRarity.getCardsOfRarity("U")); - fotrUncommons.addAll(rotelRarity.getCardsOfRarity("U")); - _blockUncommons.put(FOTR_BLOCK, fotrUncommons); - - List tttCommons = new ArrayList(); - tttCommons.addAll(tttRarity.getCardsOfRarity("C")); - tttCommons.addAll(bohdRarity.getCardsOfRarity("C")); - tttCommons.addAll(eofRarity.getCardsOfRarity("C")); - _blockCommons.put(TTT_BLOCK, tttCommons); - - List tttUncommons = new ArrayList(); - tttUncommons.addAll(tttRarity.getCardsOfRarity("U")); - tttUncommons.addAll(bohdRarity.getCardsOfRarity("U")); - tttUncommons.addAll(eofRarity.getCardsOfRarity("U")); - _blockUncommons.put(TTT_BLOCK, tttUncommons); - } - - public CardCollection getPrizeForLeagueMatchWinner(int winCountThisSerie, int totalGamesPlayedThisSerie, String format) { - DefaultCardCollection winnerPrize = new DefaultCardCollection(); - if (winCountThisSerie == 1 || winCountThisSerie == 3 || winCountThisSerie == 5 || winCountThisSerie == 8 || winCountThisSerie == 10) - winnerPrize.addItem("(S)Booster Choice", 1); - else { - List blockCommons = _blockCommons.get(format); - List blockUncommons = _blockUncommons.get(format); - List blockPromos = _blockPromos.get(format); - if (winCountThisSerie == 2) - winnerPrize.addItem(getRandom(blockCommons) + "*", 1); - else if (winCountThisSerie == 4) - winnerPrize.addItem(getRandom(blockPromos), 1); - else if (winCountThisSerie == 6) - winnerPrize.addItem(getRandom(blockPromos) + "*", 1); - else if (winCountThisSerie == 7) - winnerPrize.addItem(getRandom(blockUncommons) + "*", 1); - else if (winCountThisSerie == 9) { - winnerPrize.addItem(getRandom(blockPromos), 1); - winnerPrize.addItem(getRandom(blockCommons) + "*", 1); - } - } - return winnerPrize; - } - - public CardCollection getPrizeForLeagueMatchLoser(int winCountThisSerie, int totalGamesPlayedThisSerie, String format) { - return null; - } - - public CardCollection getPrizeForLeague(int position, int playersCount, float multiplier, String format) { - DefaultCardCollection leaguePrize = new DefaultCardCollection(); - int count = (int) Math.floor((2 * playersCount + 24) / (position + 9) - 2.4); - if (count > 0) { - count = 1 + (int) Math.floor((count - 1) * multiplier); - leaguePrize.addItem("(S)Booster Choice", count); - } - int tengwar = getTengwarCount(position); - if (tengwar > 0) { - if (format.equals(FOTR_BLOCK)) - leaguePrize.addItem("(S)FotR - Tengwar", tengwar); - else if (format.equals(TTT_BLOCK)) - leaguePrize.addItem("(S)TTT - Tengwar", tengwar); - } - if (position == 1) { - addPrizes(leaguePrize, getRandomFoil(_blockPromos.get(format), 3)); - } else if (position == 2) { - addPrizes(leaguePrize, getRandomFoil(_blockPromos.get(format), 2)); - addPrizes(leaguePrize, getRandom(_blockPromos.get(format), 1)); - } else if (position == 3) { - addPrizes(leaguePrize, getRandomFoil(_blockPromos.get(format), 1)); - addPrizes(leaguePrize, getRandom(_blockPromos.get(format), 2)); - } else if (position >= 4 && position <= 6) { - addPrizes(leaguePrize, getRandom(_blockPromos.get(format), 7 - position)); - } else if (position >= 9 && position <= 12) { - addPrizes(leaguePrize, getRandom(_blockPromos.get(format), 1)); - } - - if (leaguePrize.getAll().size() == 0) - return null; - return leaguePrize; - } - - private void addPrizes(DefaultCardCollection leaguePrize, List cards) { - for (String card : cards) - leaguePrize.addItem(card, 1); - } - - private int getTengwarCount(int position) { - if (position == 1) - return 4; - else if (position == 2) - return 3; - else if (position == 3) - return 2; - else if (position <= 8) - return 1; - return 0; - } - - private String getRandom(List list) { - return list.get(new Random().nextInt(list.size())); - } - - private List getRandom(List list, int count) { - List result = new LinkedList(list); - Collections.shuffle(result); - return result.subList(0, count); - } - - private List getRandomFoil(List list, int count) { - List result = new LinkedList(); - for (String element : list) - result.add(element + "*"); - Collections.shuffle(result); - return result.subList(0, count); - } + public CardCollection getPrizeForLeague(int position, int playersCount, float multiplier, String format); } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewLeaguePrizes.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewLeaguePrizes.java new file mode 100644 index 000000000..8e3c8d0c0 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewLeaguePrizes.java @@ -0,0 +1,115 @@ +package com.gempukku.lotro.league; + +import com.gempukku.lotro.cards.packs.RarityReader; +import com.gempukku.lotro.cards.packs.SetRarity; +import com.gempukku.lotro.game.CardCollection; +import com.gempukku.lotro.game.DefaultCardCollection; + +import java.util.*; + +public class NewLeaguePrizes implements LeaguePrizes { + private List _commons = new ArrayList(); + private List _uncommons = new ArrayList(); + private List _promos = new ArrayList(); + + public NewLeaguePrizes() { + RarityReader rarityReader = new RarityReader(); + + for (int i = 0; i <= 19; i++) { + SetRarity setRarity = rarityReader.getSetRarity(String.valueOf(i)); + _commons.addAll(setRarity.getCardsOfRarity("C")); + _uncommons.addAll(setRarity.getCardsOfRarity("U")); + _promos.addAll(setRarity.getCardsOfRarity("P")); + } + } + + public CardCollection getPrizeForLeagueMatchWinner(int winCountThisSerie, int totalGamesPlayedThisSerie, String format) { + DefaultCardCollection winnerPrize = new DefaultCardCollection(); + if (winCountThisSerie == 1 || winCountThisSerie == 3 || winCountThisSerie == 5 || winCountThisSerie == 8 || winCountThisSerie == 10) + winnerPrize.addItem("(S)Booster Choice", 1); + else { + if (winCountThisSerie == 2) + winnerPrize.addItem(getRandom(_commons) + "*", 1); + else if (winCountThisSerie == 4) + winnerPrize.addItem(getRandom(_promos), 1); + else if (winCountThisSerie == 6) + winnerPrize.addItem(getRandom(_promos) + "*", 1); + else if (winCountThisSerie == 7) + winnerPrize.addItem(getRandom(_uncommons) + "*", 1); + else if (winCountThisSerie == 9) { + winnerPrize.addItem(getRandom(_promos), 1); + winnerPrize.addItem(getRandom(_commons) + "*", 1); + } + } + return winnerPrize; + } + + public CardCollection getPrizeForLeagueMatchLoser(int winCountThisSerie, int totalGamesPlayedThisSerie, String format) { + return null; + } + + public CardCollection getPrizeForLeague(int position, int playersCount, float multiplier, String format) { + DefaultCardCollection leaguePrize = new DefaultCardCollection(); + int count = (int) Math.floor((2 * playersCount + 24) / (position + 9) - 2.4); + if (count > 0) { + count = 1 + (int) Math.floor((count - 1) * multiplier); + leaguePrize.addItem("(S)Booster Choice", count); + } + int tengwar = getTengwarCount(position); + if (tengwar > 0) + leaguePrize.addItem("(S)Tengwar", tengwar); + + if (position == 1) { + addPrizes(leaguePrize, getRandomFoil(_promos, 3)); + } else if (position == 2) { + addPrizes(leaguePrize, getRandomFoil(_promos, 2)); + addPrizes(leaguePrize, getRandom(_promos, 1)); + } else if (position == 3) { + addPrizes(leaguePrize, getRandomFoil(_promos, 1)); + addPrizes(leaguePrize, getRandom(_promos, 2)); + } else if (position >= 4 && position <= 6) { + addPrizes(leaguePrize, getRandom(_promos, 7 - position)); + } else if (position >= 9 && position <= 12) { + addPrizes(leaguePrize, getRandom(_promos, 1)); + } + + if (leaguePrize.getAll().size() == 0) + return null; + return leaguePrize; + } + + private void addPrizes(DefaultCardCollection leaguePrize, List cards) { + for (String card : cards) + leaguePrize.addItem(card, 1); + } + + private int getTengwarCount(int position) { + if (position == 1) + return 4; + else if (position == 2) + return 3; + else if (position == 3) + return 2; + else if (position <= 8) + return 1; + return 0; + } + + private String getRandom(List list) { + return list.get(new Random().nextInt(list.size())); + } + + private List getRandom(List list, int count) { + List result = new LinkedList(list); + Collections.shuffle(result); + return result.subList(0, count); + } + + private List getRandomFoil(List list, int count) { + List result = new LinkedList(); + for (String element : list) + result.add(element + "*"); + Collections.shuffle(result); + return result.subList(0, count); + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java new file mode 100644 index 000000000..c61b089f5 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java @@ -0,0 +1,99 @@ +package com.gempukku.lotro.league; + +import com.gempukku.lotro.DateUtils; +import com.gempukku.lotro.collection.CollectionsManager; +import com.gempukku.lotro.db.vo.CollectionType; +import com.gempukku.lotro.game.CardCollection; +import com.gempukku.lotro.game.DefaultCardCollection; +import com.gempukku.lotro.game.MutableCardCollection; +import com.gempukku.lotro.game.Player; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +public class NewSealedLeagueData implements LeagueData { + private String _format; + private List _series; + private CollectionType _collectionType; + private CollectionType _prizeCollectionType = new CollectionType("permanent", "My cards"); + private NewLeaguePrizes _leaguePrizes; + private SealedLeagueProduct _leagueProduct; + + public NewSealedLeagueData(String parameters) { + String[] params = parameters.split(","); + _format = params[0]; + int start = Integer.parseInt(params[1]); + int serieDuration = Integer.parseInt(params[2]); + int maxMatches = Integer.parseInt(params[3]); + + _collectionType = new CollectionType(params[4], params[5]); + + _leaguePrizes = new NewLeaguePrizes(); + _leagueProduct = new SealedLeagueProduct(); + + _series = new LinkedList(); + for (int i = 0; i < 4; i++) { + _series.add( + new DefaultLeagueSerieData(_leaguePrizes, true, "Week " + (i + 1), + DateUtils.offsetDate(start, i * serieDuration), DateUtils.offsetDate(start, (i + 1) * serieDuration - 1), maxMatches, + _format, _format, _collectionType)); + } + } + + @Override + public List getSeries() { + return Collections.unmodifiableList(_series); + } + + @Override + public CardCollection joinLeague(CollectionsManager collectionManager, Player player, int currentTime) { + MutableCardCollection startingCollection = new DefaultCardCollection(); + for (int i = 0; i < _series.size(); i++) { + LeagueSerieData serie = _series.get(i); + if (currentTime >= serie.getStart()) { + CardCollection leagueProduct = _leagueProduct.getCollectionForSerie(_format, i); + + for (Map.Entry serieCollectionItem : leagueProduct.getAll().entrySet()) + startingCollection.addItem(serieCollectionItem.getKey(), serieCollectionItem.getValue()); + } + } + collectionManager.addPlayerCollection(player, _collectionType, startingCollection); + return startingCollection; + } + + @Override + public int process(CollectionsManager collectionsManager, List leagueStandings, int oldStatus, int currentTime) { + int status = oldStatus; + + for (int i = status; i < _series.size(); i++) { + LeagueSerieData serie = _series.get(i); + if (currentTime >= serie.getStart()) { + CardCollection leagueProduct = _leagueProduct.getCollectionForSerie(_format, i); + Map map = collectionsManager.getPlayersCollection(_collectionType.getCode()); + for (Map.Entry playerCardCollectionEntry : map.entrySet()) { + collectionsManager.addItemsToPlayerCollection(playerCardCollectionEntry.getKey(), _collectionType, leagueProduct.getAll()); + } + status = i + 1; + } + } + + if (status == _series.size()) { + LeagueSerieData lastSerie = _series.get(_series.size() - 1); + if (currentTime > DateUtils.offsetDate(lastSerie.getEnd(), 1)) { + for (LeagueStanding leagueStanding : leagueStandings) { + CardCollection leaguePrize = _leaguePrizes.getPrizeForLeague(leagueStanding.getStanding(), leagueStandings.size(), 1f, _format); + if (leaguePrize != null) + collectionsManager.addItemsToPlayerCollection(leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll()); + } +// for (LeagueStanding leagueStanding : leagueStandings) { +// collectionsManager.moveCollectionToCollection(leagueStanding.getPlayerName(), _collectionType, _prizeCollectionType); +// } + status++; + } + } + + return status; + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/OldLeaguePrizes.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/OldLeaguePrizes.java new file mode 100644 index 000000000..0e9b80d86 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/OldLeaguePrizes.java @@ -0,0 +1,191 @@ +package com.gempukku.lotro.league; + +import com.gempukku.lotro.cards.packs.RarityReader; +import com.gempukku.lotro.cards.packs.SetRarity; +import com.gempukku.lotro.game.CardCollection; +import com.gempukku.lotro.game.DefaultCardCollection; + +import java.util.*; + +public class OldLeaguePrizes implements LeaguePrizes { + private Map> _blockPromos = new HashMap>(); + private Map> _blockCommons = new HashMap>(); + private Map> _blockUncommons = new HashMap>(); + private static final String FOTR_BLOCK = "fotr_block"; + private static final String TTT_BLOCK = "ttt_block"; + + public OldLeaguePrizes() { + 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"); + _blockPromos.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"); + _blockPromos.put(TTT_BLOCK, tttPromos); + + RarityReader rarityReader = new RarityReader(); + SetRarity fotrRarity = rarityReader.getSetRarity("1"); + SetRarity momRarity = rarityReader.getSetRarity("2"); + SetRarity rotelRarity = rarityReader.getSetRarity("3"); + + SetRarity tttRarity = rarityReader.getSetRarity("4"); + SetRarity bohdRarity = rarityReader.getSetRarity("5"); + SetRarity eofRarity = rarityReader.getSetRarity("6"); + + List fotrCommons = new ArrayList(); + fotrCommons.addAll(fotrRarity.getCardsOfRarity("C")); + fotrCommons.addAll(momRarity.getCardsOfRarity("C")); + fotrCommons.addAll(rotelRarity.getCardsOfRarity("C")); + _blockCommons.put(FOTR_BLOCK, fotrCommons); + + List fotrUncommons = new ArrayList(); + fotrUncommons.addAll(fotrRarity.getCardsOfRarity("U")); + fotrUncommons.addAll(momRarity.getCardsOfRarity("U")); + fotrUncommons.addAll(rotelRarity.getCardsOfRarity("U")); + _blockUncommons.put(FOTR_BLOCK, fotrUncommons); + + List tttCommons = new ArrayList(); + tttCommons.addAll(tttRarity.getCardsOfRarity("C")); + tttCommons.addAll(bohdRarity.getCardsOfRarity("C")); + tttCommons.addAll(eofRarity.getCardsOfRarity("C")); + _blockCommons.put(TTT_BLOCK, tttCommons); + + List tttUncommons = new ArrayList(); + tttUncommons.addAll(tttRarity.getCardsOfRarity("U")); + tttUncommons.addAll(bohdRarity.getCardsOfRarity("U")); + tttUncommons.addAll(eofRarity.getCardsOfRarity("U")); + _blockUncommons.put(TTT_BLOCK, tttUncommons); + } + + public CardCollection getPrizeForLeagueMatchWinner(int winCountThisSerie, int totalGamesPlayedThisSerie, String format) { + DefaultCardCollection winnerPrize = new DefaultCardCollection(); + if (winCountThisSerie == 1 || winCountThisSerie == 3 || winCountThisSerie == 5 || winCountThisSerie == 8 || winCountThisSerie == 10) + winnerPrize.addItem("(S)Booster Choice", 1); + else { + List blockCommons = _blockCommons.get(format); + List blockUncommons = _blockUncommons.get(format); + List blockPromos = _blockPromos.get(format); + if (winCountThisSerie == 2) + winnerPrize.addItem(getRandom(blockCommons) + "*", 1); + else if (winCountThisSerie == 4) + winnerPrize.addItem(getRandom(blockPromos), 1); + else if (winCountThisSerie == 6) + winnerPrize.addItem(getRandom(blockPromos) + "*", 1); + else if (winCountThisSerie == 7) + winnerPrize.addItem(getRandom(blockUncommons) + "*", 1); + else if (winCountThisSerie == 9) { + winnerPrize.addItem(getRandom(blockPromos), 1); + winnerPrize.addItem(getRandom(blockCommons) + "*", 1); + } + } + return winnerPrize; + } + + public CardCollection getPrizeForLeagueMatchLoser(int winCountThisSerie, int totalGamesPlayedThisSerie, String format) { + return null; + } + + public CardCollection getPrizeForLeague(int position, int playersCount, float multiplier, String format) { + DefaultCardCollection leaguePrize = new DefaultCardCollection(); + int count = (int) Math.floor((2 * playersCount + 24) / (position + 9) - 2.4); + if (count > 0) { + count = 1 + (int) Math.floor((count - 1) * multiplier); + leaguePrize.addItem("(S)Booster Choice", count); + } + int tengwar = getTengwarCount(position); + if (tengwar > 0) { + if (format.equals(FOTR_BLOCK)) + leaguePrize.addItem("(S)FotR - Tengwar", tengwar); + else if (format.equals(TTT_BLOCK)) + leaguePrize.addItem("(S)TTT - Tengwar", tengwar); + } + if (position == 1) { + addPrizes(leaguePrize, getRandomFoil(_blockPromos.get(format), 3)); + } else if (position == 2) { + addPrizes(leaguePrize, getRandomFoil(_blockPromos.get(format), 2)); + addPrizes(leaguePrize, getRandom(_blockPromos.get(format), 1)); + } else if (position == 3) { + addPrizes(leaguePrize, getRandomFoil(_blockPromos.get(format), 1)); + addPrizes(leaguePrize, getRandom(_blockPromos.get(format), 2)); + } else if (position >= 4 && position <= 6) { + addPrizes(leaguePrize, getRandom(_blockPromos.get(format), 7 - position)); + } else if (position >= 9 && position <= 12) { + addPrizes(leaguePrize, getRandom(_blockPromos.get(format), 1)); + } + + if (leaguePrize.getAll().size() == 0) + return null; + return leaguePrize; + } + + private void addPrizes(DefaultCardCollection leaguePrize, List cards) { + for (String card : cards) + leaguePrize.addItem(card, 1); + } + + private int getTengwarCount(int position) { + if (position == 1) + return 4; + else if (position == 2) + return 3; + else if (position == 3) + return 2; + else if (position <= 8) + return 1; + return 0; + } + + private String getRandom(List list) { + return list.get(new Random().nextInt(list.size())); + } + + private List getRandom(List list, int count) { + List result = new LinkedList(list); + Collections.shuffle(result); + return result.subList(0, count); + } + + private List getRandomFoil(List list, int count) { + List result = new LinkedList(); + for (String element : list) + result.add(element + "*"); + Collections.shuffle(result); + return result.subList(0, count); + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java index 2db46f4a6..e83334291 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java @@ -30,7 +30,7 @@ public class SealedLeagueData implements LeagueData { int serieDuration = 7; int maxMatches = 10; - _leaguePrizes = new LeaguePrizes(); + _leaguePrizes = new OldLeaguePrizes(); _leagueProduct = new SealedLeagueProduct(); _series = new LinkedList(); diff --git a/gemp-lotr/gemp-lotr-server/src/main/resources/packs.txt b/gemp-lotr/gemp-lotr-server/src/main/resources/packs.txt index 9194bede9..5ccfa6748 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/resources/packs.txt +++ b/gemp-lotr/gemp-lotr-server/src/main/resources/packs.txt @@ -39,4 +39,5 @@ BL - Booster HU - Booster RoS - Booster TaD - Booster -REF - Booster \ No newline at end of file +REF - Booster +(S)Tengwar \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/LeaguePrizesTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/LeaguePrizesTest.java index 4af028e69..47e79794e 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/LeaguePrizesTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/LeaguePrizesTest.java @@ -8,7 +8,7 @@ import java.util.Map; public class LeaguePrizesTest { @Test public void test() { - LeaguePrizes leaguePrizes = new LeaguePrizes(); + LeaguePrizes leaguePrizes = new NewLeaguePrizes(); CardCollection prize = leaguePrizes.getPrizeForLeagueMatchWinner(2, 2, "fotr_block"); for (Map.Entry stringIntegerEntry : prize.getAll().entrySet()) { System.out.println(stringIntegerEntry.getKey() + ": " + stringIntegerEntry.getValue()); @@ -17,7 +17,7 @@ public class LeaguePrizesTest { @Test public void testLeaguePrize() { - LeaguePrizes leaguePrizes = new LeaguePrizes(); + LeaguePrizes leaguePrizes = new NewLeaguePrizes(); CardCollection prize = leaguePrizes.getPrizeForLeague(1, 100, 2f, "fotr_block"); for (Map.Entry stringIntegerEntry : prize.getAll().entrySet()) { System.out.println(stringIntegerEntry.getKey() + ": " + stringIntegerEntry.getValue()); diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AbstractResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AbstractResource.java index 0ad301c6a..473bf8b29 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AbstractResource.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AbstractResource.java @@ -70,7 +70,7 @@ public abstract class AbstractResource { if (resourceOwner == null) throw new WebApplicationException(Response.Status.UNAUTHORIZED); - if (resourceOwner.getType().equals("a") && participantId != null && !participantId.equals("null")) { + if (resourceOwner.getType().contains("a") && participantId != null && !participantId.equals("null")) { resourceOwner = _playerDao.getPlayer(participantId); if (resourceOwner == null) throw new WebApplicationException(Response.Status.UNAUTHORIZED); diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java index 8c29ad332..c763d257a 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java @@ -1,5 +1,6 @@ package com.gempukku.lotro.server; +import com.gempukku.lotro.DateUtils; import com.gempukku.lotro.collection.CollectionsManager; import com.gempukku.lotro.db.DeckDAO; import com.gempukku.lotro.db.LeagueDAO; @@ -10,7 +11,9 @@ import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import com.gempukku.lotro.game.LotroServer; import com.gempukku.lotro.game.Player; import com.gempukku.lotro.hall.HallServer; +import com.gempukku.lotro.league.LeagueSerieData; import com.gempukku.lotro.league.LeagueService; +import com.gempukku.lotro.league.NewSealedLeagueData; import com.sun.jersey.spi.resource.Singleton; import javax.servlet.http.HttpServletRequest; @@ -80,19 +83,28 @@ public class AdminResource extends AbstractResource { return "OK"; } - @Path("/addLeague") + @Path("/addSealedLeague") @POST - public String addLeague( + public String addSealedLeague( @FormParam("cost") int cost, + @FormParam("format") String format, @FormParam("name") String name, - @FormParam("type") String type, - @FormParam("class") String clazz, - @FormParam("parameters") String parameters, - @FormParam("end") int end, + @FormParam("start") String start, + @FormParam("serieDuration") int serieDuration, + @FormParam("maxMatches") int maxMatches, @Context HttpServletRequest request) throws Exception { - validateAdmin(request); + validateLeagueAdmin(request); - _leagueDao.addLeague(cost, name, type, clazz, parameters, end); + String code = String.valueOf(System.currentTimeMillis()); + + String parameters = format + "," + start + "," + serieDuration + "," + maxMatches + "," + code + "," + name; + NewSealedLeagueData leagueData = new NewSealedLeagueData(parameters); + List series = leagueData.getSeries(); + int displayEnd = DateUtils.offsetDate(series.get(series.size() - 1).getEnd(), 2); + + _leagueDao.addLeague(cost, name, String.valueOf(System.currentTimeMillis()), NewSealedLeagueData.class.getName(), parameters, DateUtils.getCurrentDate(), displayEnd); + + _leagueService.clearCache(); return "OK"; } @@ -150,7 +162,14 @@ public class AdminResource extends AbstractResource { private void validateAdmin(HttpServletRequest request) { Player player = getResourceOwnerSafely(request, null); - if (!player.getType().equals("a")) + if (!player.getType().contains("a")) + sendError(Response.Status.FORBIDDEN); + } + + private void validateLeagueAdmin(HttpServletRequest request) { + Player player = getResourceOwnerSafely(request, null); + + if (!player.getType().contains("l")) sendError(Response.Status.FORBIDDEN); } diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/PacksStorageProvider.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/PacksStorageProvider.java index be9f15924..4dbb195fd 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/PacksStorageProvider.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/PacksStorageProvider.java @@ -48,6 +48,7 @@ public class PacksStorageProvider implements Injectable, Injectabl packStorage.addPackBox("(S)TTT - Tengwar", new TengwarPackBox(new int[]{4, 5, 6})); packStorage.addPackBox("(S)RotK - Tengwar", new TengwarPackBox(new int[]{7, 8, 10})); packStorage.addPackBox("(S)SH - Tengwar", new TengwarPackBox(new int[]{11, 12, 13})); + packStorage.addPackBox("(S)Tengwar", new TengwarPackBox(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19})); packStorage.addPackBox("(S)Booster Choice", new FixedPackBox("(S)Booster Choice")); diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/admin.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/admin.html index a4a5679f5..27d48d658 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/admin.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/admin.html @@ -10,24 +10,6 @@ -

League

- -

Add league

- -
- Name:
- Code:
- Type: -
- Parameters:
- Cost:
- End:
- -
-

Collections

Add items

diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/images/boosters/tengwar_selection.png b/gemp-lotr/gemp-lotr-web/src/main/webapp/images/boosters/tengwar_selection.png new file mode 100644 index 0000000000000000000000000000000000000000..f93461f113a7372ae4295aa08c5f56eaaa887cfe GIT binary patch literal 52877 zcmV)QK(xP!P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyc0 z79c2bpZwkc03ZNKL_t(|+MK<4ysTMS-}_y|JJh)6Gxs_4NYhNMpshILy*NNb5Jj%n zfn1EaaxpP-^(I~uyd+5EYK+mSLF5zBI0h9Eq7o1R0Tr6DyXm>lIen(R&mL;m@D6Lp zAMdc=s$I2DoBjFJXV

?^~t< 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 z + +

League

+ +

Add sealed league

+ +
+ Name:
+ Cost (in silver):
+ Format: +
+ Start (YYYYMMDD):
+ Serie duration in days:
+ Maximum matches in serie:
+ +
+ + + \ No newline at end of file