From 8fd3f826cabd72d0a17d36ee1f0f8bfe8329ab32 Mon Sep 17 00:00:00 2001 From: "marcin.sciesinski" Date: Thu, 26 Sep 2019 10:14:13 -0700 Subject: [PATCH] "Greatest Kingdom..." is now unique "Saruman's Snows" should now be working "Goblin Wallcrawler" now has +2 strength "Ulaire Enquea" from FotR should now be playable "Erestor" from set 3, should not allow to use the ability if it cannot be exerted "Desperate Defense of the Ring" will no longer give an option to discard 3 cards, if there is no 3 cards in hand --- .../src/main/web/cards/set1/set1-dwarven.json | 2 +- .../main/web/cards/set1/set1-isengard.json | 3 +- .../src/main/web/cards/set1/set1-moria.json | 5 +-- .../src/main/web/cards/set1/set1-wraith.json | 28 ++++++++-------- .../src/main/web/cards/set3/set3-elven.json | 33 +++++++++++++++++++ .../build/field/effect/appender/Choice.java | 13 ++++---- ...layPhaseEventsOrPhaseSpecialAbilities.java | 3 ++ 7 files changed, 63 insertions(+), 24 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-async/src/main/web/cards/set3/set3-elven.json diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-dwarven.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-dwarven.json index 43a87b7de..20a7d079a 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-dwarven.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-dwarven.json @@ -340,7 +340,7 @@ ] }, "1_16": { - "title": "Greatest Kingdom of My People", + "title": "*Greatest Kingdom of My People", "culture": "dwarven", "cost": 0, "type": "condition", diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-isengard.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-isengard.json index c70017d0a..5a9d000dd 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-isengard.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-isengard.json @@ -532,7 +532,8 @@ "condition": { "type": "location", "filter": "hasAttached(self)" - } + }, + "phase": "skirmish" } }, { diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-moria.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-moria.json index 21ebfcee4..6bff13505 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-moria.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-moria.json @@ -498,7 +498,8 @@ "condition": { "type": "location", "filter": "underground" - } + }, + "amount": 2 } }, { @@ -808,7 +809,7 @@ "phase": "shadow", "cost": { "type": "discardFromHand", - "forced": false + "forced": false, "count": 3 }, "effect": { diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-wraith.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-wraith.json index d2ef45464..4716f68b1 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-wraith.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1/set1-wraith.json @@ -847,23 +847,23 @@ "vitality": 4, "site": 3, "keyword": "fierce", - "condition": { - "type": "or", - "condition": [ - { - "type": "canSpot", - "count": 6, - "filter": "companion" - }, - { - "type": "canSpotBurdens", - "amount": 5 - } - ] - }, "effects": { "type": "activated", "phase": "maneuver", + "condition": { + "type": "or", + "condition": [ + { + "type": "canSpot", + "count": 6, + "filter": "companion" + }, + { + "type": "canSpotBurdens", + "amount": 5 + } + ] + }, "cost": { "type": "exert", "filter": "self" diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set3/set3-elven.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set3/set3-elven.json new file mode 100644 index 000000000..948871534 --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set3/set3-elven.json @@ -0,0 +1,33 @@ +{ + "3_14": { + "title": "*Erestor", + "subtitle": "Chief Advisor to Elrond", + "culture": "elven", + "cost": 2, + "type": "ally", + "allyHome": "fellowship,3", + "race": "elf", + "strength": 5, + "vitality": 2, + "condition": { + "type": "canSpot", + "filter": "elf" + }, + "effects": { + "type": "activatedTrigger", + "trigger": { + "type": "aboutToTakeWound", + "filter": "elf", + "source": "culture(sauron),or(minion,event)" + }, + "cost": { + "type": "exert", + "filter": "self" + }, + "effect": { + "type": "preventWound", + "filter": "choose(elf)" + } + } + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/Choice.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/Choice.java index aefb14e0b..587adaf00 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/Choice.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/Choice.java @@ -37,11 +37,16 @@ public class Choice implements EffectAppenderProducer { return new DelayedAppender() { @Override protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) { + final String choosingPlayer = playerSource.getPlayer(actionContext); + ActionContext delegateActionContext = new DelegateActionContext(actionContext, + choosingPlayer, actionContext.getGame(), actionContext.getSource(), + actionContext.getEffectResult(), actionContext.getEffect()); + int textIndex = 0; List playableEffectAppenders = new LinkedList<>(); List effectTexts = new LinkedList<>(); for (EffectAppender possibleEffectAppender : possibleEffectAppenders) { - if (possibleEffectAppender.isPlayableInFull(actionContext)) { + if (possibleEffectAppender.isPlayableInFull(delegateActionContext)) { playableEffectAppenders.add(possibleEffectAppender); effectTexts.add(textArray[textIndex]); } @@ -58,14 +63,10 @@ public class Choice implements EffectAppenderProducer { if (playableEffectAppenders.size() == 1) { SubAction subAction = new SubAction(action); - playableEffectAppenders.get(0).appendEffect(cost, subAction, actionContext); + playableEffectAppenders.get(0).appendEffect(cost, subAction, delegateActionContext); return new StackActionEffect(subAction); } - final String choosingPlayer = playerSource.getPlayer(actionContext); - ActionContext delegateActionContext = new DelegateActionContext(actionContext, - choosingPlayer, actionContext.getGame(), actionContext.getSource(), - actionContext.getEffectResult(), actionContext.getEffect()); SubAction subAction = new SubAction(action); subAction.appendCost( new PlayoutDecisionEffect(choosingPlayer, diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantPlayPhaseEventsOrPhaseSpecialAbilities.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantPlayPhaseEventsOrPhaseSpecialAbilities.java index 6b93b169a..92592ad30 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantPlayPhaseEventsOrPhaseSpecialAbilities.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantPlayPhaseEventsOrPhaseSpecialAbilities.java @@ -13,6 +13,9 @@ public class CantPlayPhaseEventsOrPhaseSpecialAbilities implements ModifierSourc FieldUtils.validateAllowedFields(object, "phase", "condition"); final Phase phase = FieldUtils.getEnum(Phase.class, object.get("phase"), "phase"); + if (phase == null) + throw new InvalidCardDefinitionException("Has to have a phase defined"); + final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition"); final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);