From 543ffdc45379793560412730329ebd0cf309de5c Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Sat, 1 Jun 2024 17:15:12 -0500 Subject: [PATCH] Fleshed out Spot's parameter checking a bit more. --- .../cards/official/set18/set18-Elven.hjson | 2 +- .../build/field/effect/appender/Spot.java | 36 +++++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set18/set18-Elven.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set18/set18-Elven.hjson index 35eebac0e..dc2ca692a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set18/set18-Elven.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set18/set18-Elven.hjson @@ -148,7 +148,7 @@ } { type: spot - select: name(Arwen) + filter: name(Arwen) } ] } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/Spot.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/Spot.java index 1f03e76b2..2a1c643c5 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/Spot.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/Spot.java @@ -21,22 +21,31 @@ public class Spot implements EffectAppenderProducer { FieldUtils.validateAllowedFields(effectObject, "count", "filter", "select", "memorize", "text"); final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); - String filter = FieldUtils.getString(effectObject.get("filter"), "filter"); - - if(StringUtils.isEmpty(filter)) { - filter = FieldUtils.getString(effectObject.get("select"), "select"); - } - - if(StringUtils.isEmpty(filter)) { - throw new InvalidCardDefinitionException("One of filter or select must be provided for Spot effect."); - } - + final String filter = FieldUtils.getString(effectObject.get("filter"), "filter"); + final String select = FieldUtils.getString(effectObject.get("select"), "select"); final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp"); final String text = FieldUtils.getString(effectObject.get("text"), "text", "Choose card to spot"); - final boolean skipMemorize = memorize.equals("_temp"); + final boolean selecting = !StringUtils.isEmpty(select); - if (skipMemorize) { + if(StringUtils.isEmpty(filter) && !selecting) { + throw new InvalidCardDefinitionException("One of 'filter' or 'select' must be provided for Spot effect."); + } + + if(!StringUtils.isEmpty(filter) && selecting) { + throw new InvalidCardDefinitionException("Cannot set both 'filter' and 'select' in Spot effect; use filter if the specific cards matter, and select if you memorize the result for later."); + } + + if(selecting && StringUtils.isEmpty(memorize)) { + throw new InvalidCardDefinitionException("If 'select' is set, 'memorize' must also be set in Spot effect."); + } + + + if (selecting) { + return CardResolver.resolveCards( + select, valueSource, memorize, "you", text, environment); + } + else { final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment); return new DelayedAppender() { @@ -56,9 +65,6 @@ public class Spot implements EffectAppenderProducer { return PlayConditions.canSpot(actionContext.getGame(), count, filterable); } }; - } else { - return CardResolver.resolveCards( - filter, valueSource, memorize, "you", text, environment); } } }