diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set02/set2-sauron.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set02/set2-sauron.hjson new file mode 100644 index 000000000..766185270 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set02/set2-sauron.hjson @@ -0,0 +1,276 @@ +{ + 2_87: { + side: shadow + culture: Sauron + title: The Eye of Sauron + type: event + keyword: Shadow + twilight: 1 + effects: { + type: event + cost: [ + { + type: exert + filter: choose(culture(sauron),orc) + } + { + type: chooseHowManyBurdensToSpot + memorize: spottedBurdens + } + ] + effect: { + type: drawCards + count: { + type: fromMemory + memory: spottedBurdens + limit: 5 + } + } + } + } + 2_88: { + side: shadow + culture: Sauron + title: Memory of Many Things + type: event + keyword: Maneuver + twilight: 2 + effects: { + type: event + cost: { + type: exert + filter: choose(culture(sauron),orc) + } + effect: { + type: choice + texts: [ + Discard an ally + Discard 2 ELVEN allies + ] + effects: + [ + { + type: discard + filter: choose(ally) + } + { + type: discard + filter: choose(culture(elven),ally) + count: 2 + } + ] + } + } + } + 2_89: { + side: shadow + site: 6 + race: Orc + strength: 6 + culture: Sauron + vitality: 2 + title: Orc Scout + type: minion + keyword: Tracker + twilight: 2 + effects: [ + { + type: modifier + modifier: { + type: modifyRoamingPenalty + filter: culture(sauron),minion + amount: -1 + } + } + { + type: activatedTrigger + trigger: { + type: played + filter: event + exertsRanger: true + } + cost: { + type: choice + texts: [ + Exert this minion + Discard this minion + ] + effects: [ + { + type: exert + filter: self + } + { + type: discard + filter: self + } + ] + } + effect: { + type: cancelEvent + } + } + ] + } + 2_90: { + side: shadow + site: 6 + race: Orc + strength: 8 + culture: Sauron + vitality: 3 + title: Orc Taskmaster + type: minion + twilight: 3 + effects: { + type: activated + phase: shadow + cost: { + type: exert + filter: self + } + effect: { + type: addTwilight + amount: 1 + } + } + } + 2_91: { + side: shadow + culture: Sauron + title: Southern Spies + type: event + keyword: Response + twilight: 0 + effects: { + type: responseEvent + trigger: { + type: putsOnRing + } + requires: { + type: canSpot + filter: culture(sauron),minion + } + effect: { + type: discardFromHand + hand: fp + player: you + forced: true + filter: all(any) + count: 1000 + } + } + } + 2_92: { + side: shadow + culture: Sauron + title: Spies of Mordor + type: condition + keyword: + [ + Support Area + Search + ] + twilight: 1 + requires: { + type: canSpot + filter: culture(sauron),orc + } + effects: { + type: trigger + optional: true + trigger: { + type: moves + } + requires: { + type: phase + phase: regroup + } + effect: { + type: drawCards + count: { + type: condition + condition: { + type: canSpot + filter: culture(sauron),tracker + } + true: 2 + false: 1 + } + } + } + } + 2_93: { + side: shadow + site: 6 + race: Orc + strength: 11 + culture: Sauron + vitality: 3 + title: *Tower Assassin + type: minion + twilight: 4 + effects: { + type: activated + phase: maneuver + cost: { + type: exert + filter: self + } + effect: { + type: wound + filter: choose(ally) + } + } + } + 2_94: { + side: shadow + culture: Sauron + title: Verily I Come + type: condition + twilight: 0 + target: ringBearer + effects: [ + { + type: extraCost + cost: { + type: exert + filter: choose(culture(sauron),orc) + } + } + { + type: trigger + trigger: { + type: playerDrawsCard + player: fp + } + requires: { + type: phase + phase: fellowship + } + effect: { + type: addBurdens + amount: 1 + } + } + ] + } + 2_95: { + itemclass: Hand Weapon + side: shadow + strength: 2 + culture: Sauron + title: Vile Blade + type: possession + twilight: 1 + target: culture(sauron),orc + effects: { + type: modifier + modifier: { + type: modifyStrength + filter: bearer,inSkirmishAgainst(or(man,elf)) + amount: 2 + } + } + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/PlayerDrawsCard.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/PlayerDrawsCard.java new file mode 100644 index 000000000..2610c50c2 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/PlayerDrawsCard.java @@ -0,0 +1,40 @@ +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.PlayerSource; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.DrawCardOrPutIntoHandResult; +import org.json.simple.JSONObject; + +public class PlayerDrawsCard implements TriggerCheckerProducer { + @Override + public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(value, "player"); + + final String player = FieldUtils.getString(value.get("player"), "player"); + + PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment); + return new TriggerChecker() { + @Override + public boolean accepts(ActionContext actionContext) { + String playerId = playerSource.getPlayer(actionContext); + + EffectResult effectResult = actionContext.getEffectResult(); + if (effectResult.getType() == EffectResult.Type.DRAW_CARD_OR_PUT_INTO_HAND) { + DrawCardOrPutIntoHandResult drawResult = (DrawCardOrPutIntoHandResult) effectResult; + return drawResult.getPlayerId().equals(playerId); + } + return false; + } + + @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 8db09f375..95e95884f 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("movesto", new MovesTo()); triggerCheckers.put("played", new PlayedTriggerCheckerProducer()); triggerCheckers.put("playedfromstacked", new PlayedFromStacked()); + triggerCheckers.put("playerdrawscard", new PlayerDrawsCard()); triggerCheckers.put("putsonring", new PutsOnRing()); triggerCheckers.put("reconciles", new Reconciles()); triggerCheckers.put("removedfromplay", new RemovedFromPlay());