diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40.json index 2087cdbff..07764561d 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40.json @@ -423,6 +423,28 @@ ] } }, + "40_13": { + "title": "Dwarven Ire", + "unique": true, + "side": "free people", + "culture": "dwarven", + "cost": 2, + "type": "condition", + "keyword": "support area", + "effects": { + "type": "addKeyword", + "filter": "dwarf", + "keyword": "damage", + "amount": { + "type": "limit", + "value": 2, + "amount": { + "type": "countStacked", + "on": "self" + } + } + } + }, "40_184": { "title": "Black Steed", "subtitle": "Bred to Serve", 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 22109bee5..3cf35046b 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 @@ -1,15 +1,16 @@ package com.gempukku.lotro.cards.build.field.effect.appender.resolver; -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.*; import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.common.Filterable; +import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator; +import com.gempukku.lotro.logic.modifiers.evaluator.CountStackedEvaluator; import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; +import com.gempukku.lotro.logic.modifiers.evaluator.LimitEvaluator; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; import org.json.simple.JSONObject; @@ -69,6 +70,19 @@ public class ValueResolver { final int count = action.getCardsFromMemory(memory).size(); return new ConstantEvaluator(count); }; + } else if (type.equalsIgnoreCase("limit")) { + final int limit = FieldUtils.getInteger(object.get("value"), "value"); + ValueSource valueSource = resolveEvaluator(object.get("amount"), 0, environment); + return (action, playerId, game, self, effectResult, effect) -> new LimitEvaluator(valueSource.getEvaluator(action, playerId, game, self, effectResult, effect), limit); + } else if (type.equalsIgnoreCase("countStacked")) { + final String on = FieldUtils.getString(object.get("on"), "on"); + + final FilterableSource onFilter = environment.getFilterFactory().generateFilter(on); + + return (action, playerId, game, self, effectResult, effect) -> { + final Filterable on1 = onFilter.getFilterable(playerId, game, self, effectResult, effect); + return new CountStackedEvaluator(on1, Filters.any); + }; } throw new InvalidCardDefinitionException("Unrecognized type of an evaluator " + type); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/AddKeyword.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/AddKeyword.java index a540a9882..3905895f9 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/AddKeyword.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/AddKeyword.java @@ -3,17 +3,19 @@ package com.gempukku.lotro.cards.build.field.effect.modifier; import com.gempukku.lotro.cards.build.*; import com.gempukku.lotro.cards.build.field.EffectProcessor; import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.modifiers.KeywordModifier; import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; import org.json.simple.JSONObject; public class AddKeyword implements EffectProcessor { @Override public void processEffect(JSONObject effectObject, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(effectObject, "filter", "condition", "keyword"); + FieldUtils.validateAllowedFields(effectObject, "filter", "condition", "keyword", "amount"); final JSONObject[] conditionArray = FieldUtils.getObjectArray(effectObject.get("condition"), "condition"); final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "self"); @@ -24,7 +26,8 @@ public class AddKeyword implements EffectProcessor { int value = 1; if (keywordSplit.length == 2) value = Integer.parseInt(keywordSplit[1]); - final int keywordValue = value; + + final ValueSource amount = ValueResolver.resolveEvaluator(effectObject.get("amount"), value, environment); final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter); final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment); @@ -33,9 +36,10 @@ public class AddKeyword implements EffectProcessor { new ModifierSource() { @Override public Modifier getModifier(LotroGame game, PhysicalCard self) { + final Evaluator evaluator = amount.getEvaluator(null, null, game, self, null, null); return new KeywordModifier(self, filterableSource.getFilterable(null, game, self, null, null), - new RequirementCondition(requirements, null, self, null, null), keyword, keywordValue); + new RequirementCondition(requirements, null, self, null, null), keyword, evaluator); } }); }