From 5d6f6ce75e78dca9b03dfb5a4e0448212b829522 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 8 Mar 2012 16:29:47 +0000 Subject: [PATCH] "Final Triumph" --- .../cards/set18/uruk_hai/Card18_115.java | 58 +++++++++++++++++++ .../gempukku/lotro/game/state/Skirmish.java | 9 +++ .../lotro/logic/timing/RuleUtils.java | 13 ++++- 3 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set18/uruk_hai/Card18_115.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set18/uruk_hai/Card18_115.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set18/uruk_hai/Card18_115.java new file mode 100644 index 000000000..a84d3c0f5 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set18/uruk_hai/Card18_115.java @@ -0,0 +1,58 @@ +package com.gempukku.lotro.cards.set18.uruk_hai; + +import com.gempukku.lotro.cards.AbstractEvent; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.actions.PlayEventAction; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.game.state.Skirmish; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; + +/** + * Set: Treachery & Deceit + * Side: Shadow + * Culture: Uruk-Hai + * Twilight Cost: 4 + * Type: Event • Skirmish + * Game Text: Spot your Uruk-hai skirmishing a companion to use vitality to resolve that skirmish instead of strength. + */ +public class Card18_115 extends AbstractEvent { + public Card18_115() { + super(Side.SHADOW, 4, Culture.URUK_HAI, "Final Triumph", Phase.SKIRMISH); + } + + @Override + public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) { + return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile) + && PlayConditions.canSpot(game, Filters.owner(playerId), Race.URUK_HAI, Filters.inSkirmishAgainst(CardType.COMPANION)); + } + + @Override + public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { + PlayEventAction action = new PlayEventAction(self); + action.appendEffect( + new UnrespondableEffect() { + @Override + protected void doPlayEffect(LotroGame game) { + final Skirmish skirmish = game.getGameState().getSkirmish(); + if (skirmish != null) { + Evaluator vitalityEvaluator = new Evaluator() { + @Override + public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) { + return modifiersQuerying.getVitality(gameState, cardAffected); + } + }; + + skirmish.setFpStrengthOverrideEvaluator(vitalityEvaluator); + skirmish.setShadowStrengthOverrideEvaluator(vitalityEvaluator); + } + } + }); + return action; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java index d83bd17e1..822e036f7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java @@ -12,6 +12,7 @@ public class Skirmish { private boolean _cancelled; private Evaluator _fpStrengthOverrideEvaluator; + private Evaluator _shadowStrengthOverrideEvaluator; private Set _removedFromSkirmish = new HashSet(); @@ -28,6 +29,14 @@ public class Skirmish { _fpStrengthOverrideEvaluator = fpStrengthOverrideEvaluator; } + public Evaluator getShadowStrengthOverrideEvaluator() { + return _shadowStrengthOverrideEvaluator; + } + + public void setShadowStrengthOverrideEvaluator(Evaluator shadowStrengthOverrideEvaluator) { + _shadowStrengthOverrideEvaluator = shadowStrengthOverrideEvaluator; + } + public PhysicalCard getFellowshipCharacter() { return _fellowshipCharacter; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java index 52e85f988..d5601eec4 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java @@ -82,11 +82,20 @@ public class RuleUtils { } public static int getShadowSkirmishStrength(LotroGame game) { - if (game.getGameState().getSkirmish() == null) + final Skirmish skirmish = game.getGameState().getSkirmish(); + if (skirmish == null) return 0; + final Evaluator overrideEvaluator = skirmish.getShadowStrengthOverrideEvaluator(); + if (overrideEvaluator != null) { + int total = 0; + for (PhysicalCard physicalCard : skirmish.getShadowCharacters()) + total += overrideEvaluator.evaluateExpression(game.getGameState(), game.getModifiersQuerying(), physicalCard); + return total; + } + int totalStrength = 0; - for (PhysicalCard physicalCard : game.getGameState().getSkirmish().getShadowCharacters()) + for (PhysicalCard physicalCard : skirmish.getShadowCharacters()) totalStrength += game.getModifiersQuerying().getStrength(game.getGameState(), physicalCard); return totalStrength;