"Saruman's Staff"

This commit is contained in:
marcins78@gmail.com
2011-10-10 19:16:47 +00:00
parent ef252a1d37
commit 45be43ff27
21 changed files with 182 additions and 64 deletions

View File

@@ -5,6 +5,7 @@ import com.gempukku.lotro.filters.Filter;
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.Condition;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
@@ -13,6 +14,10 @@ public class CantBeAssignedToSkirmishModifier extends AbstractModifier {
super(source, "Can't be assigned to skirmish", affectFilter, new ModifierEffect[]{ModifierEffect.ASSIGNMENT_MODIFIER});
}
public CantBeAssignedToSkirmishModifier(PhysicalCard source, Condition condition, Filter affectFilter) {
super(source, "Can't be assigned to skirmish", affectFilter, condition, new ModifierEffect[]{ModifierEffect.ASSIGNMENT_MODIFIER});
}
@Override
public boolean canBeAssignedToSkirmish(GameState gameState, Side sidePlayer, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
return false;

View File

@@ -1,16 +0,0 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
public class HasToMoveIfPossibleModifier extends AbstractModifier {
public HasToMoveIfPossibleModifier(PhysicalCard source) {
super(source, "Has to move if possible", null, new ModifierEffect[]{ModifierEffect.MOVE_LIMIT_MODIFIER});
}
@Override
public boolean hasToMoveIfPossible() {
return true;
}
}

View File

@@ -0,0 +1,20 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
public class SpecialFlagModifier extends AbstractModifier {
private ModifierFlag _modifierFlag;
public SpecialFlagModifier(PhysicalCard source, ModifierFlag modifierFlag) {
super(source, "Special flag set", null, new ModifierEffect[]{ModifierEffect.SPECIAL_FLAG_MODIFIER});
_modifierFlag = modifierFlag;
}
@Override
public boolean hasFlagActive(ModifierFlag modifierFlag) {
return modifierFlag == _modifierFlag;
}
}

View File

@@ -18,6 +18,7 @@ import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.WoundCharactersEffect;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult;
@@ -58,7 +59,7 @@ public class Card1_001 extends AbstractAttachable {
@Override
public List<? extends Action> getOptionalBeforeActions(final String playerId, LotroGame game, Effect effect, final PhysicalCard self) {
if (effect.getType() == EffectResult.Type.WOUND
&& !game.getGameState().isCancelRingText()) {
&& !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) {
WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect;
if (woundEffect.getAffectedCardsMinusPrevented(game).contains(self.getAttachedTo())) {
List<Action> actions = new LinkedList<Action>();
@@ -93,7 +94,7 @@ public class Card1_001 extends AbstractAttachable {
public List<RequiredTriggerAction> getRequiredBeforeTriggers(LotroGame game, Effect effect, PhysicalCard self) {
if (effect.getType() == EffectResult.Type.WOUND
&& game.getGameState().isWearingRing()
&& !game.getGameState().isCancelRingText()) {
&& !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) {
WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect;
if (woundEffect.getAffectedCardsMinusPrevented(game).contains(self.getAttachedTo())) {
RequiredTriggerAction action = new RequiredTriggerAction(self);

View File

@@ -17,6 +17,7 @@ import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.WoundCharactersEffect;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult;
@@ -57,7 +58,7 @@ public class Card1_002 extends AbstractAttachable {
public List<? extends Action> getOptionalBeforeActions(final String playerId, LotroGame game, Effect effect, final PhysicalCard self) {
if (game.getGameState().getCurrentPhase() == Phase.SKIRMISH
&& effect.getType() == EffectResult.Type.WOUND
&& !game.getGameState().isCancelRingText()) {
&& !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) {
WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect;
if (woundEffect.getAffectedCardsMinusPrevented(game).contains(self.getAttachedTo())) {
List<Action> actions = new LinkedList<Action>();
@@ -92,7 +93,7 @@ public class Card1_002 extends AbstractAttachable {
public List<RequiredTriggerAction> getRequiredBeforeTriggers(LotroGame game, Effect effect, PhysicalCard self) {
if (effect.getType() == EffectResult.Type.WOUND
&& game.getGameState().isWearingRing()
&& !game.getGameState().isCancelRingText()) {
&& !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) {
WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect;
if (woundEffect.getAffectedCardsMinusPrevented(game).contains(self.getAttachedTo())) {
List<RequiredTriggerAction> actions = new LinkedList<RequiredTriggerAction>();

View File

@@ -3,15 +3,16 @@ package com.gempukku.lotro.cards.set1.wraith;
import com.gempukku.lotro.cards.AbstractResponseEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.SpecialFlagModifier;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.AbstractActionProxy;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.game.state.Skirmish;
import com.gempukku.lotro.logic.effects.AssignmentEffect;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
@@ -55,17 +56,9 @@ public class Card1_224 extends AbstractResponseEvent {
protected void cardSelected(PhysicalCard nazgul) {
PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId());
action.appendEffect(new AssignmentEffect(playerId, ringBearer, Collections.singletonList(nazgul), "Return to Its Master effect"));
game.getGameState().setCancelRingText(true);
game.getActionsEnvironment().addUntilStartOfPhaseActionProxy(
new AbstractActionProxy() {
@Override
public List<? extends Action> getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) {
if (effectResult.getType() == EffectResult.Type.END_OF_PHASE
&& lotroGame.getGameState().getCurrentPhase() == Phase.SKIRMISH)
game.getGameState().setCancelRingText(false);
return null;
}
}, Phase.REGROUP);
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new SpecialFlagModifier(self, ModifierFlag.RING_TEXT_INACTIVE), Phase.SKIRMISH));
}
});
}

View File

@@ -18,9 +18,7 @@ import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.effects.WoundCharactersEffect;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.*;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect;
@@ -50,6 +48,12 @@ public class Card3_068 extends AbstractMinion {
List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(
new CantTakeWoundsModifier(self,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE);
}
},
Filters.and(
Filters.sameCard(self),
new Filter() {
@@ -59,7 +63,14 @@ public class Card3_068 extends AbstractMinion {
}
})));
modifiers.add(
new CantBeAssignedToSkirmishModifier(self, Filters.sameCard(self)));
new CantBeAssignedToSkirmishModifier(self,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE);
}
},
Filters.sameCard(self)));
modifiers.add(
new KeywordModifier(self, Filters.race(Race.URUK_HAI), Keyword.FIERCE));
return modifiers;

View File

@@ -15,7 +15,9 @@ import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.effects.AssignmentEffect;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.timing.Action;
@@ -46,6 +48,12 @@ public class Card3_069 extends AbstractMinion {
List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(
new CantTakeWoundsModifier(self,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE);
}
},
Filters.and(
Filters.sameCard(self),
new Filter() {
@@ -55,7 +63,14 @@ public class Card3_069 extends AbstractMinion {
}
})));
modifiers.add(
new CantBeAssignedToSkirmishModifier(self, Filters.sameCard(self)));
new CantBeAssignedToSkirmishModifier(self,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE);
}
},
Filters.sameCard(self)));
return modifiers;
}

View File

@@ -20,6 +20,7 @@ import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.WoundCharactersEffect;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect;
@@ -57,7 +58,7 @@ public class Card4_001 extends AbstractAttachable {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return !gameState.isCancelRingText() && gameState.isWearingRing();
return !modifiersQuerying.hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE) && gameState.isWearingRing();
}
}, 2));
@@ -67,7 +68,7 @@ public class Card4_001 extends AbstractAttachable {
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.SKIRMISH, self)
&& !game.getGameState().isCancelRingText()) {
&& !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) {
ActivateCardAction action = new ActivateCardAction(self, Keyword.SKIRMISH);
action.appendCost(
new AddBurdenEffect(self, 1));
@@ -96,7 +97,7 @@ public class Card4_001 extends AbstractAttachable {
public List<RequiredTriggerAction> getRequiredBeforeTriggers(LotroGame game, Effect effect, PhysicalCard self) {
if (effect.getType() == EffectResult.Type.WOUND
&& game.getGameState().isWearingRing()
&& !game.getGameState().isCancelRingText()) {
&& !game.getModifiersQuerying().hasFlagActive(ModifierFlag.RING_TEXT_INACTIVE)) {
WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect;
if (woundEffect.getAffectedCardsMinusPrevented(game).contains(self.getAttachedTo())) {
RequiredTriggerAction action = new RequiredTriggerAction(self);

View File

@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set4.dunland;
import com.gempukku.lotro.cards.AbstractAttachable;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.HasToMoveIfPossibleModifier;
import com.gempukku.lotro.cards.modifiers.SpecialFlagModifier;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
@@ -11,6 +11,7 @@ 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.effects.DiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.timing.Action;
import java.util.Collections;
@@ -44,7 +45,7 @@ public class Card4_030 extends AbstractAttachable {
new DiscardCardsFromPlayEffect(self, self));
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new HasToMoveIfPossibleModifier(self), Phase.REGROUP));
new SpecialFlagModifier(self, ModifierFlag.HAS_TO_MOVE_IF_POSSIBLE), Phase.REGROUP));
return Collections.singletonList(action);
}
return null;

View File

@@ -9,11 +9,15 @@ import com.gempukku.lotro.cards.modifiers.StrengthModifier;
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.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
@@ -40,7 +44,14 @@ public class Card4_033 extends AbstractMinion {
@Override
public List<? extends Modifier> getAlwaysOnModifiers(PhysicalCard self) {
return Collections.singletonList(
new CantBeAssignedToSkirmishModifier(self, Filters.sameCard(self)));
new CantBeAssignedToSkirmishModifier(self,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE);
}
},
Filters.sameCard(self)));
}
@Override

View File

@@ -16,6 +16,7 @@ import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
@@ -49,11 +50,18 @@ public class Card4_173 extends AbstractMinion {
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return gameState.getCurrentPhase() == Phase.ARCHERY;
return gameState.getCurrentPhase() == Phase.ARCHERY && !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE);
}
}, Filters.sameCard(self)));
modifiers.add(
new CantBeAssignedToSkirmishModifier(self, Filters.sameCard(self)));
new CantBeAssignedToSkirmishModifier(self,
new Condition() {
@Override
public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) {
return !modifiersQuerying.hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE);
}
},
Filters.sameCard(self)));
return modifiers;
}

View File

@@ -0,0 +1,67 @@
package com.gempukku.lotro.cards.set4.isengard;
import com.gempukku.lotro.cards.AbstractAttachable;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.SpecialFlagModifier;
import com.gempukku.lotro.cards.modifiers.StrengthModifier;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filter;
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.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.timing.Action;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* Set: The Two Towers
* Side: Shadow
* Culture: Isengard
* Twilight Cost: 2
* Type: Artifact
* Strength: +2
* Game Text: Plays on Saruman. He is fierce and damage +1. Maneuver: Make the first sentence of Saruman's game text
* not apply until the regroup phase.
*/
public class Card4_174 extends AbstractAttachable {
public Card4_174() {
super(Side.SHADOW, CardType.ARTIFACT, 2, Culture.ISENGARD, Keyword.STAFF, "Saruman's Staff", true);
}
@Override
protected Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
return Filters.name("Saruman");
}
@Override
public List<? extends Modifier> getAlwaysOnModifiers(PhysicalCard self) {
List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(
new StrengthModifier(self, Filters.hasAttached(self), 2));
modifiers.add(
new KeywordModifier(self, Filters.hasAttached(self), Keyword.FIERCE));
modifiers.add(
new KeywordModifier(self, Filters.hasAttached(self), Keyword.DAMAGE));
return modifiers;
}
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game.getGameState(), Phase.MANEUVER, self, 0)
&& !game.getModifiersQuerying().hasFlagActive(ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE)) {
ActivateCardAction action = new ActivateCardAction(self, Keyword.MANEUVER);
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new SpecialFlagModifier(self, ModifierFlag.SARUMAN_FIRST_SENTENCE_INACTIVE), Phase.REGROUP));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -29,7 +29,6 @@ public class GameState {
private int _moveCount;
private boolean _fierceSkirmishes;
private boolean _wearingRing;
private boolean _cancelRingText;
private Map<String, Integer> _playerPosition = new HashMap<String, Integer>();
private Map<PhysicalCard, Map<Token, Integer>> _cardTokens = new HashMap<PhysicalCard, Map<Token, Integer>>();
@@ -90,14 +89,6 @@ public class GameState {
return _wearingRing;
}
public void setCancelRingText(boolean cancelRingText) {
_cancelRingText = cancelRingText;
}
public boolean isCancelRingText() {
return _cancelRingText;
}
public PlayerOrder getPlayerOrder() {
return _playerOrder;
}

View File

@@ -206,7 +206,7 @@ public abstract class AbstractModifier implements Modifier {
}
@Override
public boolean hasToMoveIfPossible() {
public boolean hasFlagActive(ModifierFlag modifierFlag) {
return false;
}
}

View File

@@ -82,5 +82,5 @@ public interface Modifier {
public int getSpotCount(GameState gameState, ModifiersQuerying modifiersQuerying, Filter filter, int result);
public boolean hasToMoveIfPossible();
public boolean hasFlagActive(ModifierFlag modifierFlag);
}

View File

@@ -4,5 +4,8 @@ public enum ModifierEffect {
KEYWORD_MODIFIER, STRENGTH_MODIFIER, VITALITY_MODIFIER, RESISTANCE_MODIFIER, SITE_NUMBER_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_MODIFIER,
WOUND_MODIFIER,
PRESENCE_MODIFIER, ARCHERY_MODIFIER, MOVE_LIMIT_MODIFIER, ACTION_MODIFIER, ASSIGNMENT_MODIFIER, DISCARD_FROM_PLAY_MODIFIER,
LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER
LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER,
SPECIAL_FLAG_MODIFIER
}

View File

@@ -0,0 +1,5 @@
package com.gempukku.lotro.logic.modifiers;
public enum ModifierFlag {
HAS_TO_MOVE_IF_POSSIBLE, RING_TEXT_INACTIVE, SARUMAN_FIRST_SENTENCE_INACTIVE
}

View File

@@ -469,9 +469,9 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
}
@Override
public boolean hasToMoveIfPossible() {
for (Modifier modifier : getModifiers(ModifierEffect.MOVE_LIMIT_MODIFIER))
if (modifier.hasToMoveIfPossible())
public boolean hasFlagActive(ModifierFlag modifierFlag) {
for (Modifier modifier : getModifiers(ModifierEffect.SPECIAL_FLAG_MODIFIER))
if (modifier.hasFlagActive(modifierFlag))
return true;
return false;

View File

@@ -25,7 +25,7 @@ public interface ModifiersQuerying {
public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card);
// Move limit
public int getMoveLimit(GameState gameState, int baseMoveLimit);
// Twilight cost
@@ -80,5 +80,5 @@ public interface ModifiersQuerying {
public int getSpotCount(GameState gameState, Filter filter, int inPlayCount);
public boolean hasToMoveIfPossible();
public boolean hasFlagActive(ModifierFlag modifierFlag);
}

View File

@@ -4,6 +4,7 @@ import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.decisions.MultipleChoiceAwaitingDecision;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.timing.processes.GameProcess;
import com.gempukku.lotro.logic.timing.processes.turn.ShadowPhasesGameProcess;
import com.gempukku.lotro.logic.timing.processes.turn.general.EndOfPhaseGameProcess;
@@ -22,7 +23,7 @@ public class FellowshipPlayerChoosesToMoveOrStayGameProcess implements GameProce
public void process() {
final GameState gameState = _game.getGameState();
if (gameState.getMoveCount() < _game.getModifiersQuerying().getMoveLimit(gameState, 2)) {
if (_game.getModifiersQuerying().hasToMoveIfPossible()) {
if (_game.getModifiersQuerying().hasFlagActive(ModifierFlag.HAS_TO_MOVE_IF_POSSIBLE)) {
_nextProcess = new MovementGameProcess(_game,
new EndOfPhaseGameProcess(_game, Phase.REGROUP,
new ShadowPhasesGameProcess(_game)));