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 dd7c44984..fa6f57a42 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 @@ -91,6 +91,11 @@ public class DeckRequestHandler extends LotroServerRequestHandler implements Uri format.validateDeck(deck); valid.append("" + format.getName() + ": valid
"); } catch (DeckInvalidException exp) { + if (!format.getErrataCardMap().isEmpty()) { + LotroDeck deckWithErrata = format.applyErrata(deck); + format.validateDeck(deckWithErrata); + valid.append("" + format.getName() + ": valid (with PC errata)
"); + } invalid.append("" + format.getName() + ": " + exp.getMessage() + "
"); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java index e3cee71e4..95145a0e8 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java @@ -27,6 +27,8 @@ public interface LotroFormat { public void validateDeck(LotroDeck deck) throws DeckInvalidException; + public LotroDeck applyErrata(LotroDeck deck); + public List getValidSets(); public List getBannedCards(); 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 cd1f1f3a7..51e7b28d5 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 @@ -237,11 +237,6 @@ public class DefaultLotroFormat implements LotroFormat { if (bannedBlueprintId.equals(blueprintId) || (allAlternates != null && allAlternates.contains(bannedBlueprintId))) 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 @@ -330,6 +325,20 @@ 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())); + for (String card : deck.getAdventureCards()) { + deckWithErrata.addCard(_errataCardMap.getOrDefault(card, card)); + } + for (String site : deck.getSites()) { + deckWithErrata.addSite(_errataCardMap.getOrDefault(site, site)); + } + return deckWithErrata; + } + private void validateDeckStructure(LotroDeck deck) throws DeckInvalidException, CardNotFoundException { if (deck.getAdventureCards().size() < _minimumDeckSize) throw new DeckInvalidException("Deck contains below minimum number of cards: " + deck.getAdventureCards().size() + "<" + _minimumDeckSize); 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 3d485d247..056bc9fe9 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 @@ -529,6 +529,7 @@ public class HallServer extends AbstractServer { throw new HallException("You don't have a deck registered yet"); try { + lotroDeck = format.applyErrata(lotroDeck); lotroDeck = validateUserAndDeck(format, player, collectionType, lotroDeck); } catch (DeckInvalidException e) { throw new HallException("Your selected deck is not valid for this format: " + e.getMessage());