From c64db4ff39306eee8547d1c07eb9ede6ef1f1acc Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Wed, 27 Jul 2022 01:35:30 -0500 Subject: [PATCH] Improvements to the JSON definitions - Revamped Side parsing so that various aliases can be used such as "freeps" - Rooted out forRegionNumber value, which was a misnomer and should have been regionNumber - added regionNumber parameter filter which uses similar logic to the siteNumber filter - added aliases for ring bound ("ring-bound" and "ringbound") - removed IsMore condition - added a slew of related comparison conditions: IsEqual, IsGreaterThan, IsGreaterThanOrEqual, IsLessThan, IsLessThanOrEqual, IsNotEqual --- .../src/main/web/cards/set1/set1-elven.json | 2 +- .../src/main/web/cards/set1/set1-sauron.json | 4 +-- .../cards/set101/set101_elven_playtest.json | 2 +- .../src/main/web/cards/set14.json | 10 ++++---- .../src/main/web/cards/set31/set31-fp.json | 2 +- .../src/main/web/cards/set32/set32-fp.json | 2 +- .../main/web/cards/set40/set40-isengard.json | 2 +- .../java/com/gempukku/lotro/common/Side.java | 16 +++++++++++- .../appender/resolver/ValueResolver.java | 3 +-- .../field/effect/filter/FilterFactory.java | 22 +++++++++++++++- .../field/effect/requirement/IsEqual.java | 25 +++++++++++++++++++ .../{IsMore.java => IsGreaterThan.java} | 2 +- .../requirement/IsGreaterThanOrEqual.java | 25 +++++++++++++++++++ .../field/effect/requirement/IsLessThan.java | 25 +++++++++++++++++++ .../effect/requirement/IsLessThanOrEqual.java | 25 +++++++++++++++++++ .../field/effect/requirement/IsNotEqual.java | 25 +++++++++++++++++++ .../requirement/RequirementFactory.java | 7 +++++- .../com/gempukku/lotro/filters/Filters.java | 15 +++++++---- 18 files changed, 191 insertions(+), 23 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsEqual.java rename gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/{IsMore.java => IsGreaterThan.java} (95%) create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsGreaterThanOrEqual.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsLessThan.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsLessThanOrEqual.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsNotEqual.java diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-elven.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-elven.json index 004b5c311..291c43e46 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-elven.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-elven.json @@ -208,7 +208,7 @@ { "type": "conditional", "condition": { - "type": "isMore", + "type": "isGreaterThan", "firstNumber": { "type": "forEachMatchingInMemory", "memory": "cardsInHand", diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-sauron.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-sauron.json index 0a5c4de8e..9cf80ba3e 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-sauron.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-sauron.json @@ -139,7 +139,7 @@ "keyword": "maneuver", "condition": [ { - "type": "isMore", + "type": "isGreaterThan", "firstNumber": { "type": "sum", "source": [ @@ -995,7 +995,7 @@ "limit": 1 }, { - "type": "isMore", + "type": "isGreaterThan", "firstNumber": { "type": "forEachInDeadPile", "filter": "companion" diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_elven_playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_elven_playtest.json index a12645b8e..5e430b2d9 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_elven_playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_elven_playtest.json @@ -64,7 +64,7 @@ "count": 1 }, { - "type": "isMore", + "type": "isGreaterThan", "firstNumber": { "type": "countStacked", "on": "self", diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set14.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set14.json index f7a0a8b05..6540e460a 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set14.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set14.json @@ -123,7 +123,7 @@ "phase": "archery" }, "condition": { - "type": "isMore", + "type": "isGreaterThan", "firstNumber": { "type": "forEachYouCanSpot", "filter": "minion" @@ -164,7 +164,7 @@ "modifier": { "type": "modifyArcheryTotal", "condition": { - "type": "isMore", + "type": "isGreaterThan", "firstNumber": { "type": "forEachYouCanSpot", "filter": "minion" @@ -298,7 +298,7 @@ "filter": "self" }, "condition": { - "type": "isMore", + "type": "isGreaterThan", "firstNumber": { "type": "forEachYouCanSpot", "filter": "minion" @@ -402,7 +402,7 @@ "phase": "regroup" }, "condition": { - "type": "isMore", + "type": "isGreaterThan", "firstNumber": { "type": "forEachYouCanSpot", "filter": "character,man" @@ -439,7 +439,7 @@ "phase": "assignment" }, "condition": { - "type": "isMore", + "type": "isGreaterThan", "firstNumber": { "type": "forEachYouCanSpot", "filter": "companion" diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-fp.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-fp.json index f8b915bd6..8fd0cfa4f 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-fp.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-fp.json @@ -303,7 +303,7 @@ "type": "activated", "phase": "maneuver", "condition": { - "type": "isMore", + "type": "isGreaterThan", "firstNumber": { "type": "forEachYouCanSpot", "filter": "minion" diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set32/set32-fp.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set32/set32-fp.json index 91486e7c1..bbdc5aff0 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set32/set32-fp.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set32/set32-fp.json @@ -129,7 +129,7 @@ "type": "activated", "phase": "maneuver", "condition": { - "type": "isMore", + "type": "isGreaterThan", "firstNumber": { "type": "forEachYouCanSpot", "filter": "minion" diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-isengard.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-isengard.json index 51eab5ed8..db2a27a4b 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-isengard.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-isengard.json @@ -516,7 +516,7 @@ "effect": { "type": "addThreats", "amount": { - "type": "forRegionNumber" + "type": "regionNumber" } } } diff --git a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Side.java b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Side.java index 7d031dd15..06da5c0c6 100644 --- a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Side.java +++ b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Side.java @@ -1,5 +1,19 @@ package com.gempukku.lotro.common; public enum Side implements Filterable { - FREE_PEOPLE, SHADOW + FREE_PEOPLE, SHADOW; + + public static Side Parse(String value) { + value = value + .toLowerCase() + .replace("_", " ") + .replace("-", " "); + + if(value.contains("shadow")) + return SHADOW; + if(value.contains("freeps") || value.contains("free people") || value.contains("free peoples")) + return FREE_PEOPLE; + + return null; + } } 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 f5bd2e1be..bd04803c1 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 @@ -102,8 +102,7 @@ public class ValueResolver { return actionContext -> (game, cardAffected) -> { return actionContext.getCardFromMemory(memory).getSiteNumber(); }; - } else if (type.equalsIgnoreCase("forRegionNumber")) { - FieldUtils.validateAllowedFields(object); + } else if (type.equalsIgnoreCase("regionNumber")) { return (actionContext) -> (game, cardAffected) -> GameUtils.getRegion(actionContext.getGame()); } else if (type.equalsIgnoreCase("forEachInMemory")) { FieldUtils.validateAllowedFields(object, "memory", "limit"); 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 990f81151..02cc2728e 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 @@ -57,6 +57,10 @@ public class FilterFactory { }); simpleFilters.put("ring bound", (actionContext) -> Filters.ringBoundCompanion); + simpleFilters.put("ringbound", + (actionContext) -> Filters.ringBoundCompanion); + simpleFilters.put("ring-bound", + (actionContext) -> Filters.ringBoundCompanion); simpleFilters.put("unbound", (actionContext) -> Filters.unboundCompanion); simpleFilters.put("attachedtoinsameregion", @@ -115,7 +119,7 @@ public class FilterFactory { return Filters.or(cultures.toArray(new Culture[0])); })); parameterFilters.put("side", (parameter, environment) -> { - final Side side = Side.valueOf(parameter.toUpperCase().replace(" ", "_")); + final Side side = Side.Parse(parameter); if (side == null) throw new InvalidCardDefinitionException("Unable to find side for: " + parameter); @@ -268,6 +272,22 @@ public class FilterFactory { return (actionContext) -> Filters.siteNumberBetweenInclusive(min, max); }); + parameterFilters.put("regionNumber", + (parameter, environment) -> { + int min, max; + if (parameter.contains("-")) { + final String[] split = parameter.split("-", 2); + min = Integer.parseInt(split[0]); + max = Integer.parseInt(split[1]); + } else { + min = max = Integer.parseInt(parameter); + } + + if(min < 0 || max > 3 || max < min) + throw new InvalidCardDefinitionException("Region number definition is invalid: " + parameter); + + return (actionContext) -> Filters.regionNumberBetweenInclusive(min, max); + }); parameterFilters.put("or", (parameter, environment) -> { final String[] filters = splitIntoFilters(parameter); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsEqual.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsEqual.java new file mode 100644 index 000000000..daa61a8fc --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsEqual.java @@ -0,0 +1,25 @@ +package com.gempukku.lotro.cards.build.field.effect.requirement; + +import com.gempukku.lotro.cards.build.CardGenerationEnvironment; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +import com.gempukku.lotro.cards.build.Requirement; +import com.gempukku.lotro.cards.build.ValueSource; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; +import org.json.simple.JSONObject; + +public class IsEqual implements RequirementProducer { + @Override + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "firstNumber", "secondNumber"); + + final ValueSource firstNumber = ValueResolver.resolveEvaluator(object.get("firstNumber"), environment); + final ValueSource secondNumber = ValueResolver.resolveEvaluator(object.get("secondNumber"), environment); + + return actionContext -> { + final int first = firstNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); + final int second = secondNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); + return first == second; + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsMore.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsGreaterThan.java similarity index 95% rename from gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsMore.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsGreaterThan.java index 641a4a37e..4453fb8ed 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsMore.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsGreaterThan.java @@ -8,7 +8,7 @@ import com.gempukku.lotro.cards.build.field.FieldUtils; import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; import org.json.simple.JSONObject; -public class IsMore implements RequirementProducer { +public class IsGreaterThan implements RequirementProducer { @Override public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(object, "firstNumber", "secondNumber"); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsGreaterThanOrEqual.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsGreaterThanOrEqual.java new file mode 100644 index 000000000..21c11d1df --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsGreaterThanOrEqual.java @@ -0,0 +1,25 @@ +package com.gempukku.lotro.cards.build.field.effect.requirement; + +import com.gempukku.lotro.cards.build.CardGenerationEnvironment; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +import com.gempukku.lotro.cards.build.Requirement; +import com.gempukku.lotro.cards.build.ValueSource; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; +import org.json.simple.JSONObject; + +public class IsGreaterThanOrEqual implements RequirementProducer { + @Override + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "firstNumber", "secondNumber"); + + final ValueSource firstNumber = ValueResolver.resolveEvaluator(object.get("firstNumber"), environment); + final ValueSource secondNumber = ValueResolver.resolveEvaluator(object.get("secondNumber"), environment); + + return actionContext -> { + final int first = firstNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); + final int second = secondNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); + return first >= second; + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsLessThan.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsLessThan.java new file mode 100644 index 000000000..bad84aba7 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsLessThan.java @@ -0,0 +1,25 @@ +package com.gempukku.lotro.cards.build.field.effect.requirement; + +import com.gempukku.lotro.cards.build.CardGenerationEnvironment; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +import com.gempukku.lotro.cards.build.Requirement; +import com.gempukku.lotro.cards.build.ValueSource; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; +import org.json.simple.JSONObject; + +public class IsLessThan implements RequirementProducer { + @Override + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "firstNumber", "secondNumber"); + + final ValueSource firstNumber = ValueResolver.resolveEvaluator(object.get("firstNumber"), environment); + final ValueSource secondNumber = ValueResolver.resolveEvaluator(object.get("secondNumber"), environment); + + return actionContext -> { + final int first = firstNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); + final int second = secondNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); + return first < second; + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsLessThanOrEqual.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsLessThanOrEqual.java new file mode 100644 index 000000000..71553d346 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsLessThanOrEqual.java @@ -0,0 +1,25 @@ +package com.gempukku.lotro.cards.build.field.effect.requirement; + +import com.gempukku.lotro.cards.build.CardGenerationEnvironment; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +import com.gempukku.lotro.cards.build.Requirement; +import com.gempukku.lotro.cards.build.ValueSource; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; +import org.json.simple.JSONObject; + +public class IsLessThanOrEqual implements RequirementProducer { + @Override + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "firstNumber", "secondNumber"); + + final ValueSource firstNumber = ValueResolver.resolveEvaluator(object.get("firstNumber"), environment); + final ValueSource secondNumber = ValueResolver.resolveEvaluator(object.get("secondNumber"), environment); + + return actionContext -> { + final int first = firstNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); + final int second = secondNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); + return first <= second; + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsNotEqual.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsNotEqual.java new file mode 100644 index 000000000..8ee0adc19 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/IsNotEqual.java @@ -0,0 +1,25 @@ +package com.gempukku.lotro.cards.build.field.effect.requirement; + +import com.gempukku.lotro.cards.build.CardGenerationEnvironment; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +import com.gempukku.lotro.cards.build.Requirement; +import com.gempukku.lotro.cards.build.ValueSource; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; +import org.json.simple.JSONObject; + +public class IsNotEqual implements RequirementProducer { + @Override + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "firstNumber", "secondNumber"); + + final ValueSource firstNumber = ValueResolver.resolveEvaluator(object.get("firstNumber"), environment); + final ValueSource secondNumber = ValueResolver.resolveEvaluator(object.get("secondNumber"), environment); + + return actionContext -> { + final int first = firstNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); + final int second = secondNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null); + return first != second; + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java index 8ec7471c5..363930680 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java @@ -32,7 +32,12 @@ public class RequirementFactory { requirementProducers.put("hasinhand", new HasInHand()); requirementProducers.put("hasinzonedata", new HasInZoneData()); requirementProducers.put("haveinitiative", new HaveInitiative()); - requirementProducers.put("ismore", new IsMore()); + requirementProducers.put("isequal", new IsEqual()); + requirementProducers.put("isgreaterthan", new IsGreaterThan()); + requirementProducers.put("isgreaterthanorequal", new IsGreaterThanOrEqual()); + requirementProducers.put("islessthan", new IsLessThan()); + requirementProducers.put("islessthanorequal", new IsLessThanOrEqual()); + requirementProducers.put("isnotequal", new IsNotEqual()); requirementProducers.put("isowner", new IsOwnerRequirementProducer()); requirementProducers.put("isside", new IsSideRequirementProducer()); requirementProducers.put("location", new Location()); 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 61cf252e6..2a647e8f0 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 @@ -744,8 +744,6 @@ public class Filters { } }; - - public static Filter siteNumber(final int siteNumber) { return siteNumberBetweenInclusive(siteNumber, siteNumber); } @@ -775,12 +773,19 @@ public class Filters { } }); - public static Filter region(final int region) { + public static Filter region(final int region) { return regionNumberBetweenInclusive(region, region); } + + public static Filter regionNumberBetweenInclusive(final int minRegionNumber, final int maxRegionNumber) { return new Filter() { @Override public boolean accepts(LotroGame game, PhysicalCard physicalCard) { - int siteNumber = physicalCard.getSiteNumber(); - return GameUtils.getRegion(siteNumber) == region; + + if(physicalCard.getSiteNumber() == null) + return false; + + int regionNumber = GameUtils.getRegion(physicalCard.getSiteNumber()); + + return regionNumber >= minRegionNumber && regionNumber <= maxRegionNumber; } }; }