"Avoid Being Seen"

This commit is contained in:
marcins78
2013-01-25 14:01:18 +00:00
parent 9dcbc12e56
commit 0243ac26ed
8 changed files with 91 additions and 4 deletions

View File

@@ -0,0 +1,19 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersLogic;
public class AddNoTwilightForCompanionMoveModifier extends AbstractModifier {
public AddNoTwilightForCompanionMoveModifier(PhysicalCard source, Filterable affectFilter) {
super(source, "Adds no twilight for move", affectFilter, null, ModifierEffect.MOVE_TWILIGHT_MODIFIER);
}
@Override
public boolean addsTwilightForCompanionMove(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard companion) {
return false;
}
}

View File

@@ -0,0 +1,41 @@
package com.gempukku.lotro.cards.set20.gondor;
import com.gempukku.lotro.cards.AbstractEvent;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilEndOfTurnModifierEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.modifiers.AddNoTwilightForCompanionMoveModifier;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
/**
* 0
* Avoid Being Seen
* Gondor Event • Fellowship
* To play, exert X [Gondor] rangers.
* Until the end of turn, add no twilight for each exerted ranger when the fellowship moves.
*/
public class Card20_181 extends AbstractEvent {
public Card20_181() {
super(Side.FREE_PEOPLE, 0, Culture.GONDOR, "Avoid Being Seen", Phase.FELLOWSHIP);
}
@Override
public PlayEventAction getPlayCardAction(String playerId, LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
final PlayEventAction action = new PlayEventAction(self);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 0, Integer.MAX_VALUE, Culture.GONDOR, Keyword.RANGER){
@Override
protected void forEachCardExertedCallback(PhysicalCard character) {
action.appendEffect(
new AddUntilEndOfTurnModifierEffect(
new AddNoTwilightForCompanionMoveModifier(self, character)));
}
});
return action;
}
}

View File

@@ -187,6 +187,11 @@ public abstract class AbstractModifier implements Modifier {
return 0;
}
@Override
public boolean addsTwilightForCompanionMove(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard companion) {
return true;
}
@Override
public boolean addsToArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
return true;

View File

@@ -76,6 +76,8 @@ public interface Modifier {
public int getMoveLimitModifier(GameState gameState, ModifiersQuerying modifiersQuerying);
boolean addsTwilightForCompanionMove(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard companion);
public boolean addsToArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card);
public boolean canPlayAction(GameState gameState, ModifiersQuerying modifiersQuerying, String performingPlayer, Action action);

View File

@@ -10,6 +10,8 @@ public enum ModifierEffect {
LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER, RETURN_TO_HAND_MODIFIER, TRANSFER_MODIFIER,
LIBERATION_MODIFIER,
MOVE_TWILIGHT_MODIFIER,
EXTRA_ACTION_MODIFIER, EXTRA_COST_MODIFIER,
INITIATIVE_MODIFIER, TEXT_MODIFIER,

View File

@@ -363,6 +363,14 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
return Math.max(1, result);
}
@Override
public boolean addsTwilightForCompanionMove(GameState gameState, PhysicalCard companion) {
for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.MOVE_TWILIGHT_MODIFIER, companion))
if (!modifier.addsTwilightForCompanionMove(gameState, this, companion))
return false;
return true;
}
@Override
public int getStrength(GameState gameState, PhysicalCard physicalCard) {
LoggingThreadLocal.logMethodStart(physicalCard, "getStrength");
@@ -819,7 +827,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
@Override
public boolean canAddBurden(GameState gameState, String performingPlayer, PhysicalCard source) {
for (Modifier modifier : getModifiers(gameState, ModifierEffect.BURDEN_MODIFIER)) {
for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.BURDEN_MODIFIER, source)) {
if (!modifier.canAddBurden(gameState, this, performingPlayer, source))
return false;
}

View File

@@ -39,9 +39,11 @@ public interface ModifiersQuerying {
public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card);
// Move limit
// Movement
public int getMoveLimit(GameState gameState, int baseMoveLimit);
public boolean addsTwilightForCompanionMove(GameState gameState, PhysicalCard companion);
// Twilight cost
public int getTwilightCost(GameState gameState, PhysicalCard physicalCard, boolean ignoreRoamingPenalty);

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.logic.timing.processes.turn.move;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.LotroCardBlueprint;
import com.gempukku.lotro.game.PhysicalCard;
@@ -11,6 +12,7 @@ import com.gempukku.lotro.logic.actions.SystemQueueAction;
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
import com.gempukku.lotro.logic.effects.PlaySiteEffect;
import com.gempukku.lotro.logic.effects.TriggeringResultEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
import com.gempukku.lotro.logic.timing.processes.GameProcess;
import com.gempukku.lotro.logic.timing.results.WhenMoveFromResult;
@@ -90,9 +92,15 @@ public class MovementGameProcess implements GameProcess {
else if (siteNumber > 6 && siteNumber <= 9)
siteTwilightCost += 6;
}
int companionCount = Filters.countActive(gameState, game.getModifiersQuerying(), CardType.COMPANION);
int companionsAddingTwilightForMoveCount = Filters.countActive(gameState, game.getModifiersQuerying(), CardType.COMPANION,
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return modifiersQuerying.addsTwilightForCompanionMove(gameState, physicalCard);
}
});
AddTwilightEffect effect = new AddTwilightEffect(null, siteTwilightCost + companionCount);
AddTwilightEffect effect = new AddTwilightEffect(null, siteTwilightCost + companionsAddingTwilightForMoveCount);
effect.setSourceText("Moving");
action.insertEffect(effect);
}