From c62ac1bb3743053d8b68308dcf1b7147fd63d372 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Wed, 9 Nov 2011 21:52:36 +0000 Subject: [PATCH] "Mordor Guard" --- .../cards/AbstractLotroCardBlueprint.java | 5 ++ .../lotro/cards/set7/sauron/Card7_287.java | 57 +++++++++++++++++++ .../lotro/game/LotroCardBlueprint.java | 2 + .../gempukku/lotro/logic/timing/RuleSet.java | 2 + .../logic/timing/rules/DiscardedCardRule.java | 43 ++++++++++++++ 5 files changed, 109 insertions(+) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_287.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/DiscardedCardRule.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java index 95399c490..e8f13803e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java @@ -192,6 +192,11 @@ public abstract class AbstractLotroCardBlueprint implements LotroCardBlueprint { return null; } + @Override + public RequiredTriggerAction getDiscardedFromPlayTrigger(LotroGame game, PhysicalCard self) { + return null; + } + @Override public Signet getSignet() { throw new UnsupportedOperationException("This method should not be called on this card"); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_287.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_287.java new file mode 100644 index 000000000..495625f06 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_287.java @@ -0,0 +1,57 @@ +package com.gempukku.lotro.cards.set7.sauron; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; +import com.gempukku.lotro.common.Culture; +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.effects.AddThreatsEffect; +import com.gempukku.lotro.logic.effects.RemoveThreatsEffect; +import com.gempukku.lotro.logic.timing.Action; + +import java.util.Collections; +import java.util.List; + +/** + * Set: The Return of the King + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 3 + * Type: Minion • Orc + * Strength: 9 + * Vitality: 3 + * Site: 6 + * Game Text: Skirmish: Exert 3 [SAURON] Orcs to add 3 threats. When this minion is discarded, remove 3 threats. + */ +public class Card7_287 extends AbstractMinion { + public Card7_287() { + super(3, 9, 3, 6, Race.ORC, Culture.SAURON, "Mordor Guard"); + } + + @Override + protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0) + && PlayConditions.canExertMultiple(self, game, 1, 3, Culture.SAURON, Race.ORC)) { + ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new ChooseAndExertCharactersEffect(action, playerId, 3, 3, Culture.SAURON, Race.ORC)); + action.appendEffect( + new AddThreatsEffect(playerId, self, 3)); + return Collections.singletonList(action); + } + return null; + } + + @Override + public RequiredTriggerAction getDiscardedFromPlayTrigger(LotroGame game, PhysicalCard self) { + RequiredTriggerAction action = new RequiredTriggerAction(self); + action.appendEffect( + new RemoveThreatsEffect(self, 3)); + return action; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java index 0133808ec..902280265 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java @@ -71,6 +71,8 @@ public interface LotroCardBlueprint { public List getOptionalAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self); + public RequiredTriggerAction getDiscardedFromPlayTrigger(LotroGame game, PhysicalCard self); + public Block getSiteBlock(); public int getSiteNumber(); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java index 5fdbc788e..172336dda 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java @@ -28,6 +28,8 @@ public class RuleSet { new WinConditionRule(_actionsEnvironment).applyRule(); + new DiscardedCardRule(_actionsEnvironment).applyRule(); + new FrodoAndSamRule(_modifiersLogic).applyRule(); new ThreatRule(_actionsEnvironment).applyRule(); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/DiscardedCardRule.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/DiscardedCardRule.java new file mode 100644 index 000000000..17520756f --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/DiscardedCardRule.java @@ -0,0 +1,43 @@ +package com.gempukku.lotro.logic.timing.rules; + +import com.gempukku.lotro.game.AbstractActionProxy; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.game.state.actions.DefaultActionsEnvironment; +import com.gempukku.lotro.logic.actions.RequiredTriggerAction; +import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult; + +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; + +public class DiscardedCardRule { + private DefaultActionsEnvironment _actionsEnvironment; + + public DiscardedCardRule(DefaultActionsEnvironment actionsEnvironment) { + _actionsEnvironment = actionsEnvironment; + } + + public void applyRule() { + _actionsEnvironment.addAlwaysOnActionProxy( + new AbstractActionProxy() { + @Override + public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) { + if (effectResult.getType() == EffectResult.Type.DISCARD_FROM_PLAY) { + DiscardCardsFromPlayResult discardResult = (DiscardCardsFromPlayResult) effectResult; + Collection discardedCards = discardResult.getDiscardedCards(); + List actions = new LinkedList(); + for (PhysicalCard discardedCard : discardedCards) { + RequiredTriggerAction trigger = discardedCard.getBlueprint().getDiscardedFromPlayTrigger(game, discardedCard); + if (trigger != null) + actions.add(trigger); + } + return actions; + } + return null; + } + }); + } +}