diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckLimitEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckPhaseLimitEffect.java similarity index 67% rename from gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckLimitEffect.java rename to gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckPhaseLimitEffect.java index 902b7a012..3aed887c5 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckLimitEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckPhaseLimitEffect.java @@ -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); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckTurnLimitEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckTurnLimitEffect.java new file mode 100644 index 000000000..b018ddd40 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckTurnLimitEffect.java @@ -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); + } + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/MoveLimitModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/MoveLimitModifier.java index 1caa37813..55ee38edf 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/MoveLimitModifier.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/MoveLimitModifier.java @@ -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); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CardLimitEvaluator.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CardPhaseLimitEvaluator.java similarity index 80% rename from gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CardLimitEvaluator.java rename to gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CardPhaseLimitEvaluator.java index 72a120901..3b65f06d2 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CardLimitEvaluator.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CardPhaseLimitEvaluator.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CardTurnLimitEvaluator.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CardTurnLimitEvaluator.java new file mode 100644 index 000000000..b7e5955b4 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CardTurnLimitEvaluator.java @@ -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; + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_153.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_153.java index d77a467d9..6ad8cbf1d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_153.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_153.java @@ -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); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_266.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_266.java index 96261e4a8..8a623914e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_266.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_266.java @@ -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 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; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_269.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_269.java index a0ee742d6..cb971a560 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_269.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_269.java @@ -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; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_279.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_279.java index 33c7241df..2dea8651d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_279.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_279.java @@ -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 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)); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java index fe79a9cb5..97f09c804 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java @@ -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 selectedCards) { Collection 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 getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.endOfPhase(game, effectResult, Phase.FELLOWSHIP) || TriggerConditions.endOfPhase(game, effectResult, Phase.REGROUP)) - self.removeData(); - return null; - } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_327.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_327.java index eac847788..396d1bbd6 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_327.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_327.java @@ -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 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; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_338.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_338.java index c0f892587..e9d8606ab 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_338.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_338.java @@ -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 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; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_342.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_342.java index 91ae8c58f..0108808bb 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_342.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_342.java @@ -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 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; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_350.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_350.java index 2ed29aec6..e20648d43 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_350.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_350.java @@ -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 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; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_229.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_229.java index 5e80e5eaf..09c92f669 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_229.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_229.java @@ -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; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_114.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_114.java index 913e6ba21..b015e480a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_114.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_114.java @@ -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 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; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/elven/Card11_023.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/elven/Card11_023.java index 372be062d..28bb70543 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/elven/Card11_023.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/elven/Card11_023.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/gondor/Card12_045.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/gondor/Card12_045.java index 4925c2665..37dffecbc 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/gondor/Card12_045.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/gondor/Card12_045.java @@ -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); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/isengard/Card12_054.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/isengard/Card12_054.java index fa1119cad..1f5d019ce 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/isengard/Card12_054.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/isengard/Card12_054.java @@ -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); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/elven/Card15_019.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/elven/Card15_019.java index ce8c9a412..93aa0b9aa 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/elven/Card15_019.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/elven/Card15_019.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/site/Card15_188.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/site/Card15_188.java index a40d99cbb..882838ab5 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/site/Card15_188.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/site/Card15_188.java @@ -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 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; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/dwarven/Card19_003.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/dwarven/Card19_003.java index eb5c946ae..4b9177131 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/dwarven/Card19_003.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/dwarven/Card19_003.java @@ -56,7 +56,7 @@ public class Card19_003 extends AbstractAttachable { @Override public List 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)); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/rohan/Card19_024.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/rohan/Card19_024.java index b318ff960..def15a64c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/rohan/Card19_024.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/rohan/Card19_024.java @@ -56,7 +56,7 @@ public class Card19_024 extends AbstractAttachable { @Override public List 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)); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/wraith/Card19_038.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/wraith/Card19_038.java index 5f0e0103f..b7b294250 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/wraith/Card19_038.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/wraith/Card19_038.java @@ -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); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/wraith/Card19_039.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/wraith/Card19_039.java index 3cb5a9f3f..a73f58df2 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/wraith/Card19_039.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/wraith/Card19_039.java @@ -46,7 +46,7 @@ public class Card19_039 extends AbstractMinion { new Filter() { @Override public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - final Set data = (Set) self.getData(); + final Set data = (Set) self.getWhileInZoneData(); if (data == null) return false; return data.contains(physicalCard.getCardId()); @@ -67,7 +67,7 @@ public class Card19_039 extends AbstractMinion { Set data = (Set) self.getData(); if (data == null) { data = new HashSet(); - self.storeData(data); + self.setWhileInZoneData(data); } for (PhysicalCard physicalCard : ((AssignmentResult) effectResult).getAgainst()) data.add(physicalCard.getCardId()); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_012.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_012.java index 01bc0cd56..4502563a2 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_012.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_012.java @@ -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))); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/site/Card2_118.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/site/Card2_118.java index da60a5c22..c3b473a2b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/site/Card2_118.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/site/Card2_118.java @@ -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 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; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gandalf/Card3_035.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gandalf/Card3_035.java index 9a27b1397..03909556c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gandalf/Card3_035.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gandalf/Card3_035.java @@ -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)); } }); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gondor/Card3_040.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gondor/Card3_040.java index 430fc85c2..657bf6f74 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gondor/Card3_040.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gondor/Card3_040.java @@ -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 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 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; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_365.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_365.java index 9e046479a..e568c561f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_365.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_365.java @@ -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))); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_326.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_326.java index 52a23ad43..c15c0acc1 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_326.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_326.java @@ -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 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; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_330.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_330.java index 6c6b3c982..58dce95c5 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_330.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_330.java @@ -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 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; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_339.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_339.java index f9a364b2c..5c29aa8d6 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_339.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_339.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_347.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_347.java index 3ab9571ad..b588e4101 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_347.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_347.java @@ -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 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; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_359.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_359.java index 7e5a32bb3..d9d23b9a1 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_359.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_359.java @@ -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 getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { + public List 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; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/dwarven/Card5_009.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/dwarven/Card5_009.java index 02e4c0bb5..35402ee91 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/dwarven/Card5_009.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/dwarven/Card5_009.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_102.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_102.java index 3d761314b..74fc32d04 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_102.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_102.java @@ -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 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; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/raider/Card6_080.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/raider/Card6_080.java index e559ad0cc..6760ee6cf 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/raider/Card6_080.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/raider/Card6_080.java @@ -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; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/rohan/Card6_095.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/rohan/Card6_095.java index 33a2fef6a..9cff8480b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/rohan/Card6_095.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/rohan/Card6_095.java @@ -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; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/raider/Card7_130.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/raider/Card7_130.java index 1f5ed2057..8003fb018 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/raider/Card7_130.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/raider/Card7_130.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_281.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_281.java index 35fdab5b4..9aaeb27ea 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_281.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_281.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_293.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_293.java index 3b48a83a6..33e5076bc 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_293.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_293.java @@ -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)); } }); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_314.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_314.java index 0bcb281a2..3ea03b0cd 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_314.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_314.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/site/Card7_329.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/site/Card7_329.java index 51eef8423..2101f5d3f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/site/Card7_329.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/site/Card7_329.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_206.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_206.java index 41f129396..a979998ea 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_206.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_206.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/elven/Card8_013.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/elven/Card8_013.java index 752f66727..44ad15bcd 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/elven/Card8_013.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/elven/Card8_013.java @@ -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); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gollum/Card8_023.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gollum/Card8_023.java index 3b2d469c5..0a6e55265 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gollum/Card8_023.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gollum/Card8_023.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gondor/Card8_044.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gondor/Card8_044.java index 57c3bd060..ed9e6b139 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gondor/Card8_044.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gondor/Card8_044.java @@ -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); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java index 4fb8395ab..012e04e69 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java @@ -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 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); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java index feb1e540d..3ff0237a5 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java @@ -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 _effectResults = new HashSet(); - private Set _wonSkirmishesInTurn = new HashSet(); + private Set _wonSkirmishesInTurn = new HashSet(); + private Set _lostSkirmishesInTurn = new HashSet(); + private Set _assignedInTurn = new HashSet(); public DefaultActionsEnvironment(LotroGame lotroGame, ActionStack actionStack) { _lotroGame = lotroGame; @@ -53,11 +59,34 @@ public class DefaultActionsEnvironment implements ActionsEnvironment { public List 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 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 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 { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/DefaultLimitCounter.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/DefaultLimitCounter.java index 58385df23..4eac437e4 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/DefaultLimitCounter.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/DefaultLimitCounter.java @@ -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; + } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LimitCounter.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LimitCounter.java index 3aa2cc767..c12299a94 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LimitCounter.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/LimitCounter.java @@ -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(); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java index 634f330a4..8f5ddcf1c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java @@ -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); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index ba3fbf42b..10b5a5870 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -18,17 +18,18 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { private Set _skipSet = new HashSet(); - private Map> _counters = new HashMap>(); + private Map> _phaseLimitCounters = new HashMap>(); + private Map _turnLimitCounters = new HashMap(); private int _drawnThisPhaseCount = 0; private Map _woundsPerPhaseMap = new HashMap(); @Override public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase) { - Map limitCounterMap = _counters.get(phase); + Map limitCounterMap = _phaseLimitCounters.get(phase); if (limitCounterMap == null) { limitCounterMap = new HashMap(); - _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 counterMap = _counters.get(phase); + Map 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 diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java index ba057d208..c004e3c5e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java @@ -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 getModifiersAffecting(GameState gameState, PhysicalCard card); public boolean hasTextRemoved(GameState gameState, PhysicalCard card);