diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-gandalf.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-gandalf.json index d822a0e05..4e0d62229 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-gandalf.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-gandalf.json @@ -17,8 +17,8 @@ "type": "modifier", "modifier": { "type": "cantLookOrRevealHand", - "player": "owner", - "hand": "shadowPlayer" + "player": "shadowPlayer", + "hand": "owner" } } }, diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-isengard.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-isengard.json new file mode 100644 index 000000000..c8e005a5e --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set2/set2-isengard.json @@ -0,0 +1,323 @@ +{ + "2_39": { + "side": "shadow", + "cost": 2, + "culture": "Isengard", + "title": "Beyond the Height of Men", + "type": "event", + "keyword": "Maneuver", + "effects": { + "type": "event", + "cost": { + "type": "exert", + "filter": "choose(uruk-hai)" + }, + "effect": [ + { + "type": "conditional", + "condition": { + "type": "canSpot", + "filter": "companion", + "count": 6 + }, + "effect": { + "type": "discard", + "filter": "all(side(free people),possession,or(armor,helm,shield))" + } + }, + { + "type": "conditional", + "condition": { + "type": "cantSpot", + "filter": "companion", + "count": 6 + }, + "effect": { + "type": "discard", + "filter": "choose(possession,or(armor,helm,shield))" + } + } + ] + } + }, + "2_40": { + "side": "shadow", + "cost": 1, + "culture": "Isengard", + "title": "Demands of the Sackville-Bagginses", + "type": "condition", + "keyword": "Support Area", + "condition": { + "type": "canSpot", + "filter": "culture(isengard),minion" + }, + "effects": { + "type": "trigger", + "trigger": { + "type": "exerts", + "filter": "culture(shire),ally" + }, + "effect": { + "type": "addTwilight", + "amount": 1 + } + } + }, + "2_41": { + "side": "shadow", + "cost": 0, + "culture": "Isengard", + "title": "Evil Afoot", + "type": "event", + "keyword": "Shadow", + "effects": { + "type": "event", + "cost": [ + { + "type": "exert", + "filter": "choose(uruk-hai)" + }, + { + "type": "chooseHowManyBurdensToSpot", + "memorize": "spottedBurdens" + } + ], + "effect": { + "type": "shuffleCardsFromDiscardIntoDrawDeck", + "count": { + "type": "fromMemory", + "memory": "spottedBurdens" + }, + "filter": "choose(minion)" + } + } + }, + "2_42": { + "side": "shadow", + "site": 2, + "cost": 2, + "race": "Orc", + "strength": 6, + "culture": "Isengard", + "vitality": 2, + "title": "Goblin Man", + "type": "minion", + "effects": [ + { + "type": "trigger", + "trigger": { + "type": "condition", + "condition": { + "type": "location", + "filter": "underground" + } + }, + "effect": { + "type": "discard", + "filter": "self" + } + }, + { + "type": "activated", + "phase": "shadow", + "cost": { + "type": "exert", + "filter": "self" + }, + "effect": { + "type": "lookAtHand", + "hand": "fp" + } + } + ] + }, + "2_43": { + "side": "shadow", + "cost": 1, + "strength": 2, + "culture": "Isengard", + "possession": "Hand Weapon", + "title": "*Lurtz's Sword", + "type": "possession", + "target": "name(Lurtz)", + "effects": [ + { + "type": "modifier", + "modifier": { + "type": "addKeyword", + "filter": "bearer", + "keyword": "damage+1" + } + }, + { + "type": "trigger", + "trigger": { + "type": "winsSkirmish", + "filter": "bearer" + }, + "effect": { + "type": "discardTopCardsFromDeck", + "count": 2, + "forced": true, + "deck": "fp" + } + } + ] + }, + "2_44": { + "side": "shadow", + "cost": 0, + "culture": "Isengard", + "title": "No Business of Ours", + "type": "condition", + "keyword": "Support Area", + "condition": { + "type": "canSpot", + "filter": "culture(isengard),minion" + }, + "effects": { + "type": "modifier", + "modifier": { + "type": "cantLookOrRevealHand", + "player": "fp", + "hand": "shadowPlayer" + } + } + }, + "2_45": { + "side": "shadow", + "cost": 1, + "culture": "Isengard", + "title": "Too Much Attention", + "type": "event", + "keyword": "Response", + "condition": { + "type": "canSpot", + "filter": "culture(isengard),minion" + }, + "effects": { + "type": "responseEvent", + "trigger": { + "type": "putsOnRing" + }, + "effect": { + "type": "discardTopCardsFromDeck", + "count": 5, + "forced": true, + "deck": "fp" + } + } + }, + "2_46": { + "side": "shadow", + "site": 5, + "cost": 3, + "race": "Uruk-Hai", + "strength": 9, + "culture": "Isengard", + "vitality": 2, + "title": "*Uruk Captain", + "type": "minion", + "keyword": "Damage", + "effects": { + "type": "activated", + "phase": "shadow", + "cost": [ + { + "type": "removeTwilight", + "amount": 1 + }, + { + "type": "exert", + "filter": "self" + } + ], + "effect": { + "type": "playCardFromDiscard", + "filter": "choose(uruk-hai)" + } + } + }, + "2_47": { + "side": "shadow", + "site": 5, + "cost": 3, + "race": "Uruk-Hai", + "strength": 7, + "culture": "Isengard", + "vitality": 2, + "title": "Uruk Scout", + "type": "minion", + "keyword": [ + "Damage", + "Tracker" + ], + "effects": [ + { + "type": "modifier", + "modifier": { + "type": "modifyRoamingPenalty", + "filter": "culture(isengard),minion,your", + "amount": -1 + } + }, + { + "type": "activatedTrigger", + "trigger": { + "type": "played", + "filter": "event", + "exertsRanger": true + }, + "cost": { + "type": "exert", + "filter": "self" + }, + "effect": { + "type": "cancelEvent" + } + } + ] + }, + "2_48": { + "side": "shadow", + "cost": 2, + "culture": "Isengard", + "title": "Wizard Storm", + "type": "condition", + "keyword": [ + "Weather", + "Spell" + ], + "target": "site,not(hasAttached(name(Wizard Storm)))", + "effects": [ + { + "type": "extraCost", + "cost": { + "type": "exert", + "filter": "choose(culture(isengard),minion)" + } + }, + { + "type": "trigger", + "trigger": { + "type": "movesFrom", + "filter": "hasAttached(self)" + }, + "effect": { + "type": "exert", + "filter": "all(companion)" + } + }, + { + "type": "trigger", + "trigger": { + "type": "endOfTurn" + }, + "effect": { + "type": "discard", + "filter": "self" + } + } + ] + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_039.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_039.java deleted file mode 100644 index 8aa8d254f..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_039.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.gempukku.lotro.cards.set2.isengard; - -import com.gempukku.lotro.common.*; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.PlayEventAction; -import com.gempukku.lotro.logic.cardtype.AbstractEvent; -import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -/** - * Set: Mines of Moria - * Side: Shadow - * Culture: Isengard - * Twilight Cost: 2 - * Type: Event - * Game Text: Maneuver: Exert an Uruk-hai to discard an armor possession, helm possession, or shield possession (or all - * such Free Peoples possessions if you can spot 6 companions). - */ -public class Card2_039 extends AbstractEvent { - public Card2_039() { - super(Side.SHADOW, 2, Culture.ISENGARD, "Beyond the Height of Men", Phase.MANEUVER); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return PlayConditions.canExert(self, game, Race.URUK_HAI); - } - - @Override - public PlayEventAction getPlayEventCardAction(String playerId, LotroGame game, PhysicalCard self) { - PlayEventAction action = new PlayEventAction(self); - action.appendCost( - new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.URUK_HAI)); - if (PlayConditions.canSpot(game, 6, CardType.COMPANION)) - action.appendEffect( - new DiscardCardsFromPlayEffect(self.getOwner(), self, - Filters.and( - Side.FREE_PEOPLE, - CardType.POSSESSION, - Filters.or( - PossessionClass.ARMOR, - PossessionClass.HELM, - PossessionClass.SHIELD - )))); - else - action.appendEffect( - new ChooseAndDiscardCardsFromPlayEffect( - action, playerId, 1, 1, - CardType.POSSESSION, - Filters.or( - PossessionClass.ARMOR, - PossessionClass.HELM, - PossessionClass.SHIELD - ))); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_040.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_040.java deleted file mode 100644 index d577901bf..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_040.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.gempukku.lotro.cards.set2.isengard; - -import com.gempukku.lotro.common.CardType; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Side; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.effects.AddTwilightEffect; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.TriggerConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Shadow - * Culture: Isengard - * Twilight Cost: 1 - * Type: Condition - * Game Text: To play, spot an [ISENGARD] minion. Plays to your support area. Each time a [SHIRE] ally exerts, add (1). - */ -public class Card2_040 extends AbstractPermanent { - public Card2_040() { - super(Side.SHADOW, 1, CardType.CONDITION, Culture.ISENGARD, "Demands of the Sackville-Bagginses"); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return Filters.canSpot(game, Culture.ISENGARD, CardType.MINION); - } - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.forEachExerted(game, effectResult, Culture.SHIRE, CardType.ALLY)) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new AddTwilightEffect(self, 1)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_041.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_041.java deleted file mode 100644 index 69beefd95..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_041.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.gempukku.lotro.cards.set2.isengard; - -import com.gempukku.lotro.common.*; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.PlayEventAction; -import com.gempukku.lotro.logic.cardtype.AbstractEvent; -import com.gempukku.lotro.logic.effects.ForEachBurdenYouSpotEffect; -import com.gempukku.lotro.logic.effects.ShuffleCardsFromDiscardIntoDeckEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseCardsFromDiscardEffect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collection; - -/** - * Set: Mines of Moria - * Side: Shadow - * Culture: Isengard - * Twilight Cost: 0 - * Type: Event - * Game Text: Shadow: Exert an Uruk-hai and spot X burdens to shuffle X minions from your discard pile into your draw - * deck. - */ -public class Card2_041 extends AbstractEvent { - public Card2_041() { - super(Side.SHADOW, 0, Culture.ISENGARD, "Evil Afoot", Phase.SHADOW); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return PlayConditions.canExert(self, game, Race.URUK_HAI); - } - - @Override - public PlayEventAction getPlayEventCardAction(final String playerId, LotroGame game, final PhysicalCard self) { - final PlayEventAction action = new PlayEventAction(self); - action.appendCost( - new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.URUK_HAI)); - action.appendEffect( - new ForEachBurdenYouSpotEffect(playerId) { - @Override - protected void burdensSpotted(int burdensSpotted) { - action.insertEffect( - new ChooseCardsFromDiscardEffect(playerId, burdensSpotted, burdensSpotted, CardType.MINION) { - @Override - protected void cardsSelected(LotroGame game, Collection cards) { - action.insertEffect( - new ShuffleCardsFromDiscardIntoDeckEffect(self, playerId, cards)); - } - }); - } - }); - return action; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_042.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_042.java deleted file mode 100644 index d2d3a7957..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_042.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.gempukku.lotro.cards.set2.isengard; - -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Phase; -import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.ActivateCardAction; -import com.gempukku.lotro.logic.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.cardtype.AbstractMinion; -import com.gempukku.lotro.logic.effects.LookAtOpponentsHandEffect; -import com.gempukku.lotro.logic.effects.SelfDiscardEffect; -import com.gempukku.lotro.logic.effects.SelfExertEffect; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Shadow - * Culture: Isengard - * Twilight Cost: 2 - * Type: Minion • Orc - * Strength: 6 - * Vitality: 2 - * Site: 2 - * Game Text: Discard this minion if underground. Shadow: Exert this minion to look at the Free Peoples player's hand. - */ -public class Card2_042 extends AbstractMinion { - public Card2_042() { - super(2, 6, 2, 2, Race.ORC, Culture.ISENGARD, "Goblin Man"); - } - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (game.getModifiersQuerying().hasKeyword(game, game.getGameState().getCurrentSite(), Keyword.UNDERGROUND)) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new SelfDiscardEffect(self)); - return Collections.singletonList(action); - } - return null; - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0) - && PlayConditions.canExert(self, game, self)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new SelfExertEffect(action, self)); - action.appendEffect( - new LookAtOpponentsHandEffect(playerId, game.getGameState().getCurrentPlayerId())); - - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_043.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_043.java deleted file mode 100644 index 89dcb0ba6..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_043.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.gempukku.lotro.cards.set2.isengard; - -import com.gempukku.lotro.common.*; -import com.gempukku.lotro.filters.Filter; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.cardtype.AbstractAttachable; -import com.gempukku.lotro.logic.effects.DiscardTopCardFromDeckEffect; -import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.TriggerConditions; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Shadow - * Culture: Isengard - * Twilight Cost: 1 - * Type: Possession • Hand Weapon - * Strength: +2 - * Game Text: Bearer must be Lurtz. He is damage +1. Each time Lurtz wins a skirmish, the Free Peoples player must - * discard the top 2 cards of his or her draw deck. - */ -public class Card2_043 extends AbstractAttachable { - public Card2_043() { - super(Side.SHADOW, CardType.POSSESSION, 1, Culture.ISENGARD, PossessionClass.HAND_WEAPON, "Lurtz's Sword", null, true); - } - - @Override - public Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { - return Filters.name("Lurtz"); - } - - @Override - public int getStrength() { - return 2; - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - List modifiers = new LinkedList(); - modifiers.add( - new KeywordModifier(self, Filters.hasAttached(self), Keyword.DAMAGE)); - return modifiers; - } - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.winsSkirmish(game, effectResult, Filters.name("Lurtz"))) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new DiscardTopCardFromDeckEffect(self, game.getGameState().getCurrentPlayerId(), 2, true)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_044.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_044.java deleted file mode 100644 index f29f8a929..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_044.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gempukku.lotro.cards.set2.isengard; - -import com.gempukku.lotro.common.CardType; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Side; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.modifiers.FPPlayerCantLookAtShadowPlayersHandModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Shadow - * Culture: Isengard - * Twilight Cost: 0 - * Type: Condition - * Game Text: To play, spot an [ISENGARD] minion. Plays to your support area. The Free Peoples player may not look at - * or reveal cards in any Shadow player's hand. - */ -public class Card2_044 extends AbstractPermanent { - public Card2_044() { - super(Side.SHADOW, 0, CardType.CONDITION, Culture.ISENGARD, "No Business of Ours"); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return Filters.canSpot(game, Culture.ISENGARD, CardType.MINION); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return Collections.singletonList(new FPPlayerCantLookAtShadowPlayersHandModifier(self)); - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_045.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_045.java deleted file mode 100644 index c39789613..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_045.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.gempukku.lotro.cards.set2.isengard; - -import com.gempukku.lotro.common.CardType; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Side; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.PlayUtils; -import com.gempukku.lotro.logic.actions.PlayEventAction; -import com.gempukku.lotro.logic.cardtype.AbstractResponseEvent; -import com.gempukku.lotro.logic.effects.DiscardTopCardFromDeckEffect; -import com.gempukku.lotro.logic.timing.EffectResult; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Shadow - * Culture: Isengard - * Twilight Cost: 1 - * Type: Event - * Game Text: Response: If the Ring-bearer puts on The One Ring, spot an [ISENGARD] minion to make the Free Peoples - * player discard the top 5 cards of his or her draw deck. - */ -public class Card2_045 extends AbstractResponseEvent { - public Card2_045() { - super(Side.SHADOW, 1, Culture.ISENGARD, "Too Much Attention"); - } - - @Override - public List getPlayResponseEventAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (effectResult.getType() == EffectResult.Type.PUT_ON_THE_ONE_RING - && Filters.canSpot(game, Culture.ISENGARD, CardType.MINION) - && PlayUtils.checkPlayRequirements(game, self, Filters.any, 0, 0, false, false)) { - PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new DiscardTopCardFromDeckEffect(self, game.getGameState().getCurrentPlayerId(), 5, true)); - - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_046.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_046.java deleted file mode 100644 index bcb88874b..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_046.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.gempukku.lotro.cards.set2.isengard; - -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Phase; -import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.ActivateCardAction; -import com.gempukku.lotro.logic.cardtype.AbstractMinion; -import com.gempukku.lotro.logic.effects.RemoveTwilightEffect; -import com.gempukku.lotro.logic.effects.SelfExertEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromDiscardEffect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Shadow - * Culture: Isengard - * Twilight Cost: 3 - * Type: Minion • Uruk-Hai - * Strength: 9 - * Vitality: 2 - * Site: 5 - * Game Text: Damage +1. Shadow: Remove (1) and exert Uruk Captain to play an Uruk-hai from your discard pile. - */ -public class Card2_046 extends AbstractMinion { - public Card2_046() { - super(3, 9, 2, 5, Race.URUK_HAI, Culture.ISENGARD, "Uruk Captain", null, true); - addKeyword(Keyword.DAMAGE); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 1) - && PlayConditions.canExert(self, game, self) - // There has to be playable Uruk-hai in discard pile - && PlayConditions.canPlayFromDiscard(playerId, game, 1, 0, Race.URUK_HAI)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new RemoveTwilightEffect(1)); - action.appendCost( - new SelfExertEffect(action, self)); - action.appendEffect( - new ChooseAndPlayCardFromDiscardEffect(playerId, game, Race.URUK_HAI)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_047.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_047.java deleted file mode 100644 index 741f53127..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_047.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.gempukku.lotro.cards.set2.isengard; - -import com.gempukku.lotro.common.CardType; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.ActivateCardAction; -import com.gempukku.lotro.logic.cardtype.AbstractMinion; -import com.gempukku.lotro.logic.effects.CancelEventEffect; -import com.gempukku.lotro.logic.effects.SelfExertEffect; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.RoamingPenaltyModifier; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.timing.results.PlayEventResult; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Shadow - * Culture: Isengard - * Twilight Cost: 3 - * Type: Minion • Uruk-Hai - * Strength: 7 - * Vitality: 2 - * Site: 5 - * Game Text: Tracker. Damage +1. The roaming penalty for each [ISENGARD] minion you play is -1. Response: If an event - * is played that spots or exerts a ranger, exert this minion to cancel that event. - */ -public class Card2_047 extends AbstractMinion { - public Card2_047() { - super(3, 7, 2, 5, Race.URUK_HAI, Culture.ISENGARD, "Uruk Scout"); - addKeyword(Keyword.TRACKER); - addKeyword(Keyword.DAMAGE); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return Collections.singletonList( - new RoamingPenaltyModifier(self, Filters.and(Culture.ISENGARD, CardType.MINION), -1)); - } - - @Override - public List getOptionalInPlayAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.played(game, effectResult, CardType.EVENT) - && PlayConditions.canExert(self, game, self)) { - PlayEventResult playEffect = (PlayEventResult) effectResult; - if (playEffect.isRequiresRanger()) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new SelfExertEffect(action, self)); - action.appendEffect( - new CancelEventEffect(self, playEffect)); - return Collections.singletonList(action); - } - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_048.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_048.java deleted file mode 100644 index f5e4143de..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_048.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.gempukku.lotro.cards.set2.isengard; - -import com.gempukku.lotro.common.CardType; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Side; -import com.gempukku.lotro.filters.Filter; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.cardtype.AbstractAttachable; -import com.gempukku.lotro.logic.effects.ExertCharactersEffect; -import com.gempukku.lotro.logic.effects.SelfDiscardEffect; -import com.gempukku.lotro.logic.modifiers.AbstractExtraPlayCostModifier; -import com.gempukku.lotro.logic.modifiers.cost.ExertExtraPlayCostModifier; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Mines of Moria - * Side: Shadow - * Culture: Isengard - * Twilight Cost: 2 - * Type: Condition - * Game Text: Spell. Weather. To play, exert an [ISENGARD] minion. Plays on a site. Limit 1 per site. When - * the fellowship moves from this site, every companion must exert. Discard this condition at the end of the turn. - */ -public class Card2_048 extends AbstractAttachable { - public Card2_048() { - super(Side.SHADOW, CardType.CONDITION, 2, Culture.ISENGARD, null, "Wizard Storm"); - addKeyword(Keyword.SPELL); - addKeyword(Keyword.WEATHER); - } - - @Override - public Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { - return Filters.and(CardType.SITE, Filters.not(Filters.hasAttached(Filters.name(getTitle())))); - } - - @Override - public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - return PlayConditions.canExert(self, game, Culture.ISENGARD, CardType.MINION); - } - - @Override - public List getExtraCostToPlay(LotroGame game, PhysicalCard self) { - return Collections.singletonList( - new ExertExtraPlayCostModifier(self, self, null, Culture.ISENGARD, CardType.MINION)); - } - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.movesFrom(game, effectResult, self.getAttachedTo())) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new ExertCharactersEffect(action, self, CardType.COMPANION)); - return Collections.singletonList(action); - } - - if (TriggerConditions.endOfTurn(game, effectResult)) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect(new SelfDiscardEffect(self)); - - return Collections.singletonList(action); - } - - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ShuffleCardsFromDiscardIntoDrawDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ShuffleCardsFromDiscardIntoDrawDeck.java index 9363d9947..bc3eb519a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ShuffleCardsFromDiscardIntoDrawDeck.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ShuffleCardsFromDiscardIntoDrawDeck.java @@ -20,7 +20,7 @@ import java.util.Collection; public class ShuffleCardsFromDiscardIntoDrawDeck implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(effectObject, "filter", "where", "count"); + FieldUtils.validateAllowedFields(effectObject, "filter", "count"); final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "choose(any)"); final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/PlayedTriggerCheckerProducer.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/PlayedTriggerCheckerProducer.java index 4ab278244..7dbafc47d 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/PlayedTriggerCheckerProducer.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/PlayedTriggerCheckerProducer.java @@ -9,16 +9,18 @@ import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.logic.timing.TriggerConditions; import com.gempukku.lotro.logic.timing.results.PlayCardResult; +import com.gempukku.lotro.logic.timing.results.PlayEventResult; import org.json.simple.JSONObject; public class PlayedTriggerCheckerProducer implements TriggerCheckerProducer { @Override public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(value, "filter", "on", "memorize"); + FieldUtils.validateAllowedFields(value, "filter", "on", "memorize", "exertsRanger"); final String filterString = FieldUtils.getString(value.get("filter"), "filter"); final String onString = FieldUtils.getString(value.get("on"), "on"); final String memorize = FieldUtils.getString(value.get("memorize"), "memorize"); + boolean exertsRanger = FieldUtils.getBoolean(value.get("exertsRanger"), "exertsRanger", false); final FilterableSource filter = environment.getFilterFactory().generateFilter(filterString, environment); final FilterableSource onFilter = (onString != null) ? environment.getFilterFactory().generateFilter(onString, environment) : null; return new TriggerChecker() { @@ -32,9 +34,16 @@ public class PlayedTriggerCheckerProducer implements TriggerCheckerProducer { } else { played = TriggerConditions.played(actionContext.getGame(), actionContext.getEffectResult(), filterable); } - if (played && memorize != null) { - PhysicalCard playedCard = ((PlayCardResult) actionContext.getEffectResult()).getPlayedCard(); - actionContext.setCardMemory(memorize, playedCard); + + if (played) { + PlayCardResult playCardResult = (PlayCardResult) actionContext.getEffectResult(); + if (exertsRanger && playCardResult instanceof PlayEventResult && !((PlayEventResult) playCardResult).isRequiresRanger()) + return false; + + if (memorize != null) { + PhysicalCard playedCard = playCardResult.getPlayedCard(); + actionContext.setCardMemory(memorize, playedCard); + } } return played; }