Couple of cards
This commit is contained in:
@@ -445,6 +445,82 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_14": {
|
||||
"title": "Dwarven Vigor",
|
||||
"unique": true,
|
||||
"side": "free people",
|
||||
"culture": "dwarven",
|
||||
"cost": 1,
|
||||
"type": "condition",
|
||||
"keyword": "support area",
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "self,hasStacked(culture(dwarven))"
|
||||
},
|
||||
"filter": "dwarf",
|
||||
"amount": {
|
||||
"type": "forEachVitality",
|
||||
"over": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_15": {
|
||||
"title": "Endurance of Dwarves",
|
||||
"side": "free people",
|
||||
"culture": "dwarven",
|
||||
"cost": 1,
|
||||
"type": "condition",
|
||||
"vitality": 1,
|
||||
"target": "dwarf",
|
||||
"effects": {
|
||||
"type": "activated",
|
||||
"phase": "skirmish",
|
||||
"cost": [
|
||||
{
|
||||
"type": "memorize",
|
||||
"filter": "hasAttached(self)",
|
||||
"memory": "bearer"
|
||||
},
|
||||
{
|
||||
"type": "discard",
|
||||
"filter": "self"
|
||||
}
|
||||
],
|
||||
"effect": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "memory(bearer)",
|
||||
"amount": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_16": {
|
||||
"title": "Festive Folk",
|
||||
"side": "free people",
|
||||
"culture": "dwarven",
|
||||
"cost": 1,
|
||||
"type": "event",
|
||||
"keyword": "fellowship",
|
||||
"effects": {
|
||||
"type": "event",
|
||||
"cost": [
|
||||
{
|
||||
"type": "exert",
|
||||
"filter": "choose(dwarf)"
|
||||
},
|
||||
{
|
||||
"type": "discardStackedCards",
|
||||
"count": 1,
|
||||
"on": "culture(dwarven),condition"
|
||||
}
|
||||
],
|
||||
"effect": {
|
||||
"type": "removeBurdens",
|
||||
"amount": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_184": {
|
||||
"title": "Black Steed",
|
||||
"subtitle": "Bred to Serve",
|
||||
|
||||
@@ -41,6 +41,7 @@ public class EffectAppenderFactory {
|
||||
effectAppenderProducers.put("putstackedcardsintohand", new PutStackedCardsIntoHand());
|
||||
effectAppenderProducers.put("condition", new ConditionEffect());
|
||||
effectAppenderProducers.put("drawcards", new DrawCards());
|
||||
effectAppenderProducers.put("removeburdens", new RemoveBurdens());
|
||||
}
|
||||
|
||||
public EffectAppender getEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.appender;
|
||||
|
||||
import com.gempukku.lotro.cards.build.*;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppender;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||
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.effects.RemoveBurdenEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class RemoveBurdens implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "player", "amount");
|
||||
|
||||
final String player = FieldUtils.getString(effectObject.get("player"), "player", "owner");
|
||||
final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment);
|
||||
final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("amount"), 1, environment);
|
||||
|
||||
return new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
final String removingPlayer = playerSource.getPlayer(playerId, game, self, effectResult, effect);
|
||||
final Evaluator evaluator = valueSource.getEvaluator(null, playerId, game, self, effectResult, effect);
|
||||
return new RemoveBurdenEffect(removingPlayer, self, evaluator.evaluateExpression(game, null));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayableInFull(String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
final Evaluator evaluator = valueSource.getEvaluator(null, playerId, game, self, effectResult, effect);
|
||||
final int burdens = evaluator.evaluateExpression(game, null);
|
||||
return game.getModifiersQuerying().canRemoveBurden(game, self)
|
||||
&& game.getGameState().getBurdens() >= burdens;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Requirement createCostRequirement(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "player", "amount");
|
||||
|
||||
final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("amount"), 1, environment);
|
||||
|
||||
return (action, playerId, game, self, effectResult, effect) -> {
|
||||
final Evaluator evaluator = valueSource.getEvaluator(null, playerId, game, self, effectResult, effect);
|
||||
final int burdens = evaluator.evaluateExpression(game, null);
|
||||
return game.getModifiersQuerying().canRemoveBurden(game, self)
|
||||
&& game.getGameState().getBurdens() >= burdens;
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -83,6 +83,9 @@ public class ValueResolver {
|
||||
final Filterable on1 = onFilter.getFilterable(playerId, game, self, effectResult, effect);
|
||||
return new CountStackedEvaluator(on1, Filters.any);
|
||||
};
|
||||
} else if (type.equalsIgnoreCase("forEachVitality")) {
|
||||
final int over = FieldUtils.getInteger(object.get("over"), "over", 0);
|
||||
return (action, playerId, game, self, effectResult, effect) -> (game1, cardAffected) -> Math.max(0, game1.getModifiersQuerying().getVitality(game1, cardAffected) - over);
|
||||
}
|
||||
throw new InvalidCardDefinitionException("Unrecognized type of an evaluator " + type);
|
||||
}
|
||||
|
||||
@@ -3,10 +3,9 @@ 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.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class ModifyStrength implements EffectProcessor {
|
||||
@@ -14,7 +13,7 @@ public class ModifyStrength implements EffectProcessor {
|
||||
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(value, "filter", "condition", "amount");
|
||||
|
||||
final int amount = FieldUtils.getInteger(value.get("amount"), "amount");
|
||||
final ValueSource valueSource = ValueResolver.resolveEvaluator(value.get("amount"), 1, environment);
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(value.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(value.get("filter"), "filter", "self");
|
||||
|
||||
@@ -22,13 +21,11 @@ public class ModifyStrength implements EffectProcessor {
|
||||
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||
|
||||
blueprint.appendInPlayModifier(
|
||||
new ModifierSource() {
|
||||
@Override
|
||||
public Modifier getModifier(LotroGame game, PhysicalCard self) {
|
||||
return new StrengthModifier(self,
|
||||
filterableSource.getFilterable(null, game, self, null, null),
|
||||
new RequirementCondition(requirements, null, self, null, null), amount);
|
||||
}
|
||||
(game, self) -> {
|
||||
final Evaluator evaluator = valueSource.getEvaluator(null, null, game, self, null, null);
|
||||
return new StrengthModifier(self,
|
||||
filterableSource.getFilterable(null, game, self, null, null),
|
||||
new RequirementCondition(requirements, null, self, null, null), evaluator);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user