Updated PreventWound to permit memorizing of the unit that had its wound prevented. Updated RevealCardsFromHand to permit targeting either player. Added CantBeAssignedToSkirmish modifier (mostly for Saruman's sake).

This commit is contained in:
Christian 'ketura' McCarty
2021-02-06 19:06:41 -06:00
parent dadd6c4479
commit 6465cbfb35
4 changed files with 60 additions and 9 deletions

View File

@@ -23,9 +23,10 @@ import java.util.Collection;
public class PreventWound implements EffectAppenderProducer {
@Override
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "filter");
FieldUtils.validateAllowedFields(effectObject, "filter", "memorize");
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "all(any)");
final String memory = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp");
MultiEffectAppender result = new MultiEffectAppender();
@@ -34,12 +35,12 @@ public class PreventWound implements EffectAppenderProducer {
(actionContext) -> {
final PreventableCardEffect preventableEffect = (PreventableCardEffect) actionContext.getEffect();
return Filters.in(preventableEffect.getAffectedCardsMinusPrevented(actionContext.getGame()));
}, new ConstantEvaluator(1), "_temp", "you", "Choose characters to prevent effect to", environment));
}, new ConstantEvaluator(1), memory, "you", "Choose characters to prevent effect to", environment));
result.addEffectAppender(
new DelayedAppender() {
@Override
protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) {
final Collection<? extends PhysicalCard> cards = actionContext.getCardsFromMemory("_temp");
final Collection<? extends PhysicalCard> cards = actionContext.getCardsFromMemory(memory);
final PreventableCardEffect preventableEffect = (PreventableCardEffect) actionContext.getEffect();
return new PreventCardEffect(preventableEffect, Filters.in(cards));

View File

@@ -1,13 +1,11 @@
package com.gempukku.lotro.cards.build.field.effect.appender;
import com.gempukku.lotro.cards.build.ActionContext;
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
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.cards.build.field.effect.EffectAppender;
import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolver;
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.logic.actions.CostToEffectAction;
@@ -20,17 +18,19 @@ import java.util.Collection;
public class RevealCardsFromHand implements EffectAppenderProducer {
@Override
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "count", "filter", "memorize");
FieldUtils.validateAllowedFields(effectObject, "count", "filter", "memorize", "hand");
final String hand = FieldUtils.getString(effectObject.get("hand"), "hand", "you");
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "choose(any)");
final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp");
final ValueSource countSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment);
MultiEffectAppender result = new MultiEffectAppender();
result.addEffectAppender(
CardResolver.resolveCardsInHand(filter, countSource, memorize, "you", "you", "Choose cards to reveal", environment));
CardResolver.resolveCardsInHand(filter, countSource, memorize, hand, hand, "Choose cards to reveal", environment));
result.addEffectAppender(
new DelayedAppender() {
@Override

View File

@@ -0,0 +1,49 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
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.appender.DelayedAppender;
import com.gempukku.lotro.cards.build.field.effect.appender.MultiEffectAppender;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolver;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.TimeResolver;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.logic.actions.CostToEffectAction;
import com.gempukku.lotro.logic.effects.AddUntilModifierEffect;
import com.gempukku.lotro.logic.modifiers.CantBeAssignedToSkirmishModifier;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.OverwhelmedByMultiplierModifier;
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
import com.gempukku.lotro.logic.timing.Effect;
import org.json.simple.JSONObject;
import java.util.Collection;
public class CantBeAssignedToSkirmish implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "filter", "condition");
final JSONObject[] conditionArray = FieldUtils.getObjectArray(effectObject.get("condition"), "condition");
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
MultiEffectAppender result = new MultiEffectAppender();
return new ModifierSource() {
@Override
public Modifier getModifier(ActionContext actionContext) {
return new CantBeAssignedToSkirmishModifier(actionContext.getSource(),
new RequirementCondition(requirements, actionContext),
filterableSource.getFilterable(actionContext));
}
};
}
}

View File

@@ -54,6 +54,7 @@ public class ModifierSourceFactory {
modifierProducers.put("hastomoveifable", new HasToMoveIfAble());
modifierProducers.put("allycanparticipateinarcheryfireandskirmishes", new AllyCanParticipateInArcheryFireAndSkirmishes());
modifierProducers.put("cantlookorrevealhand", new CantLookOrRevealHand());
modifierProducers.put("cantbeassignedtoskirmish", new CantBeAssignedToSkirmish());
}
public ModifierSource getModifier(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {