Remove some of the clunky limits implementations.
This commit is contained in:
@@ -3,25 +3,23 @@ package com.gempukku.lotro.cards.effects;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
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.actions.AbstractCostToEffectAction;
|
||||
import com.gempukku.lotro.logic.actions.SubAction;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
|
||||
public class CheckLimitEffect extends UnrespondableEffect {
|
||||
public class CheckPhaseLimitEffect extends UnrespondableEffect {
|
||||
private Action _action;
|
||||
private PhysicalCard _card;
|
||||
private int _limit;
|
||||
private Phase _phase;
|
||||
private Effect _limitedEffect;
|
||||
|
||||
public CheckLimitEffect(Action action, PhysicalCard card, int limit, Effect limitedEffect) {
|
||||
public CheckPhaseLimitEffect(Action action, PhysicalCard card, int limit, Effect limitedEffect) {
|
||||
this(action, card, limit, null, limitedEffect);
|
||||
}
|
||||
|
||||
public CheckLimitEffect(Action action, PhysicalCard card, int limit, Phase phase, Effect limitedEffect) {
|
||||
public CheckPhaseLimitEffect(Action action, PhysicalCard card, int limit, Phase phase, Effect limitedEffect) {
|
||||
_card = card;
|
||||
_limit = limit;
|
||||
_phase = phase;
|
||||
@@ -34,9 +32,9 @@ public class CheckLimitEffect extends UnrespondableEffect {
|
||||
Phase phase = _phase;
|
||||
if (phase == null)
|
||||
phase = game.getGameState().getCurrentPhase();
|
||||
|
||||
int count = game.getModifiersEnvironment().getUntilEndOfPhaseLimitCounter(_card, phase).incrementCounter();
|
||||
if (count <= _limit) {
|
||||
|
||||
int incrementedBy = game.getModifiersQuerying().getUntilEndOfPhaseLimitCounter(_card, phase).incrementToLimit(_limit, 1);
|
||||
if (incrementedBy > 0) {
|
||||
SubAction subAction = new SubAction(_action);
|
||||
subAction.appendEffect(
|
||||
_limitedEffect);
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.gempukku.lotro.cards.effects;
|
||||
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.SubAction;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||
|
||||
public class CheckTurnLimitEffect extends UnrespondableEffect {
|
||||
private Action _action;
|
||||
private PhysicalCard _card;
|
||||
private int _limit;
|
||||
private Effect _limitedEffect;
|
||||
|
||||
public CheckTurnLimitEffect(Action action, PhysicalCard card, int limit, Effect limitedEffect) {
|
||||
_card = card;
|
||||
_limit = limit;
|
||||
_limitedEffect = limitedEffect;
|
||||
_action = action;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doPlayEffect(LotroGame game) {
|
||||
int incrementedBy = game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(_card).incrementToLimit(_limit, 1);
|
||||
if (incrementedBy > 0) {
|
||||
SubAction subAction = new SubAction(_action);
|
||||
subAction.appendEffect(
|
||||
_limitedEffect);
|
||||
game.getActionsEnvironment().addActionToStack(subAction);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,21 +6,27 @@ 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;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
|
||||
public class MoveLimitModifier extends AbstractModifier {
|
||||
private int _moveLimitModifier;
|
||||
private Evaluator _moveLimitModifier;
|
||||
|
||||
public MoveLimitModifier(PhysicalCard source, int moveLimitModifier) {
|
||||
this(source, null, moveLimitModifier);
|
||||
}
|
||||
|
||||
public MoveLimitModifier(PhysicalCard source, Condition condition, int moveLimitModifier) {
|
||||
super(source, "Move limit " + ((moveLimitModifier < 0) ? moveLimitModifier : ("+" + moveLimitModifier)), null, condition, ModifierEffect.MOVE_LIMIT_MODIFIER);
|
||||
this(source, condition, new ConstantEvaluator(moveLimitModifier));
|
||||
}
|
||||
|
||||
public MoveLimitModifier(PhysicalCard source, Condition condition, Evaluator moveLimitModifier) {
|
||||
super(source, null, null, condition, ModifierEffect.MOVE_LIMIT_MODIFIER);
|
||||
_moveLimitModifier = moveLimitModifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMoveLimitModifier(GameState gameState, ModifiersQuerying modifiersQuerying) {
|
||||
return _moveLimitModifier;
|
||||
return _moveLimitModifier.evaluateExpression(gameState, modifiersQuerying, null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import com.gempukku.lotro.logic.modifiers.LimitCounter;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
|
||||
public class CardLimitEvaluator implements Evaluator {
|
||||
public class CardPhaseLimitEvaluator implements Evaluator {
|
||||
private Integer _evaluated;
|
||||
|
||||
private Evaluator _evaluator;
|
||||
@@ -18,7 +18,7 @@ public class CardLimitEvaluator implements Evaluator {
|
||||
private Phase _phase;
|
||||
private int _limit;
|
||||
|
||||
public CardLimitEvaluator(LotroGame game, PhysicalCard source, Phase phase, int limit, Evaluator evaluator) {
|
||||
public CardPhaseLimitEvaluator(LotroGame game, PhysicalCard source, Phase phase, int limit, Evaluator evaluator) {
|
||||
_game = game;
|
||||
_source = source;
|
||||
_phase = phase;
|
||||
@@ -27,7 +27,7 @@ public class CardLimitEvaluator implements Evaluator {
|
||||
}
|
||||
|
||||
private int evaluateOnce(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) {
|
||||
LimitCounter limitCounter = _game.getModifiersEnvironment().getUntilEndOfPhaseLimitCounter(_source, _phase);
|
||||
LimitCounter limitCounter = modifiersQuerying.getUntilEndOfPhaseLimitCounter(_source, _phase);
|
||||
int internalResult = _evaluator.evaluateExpression(gameState, modifiersQuerying, cardAffected);
|
||||
return limitCounter.incrementToLimit(_limit, internalResult);
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.gempukku.lotro.cards.modifiers.evaluator;
|
||||
|
||||
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.modifiers.LimitCounter;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
|
||||
public class CardTurnLimitEvaluator implements Evaluator {
|
||||
private Integer _evaluated;
|
||||
|
||||
private Evaluator _evaluator;
|
||||
|
||||
private LotroGame _game;
|
||||
private PhysicalCard _source;
|
||||
private int _limit;
|
||||
|
||||
public CardTurnLimitEvaluator(LotroGame game, PhysicalCard source, int limit, Evaluator evaluator) {
|
||||
_game = game;
|
||||
_source = source;
|
||||
_limit = limit;
|
||||
_evaluator = evaluator;
|
||||
}
|
||||
|
||||
private int evaluateOnce(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) {
|
||||
LimitCounter limitCounter = modifiersQuerying.getUntilEndOfTurnLimitCounter(_source);
|
||||
int internalResult = _evaluator.evaluateExpression(gameState, modifiersQuerying, cardAffected);
|
||||
return limitCounter.incrementToLimit(_limit, internalResult);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard cardAffected) {
|
||||
if (_evaluated == null)
|
||||
_evaluated = evaluateOnce(gameState, modifiersQuerying, cardAffected);
|
||||
return _evaluated;
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractMinion;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
@@ -44,7 +44,7 @@ public class Card1_153 extends AbstractMinion {
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, self, null,
|
||||
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 3,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3,
|
||||
new ConstantEvaluator(1))), Phase.SKIRMISH));
|
||||
|
||||
return Collections.singletonList(action);
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.gempukku.lotro.cards.set1.sauron;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractMinion;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.effects.CheckTurnLimitEffect;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Race;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
@@ -9,8 +11,6 @@ import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||
import com.gempukku.lotro.logic.timing.results.PlayCardResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -33,25 +33,12 @@ public class Card1_266 extends AbstractMinion {
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) {
|
||||
if (effectResult.getType() == EffectResult.Type.PLAY) {
|
||||
PlayCardResult playCardResult = (PlayCardResult) effectResult;
|
||||
PhysicalCard playedCard = playCardResult.getPlayedCard();
|
||||
if (playCardResult.getAttachedTo() == self
|
||||
&& self.getData() == null
|
||||
&& Filters.weapon.accepts(game.getGameState(), game.getModifiersQuerying(), playedCard)
|
||||
) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new AddTwilightEffect(self, 2));
|
||||
action.appendEffect(
|
||||
new UnrespondableEffect() {
|
||||
@Override
|
||||
public void doPlayEffect(LotroGame game) {
|
||||
self.storeData(new Object());
|
||||
}
|
||||
});
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
if (TriggerConditions.playedOn(game, effectResult, self, Filters.owner(self.getOwner()), Filters.weapon)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new CheckTurnLimitEffect(action, self, 1,
|
||||
new AddTwilightEffect(self, 2)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractAttachable;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
@@ -52,7 +52,7 @@ public class Card1_269 extends AbstractAttachable {
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, Filters.sameCard(self.getAttachedTo()), null,
|
||||
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 3, new ConstantEvaluator(1))), Phase.SKIRMISH));
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3, new ConstantEvaluator(1))), Phase.SKIRMISH));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -2,7 +2,6 @@ package com.gempukku.lotro.cards.set1.sauron;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractAttachable;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.actions.AttachPermanentAction;
|
||||
import com.gempukku.lotro.cards.effects.AddBurdenEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
|
||||
@@ -13,7 +12,6 @@ import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.results.AssignmentResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -53,15 +51,9 @@ public class Card1_279 extends AbstractAttachable {
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.assignedAgainst(game, effectResult, null, Filters.any, CardType.COMPANION)) {
|
||||
AssignmentResult assignmentResult = (AssignmentResult) effectResult;
|
||||
if (assignmentResult.getAssignedCard() == self.getAttachedTo())
|
||||
self.storeData(true);
|
||||
else if (self.getData() == null)
|
||||
self.storeData(false);
|
||||
}
|
||||
if (effectResult.getType() == EffectResult.Type.END_OF_TURN
|
||||
&& self.getData() != null && (!((Boolean) self.getData()))) {
|
||||
&& !game.getActionsEnvironment().wasAssignedThisTurn(game, self)
|
||||
&& game.getActionsEnvironment().wasAssignedThisTurn(game, CardType.COMPANION)) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new AddBurdenEffect(self, 1));
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.gempukku.lotro.cards.set1.shire;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.effects.ExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
|
||||
import com.gempukku.lotro.cards.effects.RevealAndChooseCardsFromOpponentHandEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseOpponentEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.common.PossessionClass;
|
||||
@@ -16,9 +16,8 @@ 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.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
@@ -60,15 +59,11 @@ public class Card1_313 extends AbstractAttachableFPPossession {
|
||||
@Override
|
||||
protected void cardsSelected(List<PhysicalCard> selectedCards) {
|
||||
Collection<PhysicalCard> orcs = Filters.filter(game.getGameState().getHand(opponentId), game.getGameState(), game.getModifiersQuerying(), Race.ORC);
|
||||
Integer limit = (Integer) self.getData();
|
||||
int usedUp = 0;
|
||||
if (limit != null)
|
||||
usedUp = limit;
|
||||
int toRemove = Math.min(4 - usedUp, orcs.size());
|
||||
if (toRemove > 0) {
|
||||
self.storeData(usedUp + toRemove);
|
||||
action.appendEffect(new RemoveTwilightEffect(toRemove));
|
||||
}
|
||||
int toRemove = Math.min(orcs.size(), game.getGameState().getTwilightPool());
|
||||
action.appendEffect(
|
||||
new RemoveTwilightEffect(
|
||||
new CardPhaseLimitEvaluator(game, self, game.getGameState().getCurrentPhase(), 4,
|
||||
new ConstantEvaluator(toRemove))));
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -77,11 +72,4 @@ public class Card1_313 extends AbstractAttachableFPPossession {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.endOfPhase(game, effectResult, Phase.FELLOWSHIP) || TriggerConditions.endOfPhase(game, effectResult, Phase.REGROUP))
|
||||
self.removeData();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,14 @@ package com.gempukku.lotro.cards.set1.site;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractSite;
|
||||
import com.gempukku.lotro.cards.modifiers.MoveLimitModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardTurnLimitEvaluator;
|
||||
import com.gempukku.lotro.common.Block;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
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.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.List;
|
||||
@@ -26,11 +28,11 @@ public class Card1_327 extends AbstractSite {
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (self.getData() == null
|
||||
if (game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1
|
||||
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Keyword.RANGER)) {
|
||||
self.storeData(new Object());
|
||||
game.getModifiersEnvironment().addUntilEndOfTurnModifier(
|
||||
new MoveLimitModifier(self, 1));
|
||||
new MoveLimitModifier(self, null,
|
||||
new CardTurnLimitEvaluator(game, self, 1, new ConstantEvaluator(1))));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ public class Card1_338 extends AbstractSite {
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return (self.getData() == null);
|
||||
return modifiersQuerying.getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1;
|
||||
}
|
||||
}), -5);
|
||||
}
|
||||
@@ -50,7 +50,7 @@ public class Card1_338 extends AbstractSite {
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, Race.NAZGUL)
|
||||
&& PlayConditions.location(game, self))
|
||||
self.storeData(new Object());
|
||||
game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).incrementToLimit(1, 1);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,14 @@ package com.gempukku.lotro.cards.set1.site;
|
||||
import com.gempukku.lotro.cards.AbstractSite;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.modifiers.MoveLimitModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardTurnLimitEvaluator;
|
||||
import com.gempukku.lotro.common.Block;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
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.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.List;
|
||||
@@ -30,11 +32,11 @@ public class Card1_342 extends AbstractSite {
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (PlayConditions.location(game, self)
|
||||
&& self.getData() == null
|
||||
&& game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1
|
||||
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Keyword.RANGER)) {
|
||||
self.storeData(new Object());
|
||||
game.getModifiersEnvironment().addUntilEndOfTurnModifier(
|
||||
new MoveLimitModifier(self, 1));
|
||||
new MoveLimitModifier(self, null,
|
||||
new CardTurnLimitEvaluator(game, self, 1, new ConstantEvaluator(1))));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.gempukku.lotro.cards.set1.site;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractSite;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.modifiers.conditions.PhaseCondition;
|
||||
import com.gempukku.lotro.common.Block;
|
||||
@@ -42,15 +43,16 @@ public class Card1_350 extends AbstractSite {
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return (self.getData() == null);
|
||||
return modifiersQuerying.getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).getUsedLimit() < 1;
|
||||
}
|
||||
}), new PhaseCondition(Phase.SHADOW), -2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, Filters.and(Culture.MORIA, Race.ORC)))
|
||||
self.storeData(new Object());
|
||||
if (TriggerConditions.played(game, effectResult, Filters.and(Culture.MORIA, Race.ORC))
|
||||
&& PlayConditions.isPhase(game, Phase.SHADOW))
|
||||
game.getModifiersQuerying().getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).incrementToLimit(1, 1);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractMinion;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
@@ -44,7 +44,7 @@ public class Card1_229 extends AbstractMinion {
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, self, null,
|
||||
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 5, new ConstantEvaluator(1))), Phase.SKIRMISH));
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 5, new ConstantEvaluator(1))), Phase.SKIRMISH));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.gempukku.lotro.cards.set10.shire;
|
||||
import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.effects.CheckTurnLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.ExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.common.*;
|
||||
@@ -10,7 +11,6 @@ import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||
import com.gempukku.lotro.logic.timing.results.PlayCardResult;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -39,7 +39,6 @@ public class Card10_114 extends AbstractPermanent {
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, CardType.MINION)
|
||||
&& self.getData() == null
|
||||
&& PlayConditions.canExert(self, game, Race.HOBBIT, CardType.COMPANION)) {
|
||||
PlayCardResult playResult = (PlayCardResult) effectResult;
|
||||
PhysicalCard playedCard = playResult.getPlayedCard();
|
||||
@@ -48,14 +47,8 @@ public class Card10_114 extends AbstractPermanent {
|
||||
action.appendCost(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.HOBBIT, CardType.COMPANION));
|
||||
action.appendEffect(
|
||||
new UnrespondableEffect() {
|
||||
@Override
|
||||
protected void doPlayEffect(LotroGame game) {
|
||||
self.storeData(new Object());
|
||||
}
|
||||
});
|
||||
action.appendEffect(
|
||||
new ExertCharactersEffect(self, playedCard));
|
||||
new CheckTurnLimitEffect(action, self, 1,
|
||||
new ExertCharactersEffect(self, playedCard)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set11.elven;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -53,7 +53,7 @@ public class Card11_023 extends AbstractAttachableFPPossession {
|
||||
if (playedCard != null && Filters.and(Culture.ELVEN, Filters.or(CardType.CONDITION, CardType.EVENT)).accepts(game.getGameState(), game.getModifiersQuerying(), playedCard)) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 1,
|
||||
new CheckPhaseLimitEffect(action, self, 1,
|
||||
new HealCharactersEffect(self, self.getAttachedTo())));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set12.gondor;
|
||||
import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -38,7 +38,7 @@ public class Card12_045 extends AbstractPermanent {
|
||||
action.appendCost(
|
||||
new AddTwilightEffect(self, 2));
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 1,
|
||||
new CheckPhaseLimitEffect(action, self, 1,
|
||||
new AddUntilStartOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, Filters.unboundCompanion, 1), Phase.REGROUP)));
|
||||
return Collections.singletonList(action);
|
||||
|
||||
@@ -50,15 +50,15 @@ public class Card12_054 extends AbstractMinion {
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return self.getData() != null && physicalCard.getBlueprint().getCulture() == (Culture) self.getData();
|
||||
return self.getWhileInZoneData() != null && physicalCard.getBlueprint().getCulture() == (Culture) self.getWhileInZoneData();
|
||||
}
|
||||
}), -1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayableInformation(PhysicalCard self) {
|
||||
if (self.getData() != null)
|
||||
return "Chosen culture is " + ((Culture) self.getData()).getHumanReadable();
|
||||
if (self.getWhileInZoneData() != null)
|
||||
return "Chosen culture is " + ((Culture) self.getWhileInZoneData()).getHumanReadable();
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ public class Card12_054 extends AbstractMinion {
|
||||
new MultipleChoiceAwaitingDecision(1, "Choose a culture", possibleCultures.toArray(new String[possibleCultures.size()])) {
|
||||
@Override
|
||||
protected void validDecisionMade(int index, String result) {
|
||||
self.storeData(Culture.findCultureByHumanReadable(result));
|
||||
self.setWhileInZoneData(Culture.findCultureByHumanReadable(result));
|
||||
}
|
||||
}));
|
||||
return Collections.singletonList(action);
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.SelfExertEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CountActiveEvaluator;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -45,7 +45,7 @@ public class Card15_019 extends AbstractCompanion {
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new ArcheryTotalModifier(self, Side.FREE_PEOPLE, null,
|
||||
new CardLimitEvaluator(game, self, Phase.ARCHERY, 3,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.ARCHERY, 3,
|
||||
new CountActiveEvaluator(CardType.MINION, Keyword.HUNTER))), Phase.ARCHERY));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.gempukku.lotro.cards.set15.site;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractNewSite;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.modifiers.conditions.PhaseCondition;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
@@ -41,15 +42,16 @@ public class Card15_188 extends AbstractNewSite {
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return (self.getData() == null);
|
||||
return modifiersQuerying.getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).getUsedLimit() < 1;
|
||||
}
|
||||
}), new PhaseCondition(Phase.SHADOW), -2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, Filters.and(CardType.MINION, Keyword.HUNTER)))
|
||||
self.storeData(new Object());
|
||||
if (TriggerConditions.played(game, effectResult, Filters.and(CardType.MINION, Keyword.HUNTER))
|
||||
&& PlayConditions.isPhase(game, Phase.SHADOW))
|
||||
game.getModifiersQuerying().getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).incrementToLimit(1, 1);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ public class Card19_003 extends AbstractAttachable {
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (effectResult.getType() == EffectResult.Type.END_OF_TURN
|
||||
&& !game.getActionsEnvironment().hasWonSkirmishThisTurn(self.getAttachedTo())) {
|
||||
&& !game.getActionsEnvironment().hasWonSkirmishThisTurn(game, self.getAttachedTo())) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new SelfDiscardEffect(self));
|
||||
|
||||
@@ -56,7 +56,7 @@ public class Card19_024 extends AbstractAttachable {
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (effectResult.getType() == EffectResult.Type.END_OF_TURN
|
||||
&& !game.getActionsEnvironment().hasWonSkirmishThisTurn(self.getAttachedTo())) {
|
||||
&& !game.getActionsEnvironment().hasWonSkirmishThisTurn(game, self.getAttachedTo())) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new ReturnCardsToHandEffect(self, self));
|
||||
|
||||
@@ -46,15 +46,15 @@ public class Card19_038 extends AbstractMinion {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
final Race race = physicalCard.getBlueprint().getRace();
|
||||
return self.getData() != null && self.getData() == race;
|
||||
return self.getWhileInZoneData() != null && self.getWhileInZoneData() == race;
|
||||
}
|
||||
}), self);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayableInformation(PhysicalCard self) {
|
||||
if (self.getData() != null)
|
||||
return "Chosen race is " + ((Race) self.getData()).getHumanReadable();
|
||||
if (self.getWhileInZoneData() != null)
|
||||
return "Chosen race is " + ((Race) self.getWhileInZoneData()).getHumanReadable();
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ public class Card19_038 extends AbstractMinion {
|
||||
new MultipleChoiceAwaitingDecision(1, "Choose a race", possibleRaces.toArray(new String[possibleRaces.size()])) {
|
||||
@Override
|
||||
protected void validDecisionMade(int index, String result) {
|
||||
self.storeData(Race.findRaceByHumanReadable(result));
|
||||
self.setWhileInZoneData(Race.findRaceByHumanReadable(result));
|
||||
}
|
||||
}));
|
||||
return Collections.singletonList(action);
|
||||
|
||||
@@ -46,7 +46,7 @@ public class Card19_039 extends AbstractMinion {
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
final Set<Integer> data = (Set<Integer>) self.getData();
|
||||
final Set<Integer> data = (Set<Integer>) self.getWhileInZoneData();
|
||||
if (data == null)
|
||||
return false;
|
||||
return data.contains(physicalCard.getCardId());
|
||||
@@ -67,7 +67,7 @@ public class Card19_039 extends AbstractMinion {
|
||||
Set<Integer> data = (Set<Integer>) self.getData();
|
||||
if (data == null) {
|
||||
data = new HashSet<Integer>();
|
||||
self.storeData(data);
|
||||
self.setWhileInZoneData(data);
|
||||
}
|
||||
for (PhysicalCard physicalCard : ((AssignmentResult) effectResult).getAgainst())
|
||||
data.add(physicalCard.getCardId());
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set2.dwarven;
|
||||
import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.DiscardTopCardFromDeckEffect;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
@@ -44,12 +44,12 @@ public class Card2_012 extends AbstractPermanent {
|
||||
@Override
|
||||
protected void cardSelected(LotroGame game, PhysicalCard dwarf) {
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 3, Phase.SKIRMISH,
|
||||
new CheckPhaseLimitEffect(action, self, 3, Phase.SKIRMISH,
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, Filters.sameCard(dwarf), 1), Phase.SKIRMISH)));
|
||||
if (PlayConditions.location(game, Keyword.UNDERGROUND))
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 3, Phase.SKIRMISH,
|
||||
new CheckPhaseLimitEffect(action, self, 3, Phase.SKIRMISH,
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new KeywordModifier(self, Filters.sameCard(dwarf), Keyword.DAMAGE), Phase.SKIRMISH)));
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.gempukku.lotro.cards.set2.site;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractSite;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.common.Block;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
@@ -43,7 +44,7 @@ public class Card2_118 extends AbstractSite {
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return gameState.getCurrentPhase() == Phase.SHADOW && (self.getData() == null);
|
||||
return gameState.getCurrentPhase() == Phase.SHADOW && modifiersQuerying.getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).getUsedLimit() < 1;
|
||||
}
|
||||
}
|
||||
), -2));
|
||||
@@ -52,12 +53,8 @@ public class Card2_118 extends AbstractSite {
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, Filters.and(Culture.MORIA, Keyword.ARCHER))
|
||||
&& game.getGameState().getCurrentPhase() == Phase.SHADOW
|
||||
&& game.getGameState().getCurrentSite() == self)
|
||||
self.storeData(new Object());
|
||||
if (TriggerConditions.endOfPhase(game, effectResult, Phase.SHADOW)
|
||||
&& self.getData() != null)
|
||||
self.removeData();
|
||||
&& PlayConditions.isPhase(game, Phase.SHADOW))
|
||||
game.getModifiersQuerying().getUntilEndOfPhaseLimitCounter(self, Phase.SHADOW).incrementToLimit(1, 1);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CountActiveEvaluator;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
@@ -46,7 +46,7 @@ public class Card3_035 extends AbstractPermanent {
|
||||
action.insertEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, Filters.sameCard(card), null,
|
||||
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 3,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3,
|
||||
new CountActiveEvaluator(CardType.COMPANION, Signet.GANDALF))), Phase.SKIRMISH));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.gempukku.lotro.cards.set3.gondor;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
@@ -10,7 +9,6 @@ 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.OptionalTriggerAction;
|
||||
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
@@ -31,23 +29,14 @@ public class Card3_040 extends AbstractPermanent {
|
||||
super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.GONDOR, Zone.SUPPORT, "Citadel of Minas Tirith");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.losesSkirmish(game, effectResult, Filters.or(CardType.COMPANION, CardType.ALLY))) {
|
||||
self.storeData(new Object());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (effectResult.getType() == EffectResult.Type.END_OF_TURN) {
|
||||
if (self.getData() == null) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new ChooseAndHealCharactersEffect(action, playerId, Culture.GONDOR, CardType.COMPANION));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
if (effectResult.getType() == EffectResult.Type.END_OF_TURN
|
||||
&& !game.getActionsEnvironment().hasLostSkirmishThisTurn(game, Filters.or(CardType.COMPANION, CardType.ALLY))) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new ChooseAndHealCharactersEffect(action, playerId, Culture.GONDOR, CardType.COMPANION));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.AbstractCompanion;
|
||||
import com.gempukku.lotro.cards.ExtraFilters;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.actions.AttachPermanentAction;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
@@ -57,7 +57,7 @@ public class Card4_365 extends AbstractCompanion {
|
||||
AttachPermanentAction attachPermanentAction = ((AbstractAttachable) selectedCard.getBlueprint()).getPlayCardAction(playerId, game, selectedCard, additionalAttachmentFilter, 0);
|
||||
game.getActionsEnvironment().addActionToStack(attachPermanentAction);
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 1, Phase.FELLOWSHIP,
|
||||
new CheckPhaseLimitEffect(action, self, 1, Phase.FELLOWSHIP,
|
||||
new AppendHealTargetEffect(action, attachPermanentAction)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.set4.site;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractSite;
|
||||
import com.gempukku.lotro.cards.modifiers.MoveLimitModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardTurnLimitEvaluator;
|
||||
import com.gempukku.lotro.common.Block;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
@@ -10,6 +11,7 @@ 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.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.List;
|
||||
@@ -28,11 +30,11 @@ public class Card4_326 extends AbstractSite {
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (self.getData() == null
|
||||
if (game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1
|
||||
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Culture.ROHAN, PossessionClass.MOUNT)) {
|
||||
self.storeData(new Object());
|
||||
game.getModifiersEnvironment().addUntilEndOfTurnModifier(
|
||||
new MoveLimitModifier(self, 1));
|
||||
new MoveLimitModifier(self, null,
|
||||
new CardTurnLimitEvaluator(game, self, 1, new ConstantEvaluator(1))));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.set4.site;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractSite;
|
||||
import com.gempukku.lotro.cards.modifiers.MoveLimitModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardTurnLimitEvaluator;
|
||||
import com.gempukku.lotro.common.Block;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Race;
|
||||
@@ -9,6 +10,7 @@ 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.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.List;
|
||||
@@ -28,11 +30,11 @@ public class Card4_330 extends AbstractSite {
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (self.getData() == null
|
||||
if (game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1
|
||||
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Race.HOBBIT, Filters.unboundCompanion)) {
|
||||
self.storeData(new Object());
|
||||
game.getModifiersEnvironment().addUntilEndOfTurnModifier(
|
||||
new MoveLimitModifier(self, 1));
|
||||
new MoveLimitModifier(self, null,
|
||||
new CardTurnLimitEvaluator(game, self, 1, new ConstantEvaluator(1))));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set4.site;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractSite;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDeckEffect;
|
||||
import com.gempukku.lotro.common.*;
|
||||
@@ -36,7 +36,7 @@ public class Card4_339 extends AbstractSite {
|
||||
action.appendCost(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.ROHAN, Race.MAN));
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 1, Phase.FELLOWSHIP,
|
||||
new CheckPhaseLimitEffect(action, self, 1, Phase.FELLOWSHIP,
|
||||
new ChooseAndPlayCardFromDeckEffect(playerId, Culture.ROHAN, PossessionClass.MOUNT)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ public class Card4_347 extends AbstractSite {
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return gameState.getCurrentSite() == self && (self.getData() == null);
|
||||
return gameState.getCurrentSite() == self && modifiersQuerying.getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1;
|
||||
}
|
||||
}), -3);
|
||||
}
|
||||
@@ -49,7 +49,7 @@ public class Card4_347 extends AbstractSite {
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, Race.URUK_HAI)
|
||||
&& game.getGameState().getCurrentSite() == self)
|
||||
self.storeData(new Object());
|
||||
game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).incrementToLimit(1, 1);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -26,18 +27,22 @@ public class Card4_359 extends AbstractSite {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) {
|
||||
if (TriggerConditions.startOfPhase(game, effectResult, Phase.SHADOW)
|
||||
&& self.getData() == null
|
||||
&& game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1
|
||||
&& game.getGameState().getTwilightPool() < 9) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new AddTwilightEffect(self, 4));
|
||||
action.appendEffect(
|
||||
new UnrespondableEffect() {
|
||||
@Override
|
||||
protected void doPlayEffect(LotroGame game) {
|
||||
game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).incrementToLimit(1, 1);
|
||||
}
|
||||
});
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
if (TriggerConditions.endOfPhase(game, effectResult, Phase.SHADOW)) {
|
||||
self.storeData(new Object());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set5.dwarven;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.PutCardFromStackedIntoHandEffect;
|
||||
import com.gempukku.lotro.cards.effects.StackTopCardsFromDeckEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardStackedCardsEffect;
|
||||
@@ -41,7 +41,7 @@ public class Card5_009 extends AbstractPermanent {
|
||||
{
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 1, Phase.MANEUVER,
|
||||
new CheckPhaseLimitEffect(action, self, 1, Phase.MANEUVER,
|
||||
new StackTopCardsFromDeckEffect(self, playerId, 1, self)));
|
||||
actions.add(action);
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ public class Card5_102 extends AbstractPermanent {
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return self.getData() == null;
|
||||
return modifiersQuerying.getUntilEndOfTurnLimitCounter(self).getUsedLimit() < 1;
|
||||
}
|
||||
}),
|
||||
new LocationCondition(Filters.siteNumber(4), Filters.siteBlock(Block.TWO_TOWERS)), -3);
|
||||
@@ -57,7 +57,7 @@ public class Card5_102 extends AbstractPermanent {
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (TriggerConditions.played(game, effectResult, Culture.SAURON, Race.ORC)
|
||||
&& Filters.and(Filters.siteNumber(4), Filters.siteBlock(Block.TWO_TOWERS)).accepts(game.getGameState(), game.getModifiersQuerying(), game.getGameState().getCurrentSite()))
|
||||
self.storeData(new Object());
|
||||
game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(self).incrementToLimit(1, 1);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CountActiveEvaluator;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -43,7 +43,7 @@ public class Card6_080 extends AbstractMinion {
|
||||
new RemoveTwilightEffect(3));
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new ArcheryTotalModifier(self, Side.SHADOW, null, new CardLimitEvaluator(game, self, Phase.ARCHERY, 4, new CountActiveEvaluator(4, (Integer) null, CardType.COMPANION))), Phase.ARCHERY));
|
||||
new ArcheryTotalModifier(self, Side.SHADOW, null, new CardPhaseLimitEvaluator(game, self, Phase.ARCHERY, 4, new CountActiveEvaluator(4, (Integer) null, CardType.COMPANION))), Phase.ARCHERY));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set6.rohan;
|
||||
import com.gempukku.lotro.cards.AbstractCompanion;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
@@ -52,7 +52,7 @@ public class Card6_095 extends AbstractCompanion {
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, self, null,
|
||||
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 3, new ConstantEvaluator(3))), Phase.SKIRMISH));
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3, new ConstantEvaluator(3))), Phase.SKIRMISH));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set7.raider;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -35,7 +35,7 @@ public class Card7_130 extends AbstractPermanent {
|
||||
action.appendCost(
|
||||
new RemoveTwilightEffect(3));
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 1, Phase.REGROUP,
|
||||
new CheckPhaseLimitEffect(action, self, 1, Phase.REGROUP,
|
||||
new AddThreatsEffect(playerId, self, 1)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set7.sauron;
|
||||
import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddTokenEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromHandEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndRemoveCultureTokensFromCardEffect;
|
||||
@@ -48,7 +48,7 @@ public class Card7_281 extends AbstractPermanent {
|
||||
action.appendCost(
|
||||
new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, Token.SAURON, 1, CardType.CONDITION));
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 2, Phase.SKIRMISH,
|
||||
new CheckPhaseLimitEffect(action, self, 2, Phase.SKIRMISH,
|
||||
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, 1, Culture.SAURON, Race.ORC)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set7.sauron;
|
||||
import com.gempukku.lotro.cards.AbstractMinion;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CountActiveEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.NegativeEvaluator;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
@@ -54,7 +54,7 @@ public class Card7_293 extends AbstractMinion {
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, card, null,
|
||||
new NegativeEvaluator(
|
||||
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 3,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3,
|
||||
new CountActiveEvaluator(Filters.not(self), Culture.SAURON, Race.ORC)))), Phase.SKIRMISH));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddTokenEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
@@ -37,7 +37,7 @@ public class Card7_314 extends AbstractPermanent {
|
||||
if (TriggerConditions.winsSkirmish(game, effectResult, Filters.owner(playerId), Culture.SAURON, CardType.MINION)) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 1, Phase.REGROUP,
|
||||
new CheckPhaseLimitEffect(action, self, 1, Phase.REGROUP,
|
||||
new AddTokenEffect(self, self, Token.SAURON)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set7.site;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractSite;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDeckEffect;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -30,7 +30,7 @@ public class Card7_329 extends AbstractSite {
|
||||
&& PlayConditions.canSpot(game, Race.DWARF)) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 1, Phase.FELLOWSHIP,
|
||||
new CheckPhaseLimitEffect(action, self, 1, Phase.FELLOWSHIP,
|
||||
new ChooseAndPlayCardFromDeckEffect(playerId, Culture.DWARVEN, CardType.CONDITION)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddTokenEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.ExhaustCharacterEffect;
|
||||
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
|
||||
import com.gempukku.lotro.common.*;
|
||||
@@ -37,7 +37,7 @@ public class Card7_206 extends AbstractPermanent {
|
||||
if (TriggerConditions.winsSkirmish(game, effectResult, Filters.owner(playerId), Culture.WRAITH, CardType.MINION)) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 1, Phase.REGROUP,
|
||||
new CheckPhaseLimitEffect(action, self, 1, Phase.REGROUP,
|
||||
new AddTokenEffect(self, self, Token.WRAITH)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddTokenEffect;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.RemoveTokenEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier;
|
||||
@@ -52,7 +52,7 @@ public class Card8_013 extends AbstractPermanent {
|
||||
action.appendCost(
|
||||
new RemoveTokenEffect(self, self, Token.ELVEN));
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 2, Phase.ARCHERY,
|
||||
new CheckPhaseLimitEffect(action, self, 2, Phase.ARCHERY,
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new ArcheryTotalModifier(self, Side.FREE_PEOPLE, 1), Phase.ARCHERY)));
|
||||
return Collections.singletonList(action);
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddTokenEffect;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.RemoveTokenEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardLimitEvaluator;
|
||||
import com.gempukku.lotro.cards.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -58,7 +58,7 @@ public class Card8_023 extends AbstractPermanent {
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, Filters.name("Shelob"), null,
|
||||
new CardLimitEvaluator(game, self, Phase.SKIRMISH, 6,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 6,
|
||||
new ConstantEvaluator(3))), Phase.SKIRMISH));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set8.gondor;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.CheckLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.CheckPhaseLimitEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect;
|
||||
import com.gempukku.lotro.common.*;
|
||||
@@ -38,7 +38,7 @@ public class Card8_044 extends AbstractPermanent {
|
||||
action.appendCost(
|
||||
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.GONDOR, Race.MAN));
|
||||
action.appendEffect(
|
||||
new CheckLimitEffect(action, self, 1, Phase.REGROUP,
|
||||
new CheckPhaseLimitEffect(action, self, 1, Phase.REGROUP,
|
||||
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.GONDOR, Keyword.FORTIFICATION)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.gempukku.lotro.game;
|
||||
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
@@ -39,5 +41,9 @@ public interface ActionsEnvironment {
|
||||
|
||||
public List<PhysicalCard> getPlayedCardsInCurrentPhase();
|
||||
|
||||
public boolean hasWonSkirmishThisTurn(PhysicalCard card);
|
||||
public boolean hasWonSkirmishThisTurn(LotroGame game, Filterable... filters);
|
||||
|
||||
public boolean hasLostSkirmishThisTurn(LotroGame game, Filterable... filters);
|
||||
|
||||
public boolean wasAssignedThisTurn(LotroGame game, Filterable... filters);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.gempukku.lotro.game.state.actions;
|
||||
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.*;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.ActivateCardAction;
|
||||
@@ -11,6 +13,8 @@ import com.gempukku.lotro.logic.timing.ActionStack;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.processes.GatherPlayableActionsFromDiscardVisitor;
|
||||
import com.gempukku.lotro.logic.timing.results.AssignmentResult;
|
||||
import com.gempukku.lotro.logic.timing.results.CharacterLostSkirmishResult;
|
||||
import com.gempukku.lotro.logic.timing.results.CharacterWonSkirmishResult;
|
||||
import com.gempukku.lotro.logic.timing.results.PlayCardResult;
|
||||
import com.gempukku.lotro.logic.timing.rules.CharacterDeathRule;
|
||||
@@ -30,7 +34,9 @@ public class DefaultActionsEnvironment implements ActionsEnvironment {
|
||||
|
||||
private Set<EffectResult> _effectResults = new HashSet<EffectResult>();
|
||||
|
||||
private Set<Integer> _wonSkirmishesInTurn = new HashSet<Integer>();
|
||||
private Set<PhysicalCard> _wonSkirmishesInTurn = new HashSet<PhysicalCard>();
|
||||
private Set<PhysicalCard> _lostSkirmishesInTurn = new HashSet<PhysicalCard>();
|
||||
private Set<PhysicalCard> _assignedInTurn = new HashSet<PhysicalCard>();
|
||||
|
||||
public DefaultActionsEnvironment(LotroGame lotroGame, ActionStack actionStack) {
|
||||
_lotroGame = lotroGame;
|
||||
@@ -53,11 +59,34 @@ public class DefaultActionsEnvironment implements ActionsEnvironment {
|
||||
public List<? extends RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) {
|
||||
if (effectResult.getType() == EffectResult.Type.CHARACTER_WON_SKIRMISH) {
|
||||
final CharacterWonSkirmishResult winResult = (CharacterWonSkirmishResult) effectResult;
|
||||
_wonSkirmishesInTurn.add(winResult.getWinner().getCardId());
|
||||
_wonSkirmishesInTurn.add(winResult.getWinner());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
addAlwaysOnActionProxy(
|
||||
new AbstractActionProxy() {
|
||||
@Override
|
||||
public List<? extends RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) {
|
||||
if (effectResult.getType() == EffectResult.Type.CHARACTER_LOST_SKIRMISH) {
|
||||
final CharacterLostSkirmishResult winResult = (CharacterLostSkirmishResult) effectResult;
|
||||
_lostSkirmishesInTurn.add(winResult.getLoser());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
addAlwaysOnActionProxy(
|
||||
new AbstractActionProxy() {
|
||||
@Override
|
||||
public List<? extends RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) {
|
||||
if (effectResult.getType() == EffectResult.Type.CHARACTER_ASSIGNED) {
|
||||
AssignmentResult assignmentResult = (AssignmentResult) effectResult;
|
||||
_assignedInTurn.add(assignmentResult.getAssignedCard());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -100,6 +129,8 @@ public class DefaultActionsEnvironment implements ActionsEnvironment {
|
||||
_actionProxies.removeAll(_untilEndOfTurnActionProxies);
|
||||
_untilEndOfTurnActionProxies.clear();
|
||||
_wonSkirmishesInTurn.clear();
|
||||
_lostSkirmishesInTurn.clear();
|
||||
_assignedInTurn.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -309,8 +340,18 @@ public class DefaultActionsEnvironment implements ActionsEnvironment {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasWonSkirmishThisTurn(PhysicalCard card) {
|
||||
return _wonSkirmishesInTurn.contains(card.getCardId());
|
||||
public boolean hasWonSkirmishThisTurn(LotroGame game, Filterable... filters) {
|
||||
return Filters.filter(_wonSkirmishesInTurn, game.getGameState(), game.getModifiersQuerying(), filters).size() > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasLostSkirmishThisTurn(LotroGame game, Filterable... filters) {
|
||||
return Filters.filter(_lostSkirmishesInTurn, game.getGameState(), game.getModifiersQuerying(), filters).size() > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean wasAssignedThisTurn(LotroGame game, Filterable... filters) {
|
||||
return Filters.filter(_assignedInTurn, game.getGameState(), game.getModifiersQuerying(), filters).size() > 0;
|
||||
}
|
||||
|
||||
private class GatherRequiredAfterTriggers extends CompletePhysicalCardVisitor {
|
||||
|
||||
@@ -3,12 +3,6 @@ package com.gempukku.lotro.logic.modifiers;
|
||||
public class DefaultLimitCounter implements LimitCounter {
|
||||
private int _count;
|
||||
|
||||
@Override
|
||||
public int incrementCounter() {
|
||||
_count++;
|
||||
return _count;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int incrementToLimit(int limit, int incrementBy) {
|
||||
int maxIncrement = limit - _count;
|
||||
@@ -16,4 +10,9 @@ public class DefaultLimitCounter implements LimitCounter {
|
||||
_count += finalIncrement;
|
||||
return finalIncrement;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getUsedLimit() {
|
||||
return _count;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.gempukku.lotro.logic.modifiers;
|
||||
|
||||
public interface LimitCounter {
|
||||
public int incrementCounter();
|
||||
|
||||
public int incrementToLimit(int limit, int incrementBy);
|
||||
|
||||
public int getUsedLimit();
|
||||
}
|
||||
|
||||
@@ -4,8 +4,6 @@ import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
|
||||
public interface ModifiersEnvironment {
|
||||
public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase);
|
||||
|
||||
public ModifierHook addAlwaysOnModifier(Modifier modifier);
|
||||
|
||||
public void addUntilStartOfPhaseModifier(Modifier modifier, Phase phase);
|
||||
|
||||
@@ -18,17 +18,18 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
|
||||
private Set<Modifier> _skipSet = new HashSet<Modifier>();
|
||||
|
||||
private Map<Phase, Map<Integer, LimitCounter>> _counters = new HashMap<Phase, Map<Integer, LimitCounter>>();
|
||||
private Map<Phase, Map<Integer, LimitCounter>> _phaseLimitCounters = new HashMap<Phase, Map<Integer, LimitCounter>>();
|
||||
private Map<Integer, LimitCounter> _turnLimitCounters = new HashMap<Integer, LimitCounter>();
|
||||
|
||||
private int _drawnThisPhaseCount = 0;
|
||||
private Map<Integer, Integer> _woundsPerPhaseMap = new HashMap<Integer, Integer>();
|
||||
|
||||
@Override
|
||||
public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase) {
|
||||
Map<Integer, LimitCounter> limitCounterMap = _counters.get(phase);
|
||||
Map<Integer, LimitCounter> limitCounterMap = _phaseLimitCounters.get(phase);
|
||||
if (limitCounterMap == null) {
|
||||
limitCounterMap = new HashMap<Integer, LimitCounter>();
|
||||
_counters.put(phase, limitCounterMap);
|
||||
_phaseLimitCounters.put(phase, limitCounterMap);
|
||||
}
|
||||
LimitCounter limitCounter = limitCounterMap.get(card.getCardId());
|
||||
if (limitCounter == null) {
|
||||
@@ -38,6 +39,16 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
return limitCounter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LimitCounter getUntilEndOfTurnLimitCounter(PhysicalCard card) {
|
||||
LimitCounter limitCounter = _turnLimitCounters.get(card.getCardId());
|
||||
if (limitCounter == null) {
|
||||
limitCounter = new DefaultLimitCounter();
|
||||
_turnLimitCounters.put(card.getCardId(), limitCounter);
|
||||
}
|
||||
return limitCounter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addedWound(PhysicalCard card) {
|
||||
final int cardId = card.getCardId();
|
||||
@@ -117,7 +128,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
removeModifiers(list);
|
||||
list.clear();
|
||||
}
|
||||
Map<Integer, LimitCounter> counterMap = _counters.get(phase);
|
||||
Map<Integer, LimitCounter> counterMap = _phaseLimitCounters.get(phase);
|
||||
if (counterMap != null)
|
||||
counterMap.clear();
|
||||
|
||||
@@ -136,6 +147,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
public void removeEndOfTurn() {
|
||||
removeModifiers(_untilEndOfTurnModifiers);
|
||||
_untilEndOfTurnModifiers.clear();
|
||||
_turnLimitCounters.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -13,6 +13,10 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public interface ModifiersQuerying {
|
||||
public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase);
|
||||
|
||||
public LimitCounter getUntilEndOfTurnLimitCounter(PhysicalCard card);
|
||||
|
||||
public Collection<Modifier> getModifiersAffecting(GameState gameState, PhysicalCard card);
|
||||
|
||||
public boolean hasTextRemoved(GameState gameState, PhysicalCard card);
|
||||
|
||||
Reference in New Issue
Block a user