diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java index fa6f57a42..53f97b245 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java @@ -93,10 +93,15 @@ public class DeckRequestHandler extends LotroServerRequestHandler implements Uri } catch (DeckInvalidException exp) { if (!format.getErrataCardMap().isEmpty()) { LotroDeck deckWithErrata = format.applyErrata(deck); - format.validateDeck(deckWithErrata); - valid.append("" + format.getName() + ": valid (with PC errata)
"); + try { + format.validateDeck(deckWithErrata); + valid.append("" + format.getName() + ": valid (with errata automatically applied)
"); + } catch (DeckInvalidException exp2) { + invalid.append("" + format.getName() + ": " + exp.getMessage() + "
"); + } + } else { + invalid.append("" + format.getName() + ": " + exp.getMessage() + "
"); } - invalid.append("" + format.getName() + ": " + exp.getMessage() + "
"); } } sb.append(valid); diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/vpack1.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/vpack1.json deleted file mode 100644 index 516757063..000000000 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/vpack1.json +++ /dev/null @@ -1,431 +0,0 @@ -{ - "101_1": { - "side": "free_people", - "culture": "Gondor", - "title": "*The Lords of Gondor Have Returned", - "type": "condition", - "cost": 2, - "keyword": "support area", - "effects": [ - { - "type": "activated", - "phase": "skirmish", - "condition": { - "type": "canSpot", - "filter": "bearer,inSkirmishAgainst(Nazgul)", - }, - "cost": [ - { - "type": "memorize", - "filter": "bearer", - "memory": "bearer" - }, - { - "type": "discard", - "filter": "self" - } - ], - "effect":[ - { - "type": "modifyStrength", - "filter": "memory(bearer)", - "amount": 3 - }, - { - "type": "addKeyword", - "filter": "memory(bearer)", - "keyword": "damage+1" - } - ] - }, - ] - }, - - "101_2": { - "side": "free_people", - "culture": "Gondor", - "title": "*I Will Not Let the White City Fall", - "type": "condition", - "cost": 2, - "keyword": "support area", - "effects": [ - { - "type": "trigger", - "trigger": { - "type": "losesSkirmish", - "filter": "name(Boromir)" - }, - "effect": { - "type": "modifyStrength", - "filter": "choose(name(Aragorn))", - "amount": 2, - "until": "start(regroup)" - }, - }, - { - "type": "trigger", - "trigger": { - "type": "losesSkirmish", - "filter": "name(Aragorn)" - }, - "effect": { - "type": "modifyStrength", - "filter": "choose(name(Boromir))", - "amount": 2, - "until": "start(regroup)" - }, - } - ] - }, - - "101_3": { - "side": "free_people", - "culture": "Gondor", - "title": "*Boromir", - "subtitle": "The Redeemed", - "type": "companion", - "cost": 3, - "race": "man", - "strength": 7, - "vitality": 3, - "resistance": 6, - "signet": "aragorn", - "effects": [ - { - "type": "modifier", - "modifier": { - "type": "addKeyword", - "filter": "self", - "keyword": "defender+1", - "condition": { - "type": "canSpot", - "filter": "companion,culture(shire)", - "count": 2 - } - } - }, - { - "type": "modifier", - "modifier": { - "type": "modifyStrength", - "filter": "self", - "amount": 2, - "condition": { - "type": "canSpot", - "filter": "companion,culture(shire)", - "count": 4 - } - } - }, - { - "type": "modifier", - "modifier": { - "type": "addKeyword", - "filter": "self", - "keyword": "damage+1", - "condition": { - "type": "canSpot", - "filter": "companion,culture(shire)", - "count": 4 - } - } - }, - - ] - }, - - "101_4": { - "side": "free_people", - "culture": "Gondor", - "title": "*Loud and Clear It Sounds", - "type": "condition", - "cost": 1, - "keyword": "support area", - "effects": [ - { - "type": "trigger", - "optional": true, - "trigger": { - "type": "assignedToSkirmish", - "filter": "companion,culture(shire)", - "side": "shadow", - "memorizeAssigned": "assignedHobbit", - "memorizeAgainst": "assignedMinion" - }, - "cost": [ - { - "type": "exert", - "count": 1, - "filter": "choose(companion,culture(gondor))", - "memorize": "newAssignee" - }, - { - "type": "discard", - "filter": "self" - } - ], - "effect": { - "type": "replaceInAssignment", - "filter": "memory(assignedHobbit)", - "with": "memory(newAssignee)" - } - } - ] - }, - - "101_5": { - "side": "free_people", - "culture": "Gondor", - "title": "Remnant of Numenor", - "type": "condition", - "cost": 1, - "keyword": "support area", - "condition": { - "type": "canSpot", - "filter": "companion,culture(gondor)" - }, - "effects": { - "type": "trigger", - "optional": true, - "trigger": { - "type": "discardFromHand", - "filter": "any", - "player": "shadowPlayer" - }, - "cost": { - "type": "addTwilight", - "amount": 1 - }, - "effect": { - "type": "shuffleCardsFromDiscardIntoDrawDeck", - "filter": "choose(culture(gondor))", - "count": 1 - } - } - }, - - "101_6": { - "side": "shadow", - "culture": "Sauron", - "title": "*Great Wolf Chief", - "type": "minion", - "cost": 5, - "race": "warg", - "strength": 10, - "vitality": 3, - "site": 6, - "keyword": [ - "tracker", - "fierce" - ], - "effects": [ - { - "type": "modifier", - "modifier": { - "type": "ModifySiteNumber", - "filter": "self", - "amount": { - "type": "forEachYouCanSpot", - "filter": "stealth", - "multiplier": -1 - } - } - }, - - { - "type": "trigger", - "optional": true, - "trigger": { - "type": "played", - "filter": "another,culture(sauron),warg" - }, - "effect": { - "type": "exert", - "player": "fp", - "filter": "choose(companion)", - "count": 1 - } - } - ] - }, - - "101_7": { - "side": "shadow", - "culture": "Sauron", - "title": "Hollin Snarler", - "type": "minion", - "cost": 3, - "race": "warg", - "strength": 4, - "vitality": 3, - "site": 6, - "keyword": [ - "tracker", - "fierce" - ], - "effects": [ - { - "type": "modifier", - "modifier": { - "type": "ModifySiteNumber", - "filter": "self", - "amount": { - "type": "forEachYouCanSpot", - "filter": "stealth", - "multiplier": -1 - } - } - }, - - { - "type": "modifier", - "modifier": { - "type": "ModifyStrength", - "filter": "self", - "amount": { - "type": "forEachYouCanSpot", - "filter": "or(stealth,and(companion,wounded))", - - } - } - }, - - ] - }, - - "101_8": { - "side": "shadow", - "culture": "Sauron", - "title": "Hound of Sauron", - "type": "minion", - "cost": 2, - "race": "warg", - "strength": 6, - "vitality": 2, - "site": 6, - "keyword": [ - "tracker", - "fierce" - ], - "effects": [ - { - "type": "activated", - "phase": "skirmish", - "condition": { - "type": "canSpot", - "filter": "bearer,inSkirmishAgainst(Nazgul)", - }, - "cost": [ - { - "type": "memorize", - "filter": "bearer", - "memory": "bearer" - }, - { - "type": "discard", - "filter": "self" - } - ], - "effect":[ - { - "type": "modifyStrength", - "filter": "memory(bearer)", - "amount": 3 - }, - { - "type": "addKeyword", - "filter": "memory(bearer)", - "keyword": "damage+1" - } - ] - }, - ] - }, - - "101_9": { - "side": "shadow", - "culture": "Sauron", - "title": "*The Hunt is Up!", - "type": "condition", - "cost": 1, - "keyword": "support area", - "effects": [ - { - "type": "activated", - "phase": "skirmish", - "condition": { - "type": "canSpot", - "filter": "bearer,inSkirmishAgainst(Nazgul)", - }, - "cost": [ - { - "type": "memorize", - "filter": "bearer", - "memory": "bearer" - }, - { - "type": "discard", - "filter": "self" - } - ], - "effect":[ - { - "type": "modifyStrength", - "filter": "memory(bearer)", - "amount": 3 - }, - { - "type": "addKeyword", - "filter": "memory(bearer)", - "keyword": "damage+1" - } - ] - }, - ] - }, - - "101_10": { - "side": "shadow", - "culture": "Sauron", - "title": "I See You", - "type": "event", - "cost": 1, - "keyword": "assignment", - "effects": [ - { - "type": "activated", - "phase": "skirmish", - "condition": { - "type": "canSpot", - "filter": "bearer,inSkirmishAgainst(Nazgul)", - }, - "cost": [ - { - "type": "memorize", - "filter": "bearer", - "memory": "bearer" - }, - { - "type": "discard", - "filter": "self" - } - ], - "effect":[ - { - "type": "modifyStrength", - "filter": "memory(bearer)", - "amount": 3 - }, - { - "type": "addKeyword", - "filter": "memory(bearer)", - "keyword": "damage+1" - } - ] - }, - ] - }, - - - -} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cardFilter.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cardFilter.js index 463168338..a59ab1ee0 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cardFilter.js +++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cardFilter.js @@ -115,6 +115,7 @@ var CardFilter = Class.extend({ + "" + "" + "" + + "" + "" + "" + "" @@ -123,16 +124,14 @@ var CardFilter = Class.extend({ + "" + "" + "" + + "" + "" + "" + "" + + "" + "" + "" + "" - + "" - + "" - + "" - + "" + "" + "" + "" @@ -161,7 +160,7 @@ var CardFilter = Class.extend({ + "" + "" + "" - + "" + + "" + "" + "" + ""); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java index 51e7b28d5..55e76d2dc 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java @@ -238,6 +238,12 @@ public class DefaultLotroFormat implements LotroFormat { throw new DeckInvalidException("Deck contains a copy of an X-listed card: " + GameUtils.getFullName(_library.getLotroCardBlueprint(bannedBlueprintId))); } + // Errata + for (String originalBlueprintId : _errataCardMap.keySet()) { + if (originalBlueprintId.equals(blueprintId) || (allAlternates != null && allAlternates.contains(originalBlueprintId))) + throw new DeckInvalidException("Deck contains non-errata of an errata'd card: " + GameUtils.getFullName(_library.getLotroCardBlueprint(originalBlueprintId))); + } + } catch (CardNotFoundException e) { // Ignore this card } @@ -328,8 +334,12 @@ public class DefaultLotroFormat implements LotroFormat { @Override public LotroDeck applyErrata(LotroDeck deck) { LotroDeck deckWithErrata = new LotroDeck(deck.getDeckName()); - deckWithErrata.setRingBearer(_errataCardMap.getOrDefault(deck.getRingBearer(), deck.getRingBearer())); - deckWithErrata.setRing(_errataCardMap.getOrDefault(deck.getRing(), deck.getRing())); + if (deck.getRingBearer() != null) { + deckWithErrata.setRingBearer(_errataCardMap.getOrDefault(deck.getRingBearer(), deck.getRingBearer())); + } + if (deck.getRing() != null) { + deckWithErrata.setRing(_errataCardMap.getOrDefault(deck.getRing(), deck.getRing())); + } for (String card : deck.getAdventureCards()) { deckWithErrata.addCard(_errataCardMap.getOrDefault(card, card)); }