Modify cost
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user