"Saruman's Staff"
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@ public abstract class AbstractModifier implements Modifier {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasToMoveIfPossible() {
|
||||
public boolean hasFlagActive(ModifierFlag modifierFlag) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)));
|
||||
|
||||
Reference in New Issue
Block a user