Couple of cards

This commit is contained in:
marcin.sciesinski
2019-08-28 20:39:36 -07:00
parent 2781dbfead
commit 2f6a5ba0c0
5 changed files with 146 additions and 11 deletions

View File

@@ -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",

View File

@@ -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 {

View File

@@ -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;
};
}
}

View File

@@ -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);
}

View File

@@ -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);
});
}
}