diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_211.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_211.java new file mode 100644 index 000000000..af48ee764 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_211.java @@ -0,0 +1,64 @@ +package com.gempukku.lotro.cards.set7.wraith; + +import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect; +import com.gempukku.lotro.cards.modifiers.evaluator.CountActiveEvaluator; +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.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 com.gempukku.lotro.logic.timing.EffectResult; + +import java.util.Collections; +import java.util.List; + +/** + * Set: The Return of the King + * Side: Shadow + * Culture: Wraith + * Twilight Cost: 5 + * Type: Minion • Nazgul + * Strength: 10 + * Vitality: 3 + * Site: 3 + * Game Text: Fierce. When you play Ulaire Cantea, add a threat for each companion over 4. Maneuver: Remove 2 threats + * and spot another [WRAITH] minion to discard a possession. + */ +public class Card7_211 extends AbstractMinion { + public Card7_211() { + super(5, 10, 3, 3, Race.NAZGUL, Culture.WRAITH, "Ulaire Cantea", true); + addKeyword(Keyword.FIERCE); + } + + @Override + public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { + if (PlayConditions.played(game, effectResult, self)) { + RequiredTriggerAction action = new RequiredTriggerAction(self); + action.appendEffect( + new AddThreatsEffect(self.getOwner(), self, new CountActiveEvaluator(4, null, CardType.COMPANION))); + return Collections.singletonList(action); + } + return null; + } + + @Override + protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0) + && PlayConditions.canRemoveThreat(game, self, 2) + && PlayConditions.canSpot(game, Filters.not(self), Culture.WRAITH, CardType.MINION)) { + ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new RemoveThreatsEffect(self, 2)); + action.appendEffect( + new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.POSSESSION)); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AddThreatsEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AddThreatsEffect.java index 235daeaad..ebdd567b9 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AddThreatsEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AddThreatsEffect.java @@ -5,6 +5,8 @@ import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.GameUtils; +import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; import com.gempukku.lotro.logic.timing.AbstractEffect; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.results.AddThreatResult; @@ -15,22 +17,30 @@ public class AddThreatsEffect extends AbstractEffect { private Action _action; private String _performingPlayer; private PhysicalCard _source; - private int _count; + private Evaluator _count; - public AddThreatsEffect(String performingPlayer, PhysicalCard source, int count) { + public AddThreatsEffect(String performingPlayer, PhysicalCard source, Evaluator count) { _performingPlayer = performingPlayer; _source = source; _count = count; } + public AddThreatsEffect(String performingPlayer, PhysicalCard source, int count) { + this(performingPlayer, source, new ConstantEvaluator(count)); + } + @Override public boolean isPlayableInFull(LotroGame game) { - return _count <= getThreatsPossibleToAdd(game); + return evaluateCount(game) <= getThreatsPossibleToAdd(game); + } + + private int evaluateCount(LotroGame game) { + return _count.evaluateExpression(game.getGameState(), game.getModifiersQuerying(), null); } @Override public String getText(LotroGame game) { - return "Add " + _count + " threat" + ((_count > 1) ? "s" : ""); + return "Add " + _count + " threat" + ((evaluateCount(game) > 1) ? "s" : ""); } @Override @@ -45,12 +55,13 @@ public class AddThreatsEffect extends AbstractEffect { @Override protected FullEffectResult playEffectReturningResult(LotroGame game) { - int toAdd = Math.min(_count, getThreatsPossibleToAdd(game)); + int count = evaluateCount(game); + int toAdd = Math.min(count, getThreatsPossibleToAdd(game)); if (toAdd > 0) { game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " adds " + toAdd + " threat" + ((toAdd > 1) ? "s" : "")); game.getGameState().addThreats(game.getGameState().getCurrentPlayerId(), toAdd); - return new FullEffectResult(Collections.singleton(new AddThreatResult(_source, toAdd)), toAdd == _count, toAdd == _count); + return new FullEffectResult(Collections.singleton(new AddThreatResult(_source, toAdd)), toAdd == count, toAdd == count); } return new FullEffectResult(null, false, false); }