diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyRoamingPenalty.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyRoamingPenalty.java index 27edcc914..c99611e4f 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyRoamingPenalty.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyRoamingPenalty.java @@ -2,8 +2,10 @@ package com.gempukku.lotro.cards.build.field.effect.modifier; import com.gempukku.lotro.cards.build.*; import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.RoamingPenaltyModifier; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; import org.json.simple.JSONObject; public class ModifyRoamingPenalty implements ModifierSourceProducer { @@ -11,7 +13,7 @@ public class ModifyRoamingPenalty implements ModifierSourceProducer { public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(object, "filter", "requires", "amount"); - final int amount = FieldUtils.getInteger(object.get("amount"), "amount"); + final ValueSource valueSource = ValueResolver.resolveEvaluator(object.get("amount"), environment); final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires"); final String filter = FieldUtils.getString(object.get("filter"), "filter"); @@ -21,9 +23,10 @@ public class ModifyRoamingPenalty implements ModifierSourceProducer { return new ModifierSource() { @Override public Modifier getModifier(ActionContext actionContext) { + final Evaluator evaluator = valueSource.getEvaluator(actionContext); return new RoamingPenaltyModifier(actionContext.getSource(), filterableSource.getFilterable(actionContext), - RequirementCondition.createCondition(requirements, actionContext), amount); + RequirementCondition.createCondition(requirements, actionContext), evaluator); } }; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/RoamingPenaltyModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/RoamingPenaltyModifier.java index a7b7f8b7e..0a7f031dd 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/RoamingPenaltyModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/RoamingPenaltyModifier.java @@ -3,17 +3,29 @@ package com.gempukku.lotro.logic.modifiers; import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; public class RoamingPenaltyModifier extends AbstractModifier { - private final int _modifier; + private final Evaluator _evaluator; public RoamingPenaltyModifier(PhysicalCard source, Filterable affectFilter, Condition condition, int modifier) { - super(source, "Roaming penalty " + ((modifier > 0) ? ("+" + modifier) : modifier), affectFilter, condition, ModifierEffect.TWILIGHT_COST_MODIFIER); - _modifier = modifier; + this(source, affectFilter, condition, new ConstantEvaluator(modifier)); + } + + public RoamingPenaltyModifier(PhysicalCard source, Filterable affectFilter, Condition condition, Evaluator evaluator) { + super(source, null, affectFilter, condition, ModifierEffect.TWILIGHT_COST_MODIFIER); + _evaluator = evaluator; + } + + @Override + public String getText(LotroGame game, PhysicalCard self) { + int modifier = _evaluator.evaluateExpression(game, self); + return "Roaming penalty " + ((modifier > 0) ? ("+" + modifier) : modifier); } @Override public int getRoamingPenaltyModifier(LotroGame game, PhysicalCard physicalCard) { - return _modifier; + return _evaluator.evaluateExpression(game, physicalCard); } }