"One Last Surprise"

This commit is contained in:
marcins78@gmail.com
2012-01-25 16:55:58 +00:00
parent 2f82daa0cd
commit 3def336595
3 changed files with 80 additions and 2 deletions

View File

@@ -0,0 +1,60 @@
package com.gempukku.lotro.cards.set15.gandalf;
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: The Hunters
* Side: Free
* Culture: Gandalf
* Twilight Cost: 2
* Type: Event • Skirmish
* Game Text: Spell. Spot Gandalf and an unbound companion skirmishing a minion to use Gandalfs resistance to resolve
* that skirmish instead of that companions strength.
*/
public class Card15_033 extends AbstractEvent {
public Card15_033() {
super(Side.FREE_PEOPLE, 2, Culture.GANDALF, "One Last Surprise", Phase.SKIRMISH);
addKeyword(Keyword.SPELL);
}
@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.gandalf)
&& PlayConditions.canSpot(game, Filters.unboundCompanion, Filters.inSkirmishAgainst(CardType.MINION));
}
@Override
public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
PlayEventAction action = new PlayEventAction(self);
final PhysicalCard gandalf = Filters.findFirstActive(game.getGameState(), game.getModifiersQuerying(), Filters.gandalf);
action.appendEffect(
new UnrespondableEffect() {
@Override
protected void doPlayEffect(LotroGame game) {
final Skirmish skirmish = game.getGameState().getSkirmish();
if (skirmish != null) {
skirmish.setFpStrengthOverrideEvaluator(
new Evaluator() {
@Override
public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) {
return modifiersQuerying.getResistance(gameState, gandalf);
}
});
}
}
});
return action;
}
}

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.game.state;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
import java.util.HashSet;
import java.util.Set;
@@ -10,6 +11,8 @@ public class Skirmish {
private Set<PhysicalCard> _shadowCharacters;
private boolean _cancelled;
private Evaluator _fpStrengthOverrideEvaluator;
private Set<PhysicalCard> _removedFromSkirmish = new HashSet<PhysicalCard>();
public Skirmish(PhysicalCard fellowshipCharacter, Set<PhysicalCard> shadowCharacters) {
@@ -17,6 +20,14 @@ public class Skirmish {
_shadowCharacters = shadowCharacters;
}
public Evaluator getFpStrengthOverrideEvaluator() {
return _fpStrengthOverrideEvaluator;
}
public void setFpStrengthOverrideEvaluator(Evaluator fpStrengthOverrideEvaluator) {
_fpStrengthOverrideEvaluator = fpStrengthOverrideEvaluator;
}
public PhysicalCard getFellowshipCharacter() {
return _fellowshipCharacter;
}

View File

@@ -8,7 +8,9 @@ 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;
public class RuleUtils {
public static int calculateFellowshipArcheryTotal(LotroGame game) {
@@ -64,10 +66,15 @@ public class RuleUtils {
}
public static int getFellowshipSkirmishStrength(LotroGame game) {
if (game.getGameState().getSkirmish() == null)
final Skirmish skirmish = game.getGameState().getSkirmish();
if (skirmish == null)
return 0;
PhysicalCard fpChar = game.getGameState().getSkirmish().getFellowshipCharacter();
final Evaluator overrideEvaluator = skirmish.getFpStrengthOverrideEvaluator();
if (overrideEvaluator != null)
return overrideEvaluator.evaluateExpression(game.getGameState(), game.getModifiersQuerying(), null);
PhysicalCard fpChar = skirmish.getFellowshipCharacter();
if (fpChar == null)
return 0;