From 0c85767781e2497422c839f17ae95f0813d1eddf Mon Sep 17 00:00:00 2001 From: marcins78 Date: Wed, 30 Jan 2013 15:35:09 +0000 Subject: [PATCH] "Cave Troll of Moria", "Monstrous Fiend" --- .../DiscardCardFromHandDiscountEffect.java | 67 +++++++++++++++++++ .../lotro/cards/set20/moria/Card20_256.java | 39 +++++++++++ 2 files changed, 106 insertions(+) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/DiscardCardFromHandDiscountEffect.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/moria/Card20_256.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/DiscardCardFromHandDiscountEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/DiscardCardFromHandDiscountEffect.java new file mode 100644 index 000000000..c4036ac4c --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/DiscardCardFromHandDiscountEffect.java @@ -0,0 +1,67 @@ +package com.gempukku.lotro.cards.effects.discount; + +import com.gempukku.lotro.cards.effects.DiscountEffect; +import com.gempukku.lotro.common.Filterable; +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.SubAction; +import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect; +import com.gempukku.lotro.logic.timing.AbstractSubActionEffect; +import com.gempukku.lotro.logic.timing.Action; + +import java.util.Collection; + +public class DiscardCardFromHandDiscountEffect extends AbstractSubActionEffect implements DiscountEffect { + private Action _action; + private String _playerId; + private int _minimalDiscount; + private int _discardedCount; + private Filterable[] _discardedCardFilter; + + public DiscardCardFromHandDiscountEffect(Action action, String playerId, Filterable... discardedCardFilter) { + _action = action; + _playerId = playerId; + _discardedCardFilter = discardedCardFilter; + } + + @Override + public int getDiscountPaidFor() { + return _discardedCount; + } + + @Override + public void setMinimalRequiredDiscount(int minimalDiscount) { + _minimalDiscount = minimalDiscount; + } + + @Override + public String getText(LotroGame game) { + return "Discard cards to reduce twilight cost"; + } + + @Override + public Type getType() { + return null; + } + + @Override + public boolean isPlayableInFull(LotroGame game) { + return Filters.filter(game.getGameState().getHand(_playerId), game.getGameState(), game.getModifiersQuerying(), _discardedCardFilter).size() >= _minimalDiscount; + } + + @Override + public void playEffect(LotroGame game) { + if (isPlayableInFull(game)) { + SubAction subAction = new SubAction(_action); + subAction.appendEffect( + new ChooseAndDiscardCardsFromHandEffect(_action, _playerId, false, _minimalDiscount, Integer.MAX_VALUE, _discardedCardFilter) { + @Override + protected void cardsBeingDiscardedCallback(Collection cardsBeingDiscarded) { + _discardedCount = cardsBeingDiscarded.size(); + } + }); + processSubAction(game, subAction); + } + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/moria/Card20_256.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/moria/Card20_256.java new file mode 100644 index 000000000..2d534d4af --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/moria/Card20_256.java @@ -0,0 +1,39 @@ +package com.gempukku.lotro.cards.set20.moria; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.actions.PlayPermanentAction; +import com.gempukku.lotro.cards.effects.DiscountEffect; +import com.gempukku.lotro.cards.effects.discount.DiscardCardFromHandDiscountEffect; +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; + +/** + * 10 + * •Cave Troll of Moria, Monstrous Fiend + * Moria Minion • Troll + * 15 4 4 + * Damage +1. Fierce. + * When you play Cave Troll of Moria, you may discard X [Moria] cards from hand; Cave Troll of Moria's twilight cost + * is -1 for each [Moria] card discarded in this way. + */ +public class Card20_256 extends AbstractMinion { + public Card20_256() { + super(10, 15, 4, 4, Race.TROLL, Culture.MORIA, "Cave Troll of Moria", "Monstrous Fiend", true); + addKeyword(Keyword.DAMAGE, 1); + addKeyword(Keyword.FIERCE); + } + + @Override + protected int getPotentialExtraPaymentDiscount(String playerId, LotroGame game, PhysicalCard self) { + return -Filters.filter(game.getGameState().getHand(playerId), game.getGameState(), game.getModifiersQuerying(), Culture.MORIA, Filters.not(self)).size(); + } + + @Override + protected DiscountEffect getDiscountEffect(PlayPermanentAction action, String playerId, LotroGame game, PhysicalCard self) { + return new DiscardCardFromHandDiscountEffect(action, playerId, Culture.MORIA); + } +}