From 4b47cf35ed057703b727f808019ea4866f94b60a Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Fri, 17 Dec 2021 03:14:57 -0600 Subject: [PATCH] Added in the Sauron VSet1 cards, courtesy of LStephens. Added event handling and trigger for taking off the Ring. --- .../cards/set101/set101_sauron_playtest.json | 185 ++++++++++++------ .../field/effect/trigger/TakesOffRing.java | 27 +++ .../effect/trigger/TriggerCheckerFactory.java | 1 + .../effects/TakeOffTheOneRingEffect.java | 3 + .../lotro/logic/timing/EffectResult.java | 4 +- .../results/TakeOffTheOneRingResult.java | 9 + 6 files changed, 164 insertions(+), 65 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesOffRing.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/TakeOffTheOneRingResult.java diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sauron_playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sauron_playtest.json index b76678e8d..d9d97117b 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sauron_playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sauron_playtest.json @@ -1,7 +1,7 @@ { "151_44": { - "title": "Fell To It's Power", + "title": "Fell To Its Power", "culture": "sauron", "cost": 1, "type": "event", @@ -9,15 +9,22 @@ "effects": { "type": "event", "cost": { - "type": "exert", - "filter": "choose(elf)", + "type": "discard", + "filter": "choose(culture(sauron),orc)" }, "effect": [ { - "type": "modifyStrength", - "filter": "choose(name(Gimli))", - "until": "start(regroup)", - "amount": 2 + "type": "preventable", + "text": "Would you like to discard a Free Peoples condition to prevent adding a burden?", + "player": "fp", + "cost": { + "type": "discard", + "filter": "choose(side(free people),condition)" + }, + "effect": { + "type": "addBurdens", + "amount": 1 + } } ] } @@ -32,23 +39,18 @@ "keyword": ["support area"], "effects": [ { - "type": "modifier", - "modifier": { - "type": "addKeyword", - "filter": "dwarf", - "keyword": "damage+1" - } - }, - { - "type": "trigger", - "optional": true, + "type": "activatedTrigger", "trigger": { - "type": "winsSkirmish", - "filter": "dwarf" + "type": "abouttodiscard", + "filter": "culture(sauron),condition" + }, + "cost": { + "type": "removeburdens", + "amount": 1 }, "effect": { - "type": "wound", - "filter": "choose(orc)" + "type": "preventdiscard", + "filter": "choose(culture(sauron),condition)" } } ] @@ -65,21 +67,30 @@ { "type": "modifier", "modifier": { - "type": "addKeyword", - "filter": "dwarf", - "keyword": "damage+1" + "type": "modifysitenumber", + "filter": "culture(sauron),minion", + "amount": { + "type": "forEachBurden", + "multiplier": -1 + } + } + }, + { + "type": "modifier", + "modifier": { + "type": "modifystrength", + "filter": "culture(sauron),minion,siteNumber(0-1)", + "amount": 1 } }, { "type": "trigger", - "optional": true, "trigger": { - "type": "winsSkirmish", - "filter": "dwarf" - }, + "type": "takesoffring" + }, "effect": { - "type": "wound", - "filter": "choose(orc)" + "type": "discard", + "filter": "self" } } ] @@ -92,24 +103,48 @@ "cost": 1, "type": "event", "keyword": ["regroup"], - "effects": { - "type": "event", - "cost": { - "type": "exert", - "filter": "choose(elf)", - }, - "effect": [ - { - "type": "modifyStrength", - "filter": "choose(name(Gimli))", - "until": "start(regroup)", - "amount": 2 + "condition": { + "type": "canSpotburdens", + "amount": 5 + }, + "effects": [ + { + "type": "extraCost", + "cost": { + "type": "discard", + "filter": "choose(culture(sauron),orc)", } - ] - } + }, + { + "type": "event", + "effect": { + "type": "choice", + "player": "shadowPlayer", + "texts": [ + "Make the move limit -1", + "Make the free peoples player choose to move again" + ], + "effects": [ + { + "type": "addModifier", + "modifier": { + "type": "modifyMoveLimit", + "amount": -1 + }, + "until": "endOfTurn" + }, + { + "type": "addModifier", + "modifier": { + "type": "hasToMoveIfAble" + } + } + ] + } + } + ] }, - "151_48": { "title": "Orc Ambush Troop", "culture": "sauron", @@ -120,31 +155,38 @@ "strength": 8, "vitality": 2, "site": 6, + "keyword": [ + "tracker" + ], "effects": [ { "type": "modifier", "modifier": { "type": "addKeyword", - "filter": "dwarf", - "keyword": "damage+1" + "filter": "self", + "keyword": "archer", + "condition": { + "type": "canSpot", + "filter": "companion,exhausted" + } } }, { - "type": "trigger", - "optional": true, - "trigger": { - "type": "winsSkirmish", - "filter": "dwarf" - }, - "effect": { - "type": "wound", - "filter": "choose(orc)" + "type": "modifier", + "modifier": { + "type": "modifystrength", + "filter": "self", + "amount": 3, + "condition": { + "type": "canSpot", + "filter": "companion,exhausted", + "count": 3 + } } } ] }, - "151_49": { "title": "*A Shadow of the Past", "culture": "sauron", @@ -156,20 +198,35 @@ "type": "modifier", "modifier": { "type": "addKeyword", - "filter": "dwarf", - "keyword": "damage+1" + "filter": "culture(sauron),orc", + "keyword": "fierce", + "condition": { + "type": "canSpotburdens", + "amount": 4 + } + } + }, + { + "type": "modifier", + "modifier": { + "type": "addKeyword", + "filter": "culture(sauron),orc", + "keyword": "damage+1", + "condition": { + "type": "canSpotburdens", + "amount": 6 + } } }, { "type": "trigger", - "optional": true, "trigger": { - "type": "winsSkirmish", - "filter": "dwarf" + "type": "startOfPhase", + "phase": "regroup" }, "effect": { - "type": "wound", - "filter": "choose(orc)" + "type": "discard", + "filter": "self" } } ] diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesOffRing.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesOffRing.java new file mode 100644 index 000000000..65259ced7 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesOffRing.java @@ -0,0 +1,27 @@ +package com.gempukku.lotro.cards.build.field.effect.trigger; + +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.field.FieldUtils; +import com.gempukku.lotro.logic.timing.EffectResult; +import org.json.simple.JSONObject; + +public class TakesOffRing implements TriggerCheckerProducer { + @Override + public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(value, "filter"); + + return new TriggerChecker() { + @Override + public boolean accepts(ActionContext actionContext) { + return actionContext.getEffectResult().getType() == EffectResult.Type.TAKE_OFF_THE_ONE_RING; + } + + @Override + public boolean isBefore() { + return false; + } + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java index a95d1bfc1..3fd23cf3a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java @@ -45,6 +45,7 @@ public class TriggerCheckerFactory { triggerCheckers.put("revealcardfromtopofdrawdeck", new RevealCardFromTopOfDrawDeck()); triggerCheckers.put("startofphase", new StartOfPhase()); triggerCheckers.put("startofturn", new StartOfTurn()); + triggerCheckers.put("takesoffring", new TakesOffRing()); triggerCheckers.put("takeswound", new TakesWound()); triggerCheckers.put("transferred", new Transferred()); triggerCheckers.put("usesspecialability", new UsesSpecialAbility()); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/TakeOffTheOneRingEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/TakeOffTheOneRingEffect.java index 9402255b5..f93ae3aa4 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/TakeOffTheOneRingEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/TakeOffTheOneRingEffect.java @@ -3,6 +3,8 @@ package com.gempukku.lotro.logic.effects; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.timing.AbstractEffect; import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.results.PutOnTheOneRingResult; +import com.gempukku.lotro.logic.timing.results.TakeOffTheOneRingResult; public class TakeOffTheOneRingEffect extends AbstractEffect { @Override @@ -26,6 +28,7 @@ public class TakeOffTheOneRingEffect extends AbstractEffect { if (canTakeOffRing) { game.getGameState().sendMessage("Ring-bearer takes off The One Ring"); game.getGameState().setWearingRing(false); + game.getActionsEnvironment().emitEffectResult(new TakeOffTheOneRingResult()); } return new FullEffectResult(canTakeOffRing); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java index b176a0ece..4181471b1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java @@ -57,7 +57,9 @@ public abstract class EffectResult { REPLACE_SITE, TAKE_CONTROL_OF_SITE, - FINISHED_PLAYING_FELLOWSHIP + FINISHED_PLAYING_FELLOWSHIP, + + TAKE_OFF_THE_ONE_RING } private Type _type; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/TakeOffTheOneRingResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/TakeOffTheOneRingResult.java new file mode 100644 index 000000000..f9eb48ea4 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/TakeOffTheOneRingResult.java @@ -0,0 +1,9 @@ +package com.gempukku.lotro.logic.timing.results; + +import com.gempukku.lotro.logic.timing.EffectResult; + +public class TakeOffTheOneRingResult extends EffectResult { + public TakeOffTheOneRingResult() { + super(Type.TAKE_OFF_THE_ONE_RING); + } +}