Effect tweaks

- Converted PreventExert to a generic PreventCardEffectAppender
- Deleted ReduceArcheryTotal and converted the relevant cards to use a choosenumber/modifyarchery effect combo
- Altered PlaySite to use SiteBlock's existing parsing instead of the generic enum parse
- Deleted unused parameter on RemoveAllTokens
This commit is contained in:
Christian 'ketura' McCarty
2024-05-31 23:36:28 -05:00
parent 291fcd43fa
commit 48f7157b62
6 changed files with 57 additions and 17 deletions

View File

@@ -128,10 +128,24 @@
# phase: archery
# cost: [
# {
# type: reduceArcheryTotal
# side: free people
# memorize: reducedBy
# }
# type: chooseANumber
# text: Choose X (reduce fellowship archery total)
# from: 0
# to: {
# type: archeryTotal
# side: free peoples
# }
# memorize: x
# }
# {
# type: modifyArcheryTotal
# side: free peoples
# amount: {
# type: fromMemory
# memory: x
# multiplier: -1
# }
# }
# ]
# effect: [
# {
@@ -139,7 +153,7 @@
# filter: self
# amount: {
# type: fromMemory
# memory: reducedBy
# memory: x
# }
# until:start(regroup)
# }

View File

@@ -16,16 +16,32 @@
type: canSpot
filter: elf,archer,companion
}
cost: {
type: reduceArcheryTotal
side: free people
memorize: reducedBy
}
cost: [
{
type: chooseANumber
text: Choose X (reduce fellowship archery total)
from: 0
to: {
type: archeryTotal
side: free people
}
memorize: x
}
{
type: modifyArcheryTotal
side: free people
amount: {
type: fromMemory
memory: x
multiplier: -1
}
}
]
effect: {
type: discard
count: {
type: fromMemory
memory: reducedBy
memory: x
}
select: choose(side(shadow),condition)
}

View File

@@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.build.field;
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.common.SitesBlock;
import org.hjson.JsonValue;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@@ -76,6 +77,16 @@ public class FieldUtils {
}
}
public static SitesBlock getBlock(Object value, String key) throws InvalidCardDefinitionException {
final String string = getString(value, key);
if (string == null)
throw new InvalidCardDefinitionException("Unknown block '" + string + "' in " + key + " field");
final SitesBlock block = SitesBlock.findBlock(string);
if (block == null)
throw new InvalidCardDefinitionException("Unknown block '" + string + "' in " + key + " field");
return block;
}
public static Side getSide(Object value, String key) throws InvalidCardDefinitionException {
final String string = getString(value, key);
if (string == null)

View File

@@ -109,12 +109,12 @@ public class EffectAppenderFactory {
effectAppenderProducers.put("preventaddingallburdens", new PreventAddingAllBurdens());
effectAppenderProducers.put("preventallwounds", new PreventAllWounds());
effectAppenderProducers.put("preventburden", new PreventEffect());
effectAppenderProducers.put("preventdiscard", new PreventCardEffectAppender());
effectAppenderProducers.put("preventeffect", new PreventEffect());
effectAppenderProducers.put("preventexert", new PreventExert());
effectAppenderProducers.put("preventtwilight", new PreventEffect());
effectAppenderProducers.put("preventdiscard", new PreventCardEffectAppender());
effectAppenderProducers.put("preventexert", new PreventCardEffectAppender());
effectAppenderProducers.put("preventheal", new PreventCardEffectAppender());
effectAppenderProducers.put("preventspecialability", new PreventSpecialAbility());
effectAppenderProducers.put("preventtwilight", new PreventEffect());
effectAppenderProducers.put("preventwound", new PreventWound());
effectAppenderProducers.put("putcardsfromdeckintohand", new PutCardsFromDeckIntoHand());
effectAppenderProducers.put("putcardsfromdeckontopofdeck", new PutCardsFromDeckOnTopOfDeck());
@@ -133,7 +133,6 @@ public class EffectAppenderFactory {
effectAppenderProducers.put("putrandomcardfromhandbeneathdrawdeck", new PutRandomCardFromHandBeneathDrawDeck());
effectAppenderProducers.put("putstackedcardsintohand", new PutStackedCardsIntoHand());
effectAppenderProducers.put("reconcilehand", new ReconcileHand());
effectAppenderProducers.put("reducearcherytotal", new ReduceArcheryTotal());
effectAppenderProducers.put("refreshself", new RefreshSelf());
effectAppenderProducers.put("reinforcetokens", new ReinforceTokens());
effectAppenderProducers.put("removealltokens", new RemoveAllTokens());

View File

@@ -21,7 +21,7 @@ public class PlaySite implements EffectAppenderProducer {
@Override
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "block", "filter", "number", "memorize", "player");
final SitesBlock block = FieldUtils.getEnum(SitesBlock.class, effectObject.get("block"), "block");
final SitesBlock block = FieldUtils.getBlock(effectObject.get("block"), "block");
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "any");
final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("number"), environment);
final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize");

View File

@@ -24,7 +24,7 @@ import java.util.Map;
public class RemoveAllTokens implements EffectAppenderProducer {
@Override
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "select", "memorize");
FieldUtils.validateAllowedFields(effectObject, "select");
final String select = FieldUtils.getString(effectObject.get("select"), "select", "self");