From e427a106491d3baf90e7bf6c1fa4771ae198e996 Mon Sep 17 00:00:00 2001 From: Troy Biesterfeld Date: Sat, 24 Apr 2021 11:21:21 -0500 Subject: [PATCH] Add Towers block errata --- .../cards/errata/set04-errata-playtest.json | 151 ++++++++++++++++++ .../appender/resolver/ValueResolver.java | 4 + .../field/effect/filter/FilterFactory.java | 4 +- .../com/gempukku/lotro/filters/Filters.java | 1 + 4 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set04-errata-playtest.json diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set04-errata-playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set04-errata-playtest.json new file mode 100644 index 000000000..5adcdd8a5 --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set04-errata-playtest.json @@ -0,0 +1,151 @@ +{ + "74_73": { + "title": "*Legolas", + "subtitle": "Dauntless Hunter", + "culture": "elven", + "cost": 2, + "type": "companion", + "race": "elf", + "strength": 6, + "vitality": 3, + "resistance": 6, + "signet": "aragorn", + "keyword": "archer", + "effects": { + "type": "modifier", + "modifier": { + "type": "modifyCost", + "filter": "side(shadow),or(event,condition)", + "amount": { + "type": "forEachYouCanSpot", + "filter": "unbound,hobbit", + "limit": 2 + } + } + } + }, + "74_192": { + "side": "shadow", + "site": 5, + "cost": 3, + "race": "Uruk-Hai", + "strength": 8, + "culture": "Isengard", + "vitality": 2, + "title": "Uruk Regular", + "type": "minion", + "keyword": "Damage+1", + "effects": { + "type": "activated", + "phase": "shadow", + "cost": { + "type": "exert", + "filter": "self" + }, + "effect": { + "type": "play", + "filter": "choose(uruk-hai)", + "cost": { + "type": "forEachYouCanSpot", + "filter": "not(self),uruk-hai", + "limit": 2, + "multiplier": -1 + } + } + } + }, + "74_276": { + "title": "*Fortress Never Fallen", + "culture": "rohan", + "cost": 2, + "type": "condition", + "keyword": "support area", + "effects": [ + { + "type": "trigger", + "optional": true, + "trigger": { + "type": "winsSkirmish", + "filter": "culture(rohan),man" + }, + "effect": { + "type": "addTokens", + "culture": "rohan", + "filter": "self" + } + }, + { + "type": "activated", + "phase": "regroup", + "cost": [ + { + "type": "memorizeNumber", + "memory": "numberOfTokens", + "amount": { + "type": "forEachToken", + "culture": "rohan", + "filter": "self" + } + } + ], + "effect": [ + { + "type": "discard", + "filter": "choose(side(shadow),condition)", + "count": { + "type": "fromMemory", + "memory": "numberOfTokens", + "limit": 4 + } + }, + { + "type": "discard", + "filter": "self" + } + ] + } + ] + }, + "74_304": { + "title": "Get On and Get Away", + "culture": "shire", + "cost": 0, + "type": "event", + "keyword": "fellowship", + "condition": { + "type": "or", + "condition": [ + { + "type": "canSpot", + "filter": "smeagol" + }, + { + "type": "canSpot", + "filter": "ring bound,hobbit", + "count": 2 + } + ] + }, + "effects": { + "type": "event", + "cost": { + "type": "addBurdens", + "amount": 2 + }, + "effect": [ + { + "type": "playSite", + "number": { + "type": "nextSiteNumber" + } + }, + { + "type": "playSite", + "number": { + "type": "siteNumberAfterNext" + } + } + ] + } + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java index e23469223..a0f84175d 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/ValueResolver.java @@ -92,6 +92,10 @@ public class ValueResolver { }; } else if (type.equalsIgnoreCase("siteNumber")) { return actionContext -> (game, cardAffected) -> game.getGameState().getCurrentSiteNumber(); + } else if (type.equalsIgnoreCase("nextSiteNumber")) { + return actionContext -> (game, cardAffected) -> game.getGameState().getCurrentSiteNumber() + 1; + } else if (type.equalsIgnoreCase("siteNumberAfterNext")) { + return actionContext -> (game, cardAffected) -> game.getGameState().getCurrentSiteNumber() + 2; } else if (type.equalsIgnoreCase("siteNumberInMemory")) { FieldUtils.validateAllowedFields(object, "memory"); final String memory = FieldUtils.getString(object.get("memory"), "memory"); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java index 291c95543..406c318c8 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java @@ -50,8 +50,10 @@ public class FilterFactory { final CharacterLostSkirmishResult lostSkirmish = (CharacterLostSkirmishResult) actionContext.getEffectResult(); return lostSkirmish.getLoser(); }); + simpleFilters.put("ring bound", + (actionContext) -> Filters.ringBoundCompanion); simpleFilters.put("unbound", - (actionContext) -> Filters.not(Keyword.RING_BOUND)); + (actionContext) -> Filters.unboundCompanion); simpleFilters.put("attachedtoinsameregion", actionContext -> { final PhysicalCard attachedTo = actionContext.getSource().getAttachedTo(); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java index 55deea50c..3737963f4 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java @@ -1060,6 +1060,7 @@ public class Filters { }; } + public static final Filter ringBoundCompanion = Filters.and(CardType.COMPANION, Keyword.RING_BOUND); public static final Filter unboundCompanion = Filters.and(CardType.COMPANION, Filters.not(Keyword.RING_BOUND)); public static final Filter roamingMinion = Filters.and(CardType.MINION, Keyword.ROAMING); public static final Filter mounted = Filters.or(Filters.hasAttached(PossessionClass.MOUNT), Keyword.MOUNTED);