diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/leagueAdmin.html b/gemp-lotr/gemp-lotr-async/src/main/web/leagueAdmin.html
index 499e90854..c6df83a44 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/leagueAdmin.html
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/leagueAdmin.html
@@ -204,6 +204,7 @@
Format:
Series duration in days:
Maximum matches in series:
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/set30-rarity.txt b/gemp-lotr/gemp-lotr-cards/src/main/resources/set30-rarity.txt
index 69f8458ed..6502a64ff 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/resources/set30-rarity.txt
+++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/set30-rarity.txt
@@ -1,7 +1,7 @@
-30S1
+30C1
30S2
-30S3
-30S4
+30C3
+30C4
30S5
30S6
30S7
@@ -10,25 +10,25 @@
30S10
30S11
30S12
-30S13
-30S14
+30C13
+30C14
30S15
30S16
30S17
30S18
30S19
-30S20
+30C20
30S21
30S22
-30S23
-30S24
+30C23
+30C24
30S25
30S26
30S27
30S28
30S29
-30S30
-30S31
+30C30
+30C31
30S32
30S33
30S34
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/set31-rarity.txt b/gemp-lotr/gemp-lotr-cards/src/main/resources/set31-rarity.txt
index 35a9f6766..d5d1b2668 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/resources/set31-rarity.txt
+++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/set31-rarity.txt
@@ -1,69 +1,69 @@
-31S1
-31S2
-31S3
-31S4
-31S5
-31S6
-31S7
-31S8
-31S9
-31S10
-31S11
-31S12
-31S13
-31S14
-31S15
-31S16
-31S17
-31S18
-31S19
-31S20
-31S21
-31S22
-31S23
-31S24
-31S25
-31S26
-31S27
-31S28
-31S29
-31S30
-31S31
-31S32
-31S33
-31S34
-31S35
-31S36
-31S37
-31S38
-31S39
-31S40
-31S41
-31S42
-31S43
-31S44
-31S45
-31S46
-31S47
-31S48
-31S49
-31S50
-31S51
-31S52
-31S53
-31S54
-31S55
-31S56
-31S57
-31S58
-31S59
-31S60
-31S61
-31S62
-31S63
-31S64
-31S65
-31S66
-31S67
-31S68
-31S69
+31X1
+31R2
+31R3
+31X4
+31R5
+31X6
+31R7
+31X8
+31X9
+31X10
+31R11
+31R12
+31R13
+31X14
+31X15
+31X16
+31R17
+31R18
+31C19
+31U20
+31U21
+31R22
+31U23
+31P24
+31R25
+31U26
+31C27
+31U28
+31X29
+31C30
+31C31
+31C32
+31R33
+31P34
+31C35
+31P36
+31R37
+31R38
+31X39
+31X40
+31R41
+31R42
+31X43
+31P44
+31P45
+31P46
+31X47
+31X48
+31P49
+31X50
+31P51
+31P52
+31P53
+31P54
+31X55
+31X56
+31U57
+31X58
+31C59
+31U60
+31C61
+31P62
+31C63
+31U64
+31X65
+31U66
+31U67
+31U68
+31U69
diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/builder/startingPoolBuilder2.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/builder/startingPoolBuilder2.java
new file mode 100644
index 000000000..e658f5474
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/builder/startingPoolBuilder2.java
@@ -0,0 +1,143 @@
+package com.gempukku.lotro.draft2.builder;
+
+import com.gempukku.lotro.game.CardCollection;
+import com.gempukku.lotro.game.DefaultCardCollection;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+
+public class StartingPoolBuilder {
+ public CardCollectionProducer buildCardCollectionProducer(JSONObject startingPool) {
+ String cardCollectionProducerType = (String) startingPool.get("type");
+ if (cardCollectionProducerType.equals("randomCardPool")) {
+ return buildRandomCardPool((JSONObject) startingPool.get("data"));
+ } else if (cardCollectionProducerType.equals("boosterDraftRun")) {
+ return buildBoosterDraftRun((JSONObject) startingPool.get("data"));
+ }
+ throw new RuntimeException("Unknown cardCollectionProducer type: "+cardCollectionProducerType);
+ }
+
+ private CardCollectionProducer buildRandomCardPool(JSONObject randomCardPool) {
+ JSONArray cardPools = (JSONArray) randomCardPool.get("randomResult");
+
+ final List cardCollections = new ArrayList();
+ Iterator iterator = cardPools.iterator();
+ while (iterator.hasNext()) {
+ JSONArray cards = iterator.next();
+
+ DefaultCardCollection cardCollection = new DefaultCardCollection();
+ Iterator cardIterator = cards.iterator();
+ while (cardIterator.hasNext()) {
+ cardCollection.addItem(cardIterator.next(), 1);
+ }
+ cardCollections.add(cardCollection);
+ }
+
+ return new CardCollectionProducer() {
+ @Override
+ public CardCollection getCardCollection(long seed) {
+ Random rnd = new Random(seed);
+ return cardCollections.get(rnd.nextInt(cardCollections.size()));
+ }
+ };
+ }
+
+ private CardCollectionProducer buildBoosterDraftRun(JSONObject boosterDraftRun) {
+ final int runLengthInput = ((Number) boosterDraftRun.get("runLength")).intValue();
+ final JSONArray coreCards = (JSONArray) boosterDraftRun.get("coreCards");
+ JSONArray freePeoplesRuns = (JSONArray) boosterDraftRun.get("freePeoplesRuns");
+ JSONArray shadowRuns = (JSONArray) boosterDraftRun.get("shadowRuns");
+
+ final List> freePeoplesRunList = new ArrayList>();
+ Iterator freePeoplesIterator = freePeoplesRuns.iterator();
+ while (freePeoplesIterator.hasNext()) {
+ JSONArray cards = freePeoplesIterator.next();
+
+ List orderedCards = new ArrayList();
+ Iterator cardIterator = cards.iterator();
+ while (cardIterator.hasNext()) {
+ orderedCards.add(cardIterator.next());
+ }
+ freePeoplesRunList.add(orderedCards);
+ }
+
+ final List> shadowRunList = new ArrayList>();
+ Iterator shadowIterator = shadowRuns.iterator();
+ while (shadowIterator.hasNext()) {
+ JSONArray cards = shadowIterator.next();
+
+ List orderedCards = new ArrayList();
+ Iterator cardIterator = cards.iterator();
+ while (cardIterator.hasNext()) {
+ orderedCards.add(cardIterator.next());
+ }
+ shadowRunList.add(orderedCards);
+ }
+
+ return new CardCollectionProducer() {
+ @Override
+ public CardCollection getCardCollection(long seed) {
+ Random rnd = new Random(seed);
+ List freePeoplesRun = freePeoplesRunList.get(rnd.nextInt(freePeoplesRunList.size()));
+ List shadowRun = shadowRunList.get(rnd.nextInt(shadowRunList.size()));
+ int runLength = 0;
+ if (freePeoplesRun.size() > 0 && shadowRun.size() > 0) {
+ runLength = Math.min(runLengthInput, Math.min(freePeoplesRun.size(), shadowRun.size()));
+ } else if (freePeoplesRun.size() > 0) {
+ runLength = Math.min(runLengthInput, freePeoplesRun.size());
+ } else {
+ runLength = Math.min(runLengthInput, shadowRun.size());
+ }
+ String[] draftRun = new String[runLength];
+ if (freePeoplesRun.size() > 0) {
+ int runSeed = rnd.nextInt() % freePeoplesRun.size();
+ if (runSeed + runLength > freePeoplesRun.size()) {
+ int runFromStart = runSeed + runLength - freePeoplesRun.size();
+ int runAtEnd = runLength - runFromStart;
+ for (int i = 0; i < runAtEnd; i++) {
+ draftRun[i] = freePeoplesRun.get(runSeed+i);
+ }
+ for (int i = 0; i < runFromStart; i++) {
+ draftRun[runAtEnd + i] = freePeoplesRun.get(i);
+ }
+ } else {
+ for (int i = 0; i < runLength; i++) {
+ draftRun[i] = freePeoplesRun.get(runSeed+i);
+ }
+ }
+ }
+ if (shadowRun.size() > 0) {
+ int runSeed = rnd.nextInt() % shadowRun.size();
+ if (runSeed + runLength > shadowRun.size()) {
+ int runFromStart = runSeed + runLength - shadowRun.size();
+ int runAtEnd = runLength - runFromStart;
+ for (int i = 0; i < runAtEnd; i++) {
+ draftRun[i] = shadowRun.get(runSeed+i);
+ }
+ for (int i = 0; i < runFromStart; i++) {
+ draftRun[runAtEnd + i] = shadowRun.get(i);
+ }
+ } else {
+ for (int i = 0; i < runLength; i++) {
+ draftRun[i] = shadowRun.get(runSeed+i);
+ }
+ }
+ }
+
+ final DefaultCardCollection draftCollection = new DefaultCardCollection();
+ Iterator iterator = coreCards.iterator();
+ while (iterator.hasNext()) {
+ draftCollection.addItem(iterator.next(), 1);
+ }
+ for (int i = 0; i < draftRun.length; i++) {
+ draftCollection.addItem(draftRun[i], 1);
+ }
+ return draftCollection;
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/gemp-lotr/gemp-lotr-server/src/main/resources/draft/fellowshipDraft.json b/gemp-lotr/gemp-lotr-server/src/main/resources/draft/fellowshipDraft.json
new file mode 100644
index 000000000..8df4a5a7e
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-server/src/main/resources/draft/fellowshipDraft.json
@@ -0,0 +1,295 @@
+{
+ "format": "limited_fotr",
+ "startingPool": {
+ "type": "boosterDraftRun",
+ "data": {
+ "runLength": 14,
+ "coreCards": ["1_2","1_290"],
+ "freePeoplesRuns": [
+ ["1_296", "2_110", "1_12", "1_365", "1_112", "1_365", "1_311", "1_317", "2_104", "3_122", "1_364", "3_35", "1_78", "1_364", "2_114", "1_299", "1_303", "3_121", "1_365", "1_112", "1_365", "2_110", "1_298", "2_104", "1_51", "1_364", "3_35", "1_76", "1_364", "2_114"],
+ ["1_26", "1_7", "1_9", "1_11", "1_5", "2_121", "1_97", "2_37", "1_97", "1_51", "1_37", "1_48", "1_32", "1_51", "1_97", "2_121", "1_5", "2_6", "1_9", "1_7", "1_6", "2_121", "1_97", "3_7", "1_37", "1_48", "2_18", "3_7", "1_97", "2_121"]
+ ],
+ "shadowRuns": [
+ ["3_96", "1_270", "2_89", "1_262", "1_262", "2_89", "1_270", "3_96", "1_231", "2_61", "1_179", "2_63", "1_184", "2_62", "2_62", "1_184", "2_63", "1_179", "2_61", "1_234", "1_158", "1_152", "1_154", "1_151", "1_145", "1_151", "1_154", "1_152", "1_158", "1_231", "3_100", "1_267", "1_270", "1_271", "1_271", "1_270", "1_267", "3_100", "1_234", "1_177", "2_67", "1_178", "1_176", "2_60", "2_60", "1_176", "1_178", "2_67", "1_77", "1_231", "3_57", "3_58", "3_59", "3_62", "3_69", "3_62", "3_59", "3_58", "3_57", "1_234"]
+ ]
+ }
+ },
+ "choices": [
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 5,
+ "filter": "side:FREE_PEOPLE set:1,2,3 rarity:R"
+ }
+ },
+ {
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:FREE_PEOPLE set:1 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:FREE_PEOPLE set:1 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:FREE_PEOPLE set:1 rarity:C"
+ }
+ }
+ ]
+ }
+ },{
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:FREE_PEOPLE set:2 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:FREE_PEOPLE set:2 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:FREE_PEOPLE set:2 rarity:C"
+ }
+ }
+ ]
+ }
+ },{
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:FREE_PEOPLE set:3 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:FREE_PEOPLE set:3 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:FREE_PEOPLE set:3 rarity:C"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 5,
+ "filter": "side:SHADOW set:1,2,3 rarity:R"
+ }
+ },
+ {
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:SHADOW set:1 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:SHADOW set:1 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:SHADOW set:1 rarity:C"
+ }
+ }
+ ]
+ }
+ },{
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:SHADOW set:2 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:SHADOW set:2 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:SHADOW set:2 rarity:C"
+ }
+ }
+ ]
+ }
+ },{
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:SHADOW set:3 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:SHADOW set:3 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:SHADOW set:3 rarity:C"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:1,2,3 siteNumber:1"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:1,2,3 siteNumber:2"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:1,2,3 siteNumber:3"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:1,2,3 siteNumber:4"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:1,2,3 siteNumber:5"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:1,2,3 siteNumber:6"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:1,2,3 siteNumber:7"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:1,2,3 siteNumber:8"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:1,2,3 siteNumber:9"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/gemp-lotr/gemp-lotr-server/src/main/resources/draft/hobbitDraft.json b/gemp-lotr/gemp-lotr-server/src/main/resources/draft/hobbitDraft.json
new file mode 100644
index 000000000..d87429c4e
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-server/src/main/resources/draft/hobbitDraft.json
@@ -0,0 +1,133 @@
+{
+ "format": "limited_hobbit",
+ "startingPool": {
+ "type": "randomCardPool",
+ "data": {
+ "randomResult": [
+ ["30_1", "30_2", "30_3", "30_4", "30_5", "30_6", "30_7", "30_8", "30_9", "30_10", "30_11", "30_12", "30_13", "30_14", "30_15", "30_16", "30_17", "30_18", "30_19", "30_20", "30_21", "30_22", "30_23", "30_24", "30_29", "30_30", "30_31", "30_47", "30_48", "30_32", "30_32", "30_32", "30_33", "30_33", "30_34", "30_34", "30_35", "30_35", "30_35", "30_35", "30_36", "30_36", "30_37", "30_37", "30_38", "30_38", "30_39", "30_39", "30_39", "30_40", "30_40", "30_40", "30_41", "30_41", "30_42", "30_42", "30_42", "30_42", "30_58", "30_49", "30_50", "30_51", "30_52", "30_53", "30_54", "30_55", "30_56", "30_57"]
+ ]
+ }
+ },
+ "choices": [
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 1,
+ "filter": "side:FREE_PEOPLE name:Bilbo set:30"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 1,
+ "filter": "side:FREE_PEOPLE name:Gandalf set:30"
+ }
+ },
+ {
+ "type": "weightedSwitch",
+ "repeat": 22,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.05,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 2,
+ "filter": "side:SHADOW set:30,31 rarity:X"
+ }
+ },
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 2,
+ "filter": "side:SHADOW set:30,31 rarity:R"
+ }
+ },
+ {
+ "weight": 0.13,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 3,
+ "filter": "side:SHADOW set:30,31 rarity:P"
+ }
+ },
+ {
+ "weight": 0.36,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 4,
+ "filter": "side:SHADOW set:30,31 rarity:U"
+ }
+ },
+ {
+ "weight": 0.36,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:SHADOW set:30,31 rarity:C"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "weightedSwitch",
+ "repeat": 18,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.15,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 4,
+ "filter": "side:FREE_PEOPLE set:30,31 rarity:X"
+ }
+ },
+ {
+ "weight": 0.25,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 6,
+ "filter": "side:FREE_PEOPLE set:30,31 rarity:R"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:FREE_PEOPLE set:30,31 rarity:C"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "weightedSwitch",
+ "repeat": 5,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.2,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:30,31 rarity:X"
+ }
+ },
+ {
+ "weight": 0.8,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 4,
+ "filter": "cardType:SITE set:30,31 rarity:P"
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/gemp-lotr/gemp-lotr-server/src/main/resources/draft/twoTowersDraft.json b/gemp-lotr/gemp-lotr-server/src/main/resources/draft/twoTowersDraft.json
new file mode 100644
index 000000000..9b3183bd0
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-server/src/main/resources/draft/twoTowersDraft.json
@@ -0,0 +1,295 @@
+{
+ "format": "limited_ttt",
+ "startingPool": {
+ "type": "boosterDraftRun",
+ "data": {
+ "runLength": 14,
+ "coreCards": ["4_2","4_302"],
+ "freePeoplesRuns": [
+ ["4_90", "4_105", "4_97", "4_98", "4_97", "4_105", "4_90", "4_109", "4_115", "4_112", "4_115", "4_109", "4_71", "4_83", "4_76", "4_78", "4_83", "4_71", "4_74", "4_87", "4_70", "4_87", "4_74", "4_117", "4_135", "4_112", "4_128", "4_130", "4_135", "4_117"],
+ ["4_266", "4_278", "4_277", "4_273", "4_273", "4_281", "4_283", "4_266", "4_270", "4_287", "4_265", "4_297", "4_265", "4_287", "4_270", "4_49", "4_44", "4_42", "4_58", "4_42", "4_44", "4_49", "4_310", "4_322", "4_308", "4_314", "4_310", "4_308", "4_322", "4_314"]
+ ],
+ "shadowRuns": [
+ ["4_248", "4_221", "4_222", "4_227", "4_226", "4_224", "4_228", "4_258", "4_228", "4_224", "4_226", "4_227", "4_222", "4_221", "4_248", "4_165", "4_191", "4_184", "4_206", "4_204", "4_180", "4_198", "4_137", "4_198", "4_180", "4_204", "4_206", "4_184", "4_191", "4_165", "4_4", "4_17", "4_16", "4_25", "4_10", "4_14", "4_12", "4_21", "4_12", "4_14", "4_10", "4_25", "4_16", "4_17", "4_4", "4_207", "4_181", "4_193", "4_189", "4_187", "4_190", "4_178", "4_153", "4_178", "4_190", "4_187", "4_189", "4_193", "4_181", "4_207"]
+ ]
+ }
+ },
+ "choices": [
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 5,
+ "filter": "side:FREE_PEOPLE set:4,5,6 rarity:R"
+ }
+ },
+ {
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:FREE_PEOPLE set:4 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:FREE_PEOPLE set:4 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:FREE_PEOPLE set:4 rarity:C"
+ }
+ }
+ ]
+ }
+ },{
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:FREE_PEOPLE set:5 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:FREE_PEOPLE set:5 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:FREE_PEOPLE set:5 rarity:C"
+ }
+ }
+ ]
+ }
+ },{
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:FREE_PEOPLE set:6 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:FREE_PEOPLE set:6 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:FREE_PEOPLE set:6 rarity:C"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 5,
+ "filter": "side:SHADOW set:4,5,6 rarity:R"
+ }
+ },
+ {
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:SHADOW set:4 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:SHADOW set:4 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:SHADOW set:4 rarity:C"
+ }
+ }
+ ]
+ }
+ },{
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:SHADOW set:5 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:SHADOW set:5 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:SHADOW set:5 rarity:C"
+ }
+ }
+ ]
+ }
+ },{
+ "type": "weightedSwitch",
+ "repeat": 10,
+ "data": {
+ "switchResult": [
+ {
+ "weight": 0.1,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 5,
+ "filter": "side:SHADOW set:6 rarity:R"
+ }
+ },
+ {
+ "weight": 0.3,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 8,
+ "filter": "side:SHADOW set:6 rarity:U,P"
+ }
+ },
+ {
+ "weight": 0.6,
+ "type": "filterPick",
+ "data": {
+ "optionCount": 10,
+ "filter": "side:SHADOW set:6 rarity:C"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:4,5,6 siteNumber:1"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:4,5,6 siteNumber:2"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:4,5,6 siteNumber:3"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:4,5,6 siteNumber:4"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:4,5,6 siteNumber:5"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:4,5,6 siteNumber:6"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:4,5,6 siteNumber:7"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:4,5,6 siteNumber:8"
+ }
+ },
+ {
+ "type": "filterPick",
+ "repeat": 1,
+ "data": {
+ "optionCount": 3,
+ "filter": "cardType:SITE set:4,5,6 siteNumber:9"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/gemp-lotr/gemp-lotr-server/src/main/resources/lotrDrafts.json b/gemp-lotr/gemp-lotr-server/src/main/resources/lotrDrafts.json
index 7c7203b25..c1bc4c8de 100644
--- a/gemp-lotr/gemp-lotr-server/src/main/resources/lotrDrafts.json
+++ b/gemp-lotr/gemp-lotr-server/src/main/resources/lotrDrafts.json
@@ -2,5 +2,17 @@
{
"type": "test_draft",
"location": "/draft/testDraft.json"
+ },
+ {
+ "type": "fotr_draft",
+ "location": "/draft/fellowshipDraft.json"
+ },
+ {
+ "type": "ttt_draft",
+ "location": "/draft/twoTowersDraft.json"
+ },
+ {
+ "type": "hobbit_draft",
+ "location": "/draft/hobbitDraft.json"
}
-]
\ No newline at end of file
+]