Modify cost

This commit is contained in:
marcin.sciesinski
2019-09-02 21:58:57 -07:00
parent 31056628f4
commit dd40d65aa7
5 changed files with 96 additions and 0 deletions

View File

@@ -562,6 +562,48 @@
}
]
},
"40_80": {
"title": "*Keep it Secret, Keep it Safe",
"culture": "gandalf",
"cost": 1,
"type": "condition",
"keyword": "support area",
"effects": [
{
"type": "extraCost",
"cost": {
"type": "exert",
"filter": "choose(name(Gandalf))"
}
},
{
"type": "modifyCost",
"condition": [
{
"type": "canSpot",
"filter": "name(Gandalf)"
},
{
"type": "haveInitiative",
"side": "free people"
}
],
"filter": "side(free people),or(artifact,condition,possession)",
"amount": -1
},
{
"type": "trigger",
"trigger": {
"type": "losesInitiative",
"side": "free people"
},
"effect": {
"type": "discard",
"filter": "self"
}
}
]
},
"40_86": {
"title": "Protector of the West",
"culture": "gandalf",

View File

@@ -29,6 +29,7 @@ public class EffectFieldProcessor implements FieldProcessor {
effectProcessors.put("cantbeexerted", new CantBeExerted());
effectProcessors.put("extracost", new ExtraCost());
effectProcessors.put("cantbeoverwhelmedmultiplier", new CantBeOverwhelmedMultiplier());
effectProcessors.put("modifycost", new ModifyCost());
}
@Override

View File

@@ -0,0 +1,32 @@
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.Filterable;
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
import org.json.simple.JSONObject;
public class ModifyCost implements EffectProcessor {
@Override
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(value, "condition", "filter", "amount");
final JSONObject[] conditionArray = FieldUtils.getObjectArray(value.get("condition"), "condition");
final String filter = FieldUtils.getString(value.get("filter"), "filter");
final Requirement[] conditions = environment.getRequirementFactory().getRequirements(conditionArray, environment);
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
final ValueSource amountSource = ValueResolver.resolveEvaluator(value.get("amount"), 0, environment);
blueprint.appendInPlayModifier(
actionContext -> {
final Filterable filterable = filterableSource.getFilterable(actionContext);
final RequirementCondition requirementCondition = new RequirementCondition(conditions, actionContext);
final Evaluator evaluator = amountSource.getEvaluator(actionContext);
return new TwilightCostModifier(actionContext.getSource(), filterable, requirementCondition, evaluator);
});
}
}

View File

@@ -0,0 +1,20 @@
package com.gempukku.lotro.cards.build.field.effect.requirement;
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.field.FieldUtils;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.logic.timing.PlayConditions;
import org.json.simple.JSONObject;
public class HaveInitiative implements RequirementProducer {
@Override
public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "side");
Side side = FieldUtils.getEnum(Side.class, object.get("side"), "side");
return (actionContext) -> PlayConditions.hasInitiative(actionContext.getGame(), side);
}
}

View File

@@ -23,6 +23,7 @@ public class RequirementFactory {
requirementProducers.put("ringisactive", new RingIsActive());
requirementProducers.put("memorymatches", new MemoryMatches());
requirementProducers.put("cantspotfpcultures", new CantSpotFPCultures());
requirementProducers.put("haveinitiative", new HaveInitiative());
}
public Requirement getRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {