From 6465cbfb35bfaa5961e1395ac861936bc8ff6b03 Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Sat, 6 Feb 2021 19:06:41 -0600 Subject: [PATCH] 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). --- .../field/effect/appender/PreventWound.java | 7 +-- .../effect/appender/RevealCardsFromHand.java | 12 ++--- .../modifier/CantBeAssignedToSkirmish.java | 49 +++++++++++++++++++ .../modifier/ModifierSourceFactory.java | 1 + 4 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantBeAssignedToSkirmish.java diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PreventWound.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PreventWound.java index 03bf447b2..e457d4518 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PreventWound.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PreventWound.java @@ -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 cards = actionContext.getCardsFromMemory("_temp"); + final Collection cards = actionContext.getCardsFromMemory(memory); final PreventableCardEffect preventableEffect = (PreventableCardEffect) actionContext.getEffect(); return new PreventCardEffect(preventableEffect, Filters.in(cards)); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromHand.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromHand.java index fead90e7a..bec304a06 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromHand.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromHand.java @@ -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 diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantBeAssignedToSkirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantBeAssignedToSkirmish.java new file mode 100644 index 000000000..7b66e5c4a --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantBeAssignedToSkirmish.java @@ -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)); + } + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java index f5b33ca35..076147941 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java @@ -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 {