Cleaned up several value evaluators for clarity within the JSON. Removed "siteinregion2" as redundant with "regionNumber(2)". Added siteHasSiteNumber filter.
This commit is contained in:
@@ -87,7 +87,7 @@
|
||||
type: exert
|
||||
filter: choose(culture(dwarven),character)
|
||||
count: {
|
||||
type: forEachCultureOver
|
||||
type: forEachCulture
|
||||
filter: side(shadow)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
}
|
||||
requires: {
|
||||
type: location
|
||||
filter: siteinregion2
|
||||
filter: regionNumber(2)
|
||||
}
|
||||
cost: {
|
||||
type: discardFromHand
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
type: memorizenumber
|
||||
memory: stackedCultures
|
||||
amount:{
|
||||
type: forEachCultureOver
|
||||
type: forEachCulture
|
||||
over: 0
|
||||
filter: cultureFromMemory(stackedCards)
|
||||
}
|
||||
|
||||
@@ -353,8 +353,8 @@
|
||||
keyword: damage
|
||||
amount: {
|
||||
type: limit
|
||||
value: 2
|
||||
amount: {
|
||||
limit: 2
|
||||
value: {
|
||||
type: countStacked
|
||||
on: self
|
||||
}
|
||||
|
||||
@@ -862,8 +862,8 @@
|
||||
filter: choose(companion)
|
||||
count: {
|
||||
type: limit
|
||||
value: 3
|
||||
amount: {
|
||||
limit: 3
|
||||
value: {
|
||||
type: countStacked
|
||||
on: culture(isengard),artifact
|
||||
filter: culture(isengard),spell
|
||||
|
||||
@@ -340,7 +340,7 @@
|
||||
player: fp
|
||||
filter: choose(companion)
|
||||
count: {
|
||||
type: forEachCultureOver
|
||||
type: forEachCulture
|
||||
over: 2
|
||||
}
|
||||
}
|
||||
@@ -466,7 +466,7 @@
|
||||
modifier: {
|
||||
type: modifyMoveLimit
|
||||
amount: {
|
||||
type: forEachCultureOver
|
||||
type: forEachCulture
|
||||
over: 2
|
||||
filter: companion
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.logic.effects.SelfExertEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.CountActiveEvaluator;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
@@ -45,7 +46,7 @@ public class Card15_019 extends AbstractCompanion {
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new ArcheryTotalModifier(self, Side.FREE_PEOPLE, null,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.ARCHERY, 3,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.ARCHERY, new ConstantEvaluator(3),
|
||||
new CountActiveEvaluator(CardType.MINION, Keyword.HUNTER)))));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.cardtype.AbstractAttachable;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.CountCultureTokensEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.LimitEvaluator;
|
||||
|
||||
@@ -34,6 +35,6 @@ public class Card18_064 extends AbstractAttachable {
|
||||
@Override
|
||||
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(new StrengthModifier(self, Filters.hasAttached(self), null,
|
||||
new LimitEvaluator(new CountCultureTokensEvaluator(Token.MEN, Filters.any), 5)));
|
||||
new LimitEvaluator(new CountCultureTokensEvaluator(Token.MEN, Filters.any), new ConstantEvaluator(5))));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
|
||||
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.CountActiveEvaluator;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
@@ -45,7 +46,7 @@ public class Card3_035 extends AbstractPermanent {
|
||||
action.insertEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, Filters.sameCard(card), null,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, new ConstantEvaluator(3),
|
||||
new CountActiveEvaluator(CardType.COMPANION, Signet.GANDALF)))));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.logic.effects.RemoveTwilightEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.CountActiveEvaluator;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
|
||||
@@ -42,7 +43,7 @@ public class Card6_080 extends AbstractMinion {
|
||||
new RemoveTwilightEffect(3));
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new ArcheryTotalModifier(self, Side.SHADOW, null, new CardPhaseLimitEvaluator(game, self, Phase.ARCHERY, 4, new CountActiveEvaluator(4, (Integer) null, CardType.COMPANION)))));
|
||||
new ArcheryTotalModifier(self, Side.SHADOW, null, new CardPhaseLimitEvaluator(game, self, Phase.ARCHERY, new ConstantEvaluator(4), new CountActiveEvaluator(4, (Integer) null, CardType.COMPANION)))));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -51,7 +51,7 @@ public class Card6_095 extends AbstractCompanion {
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, self, null,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3, new ConstantEvaluator(3)))));
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, new ConstantEvaluator(3), new ConstantEvaluator(3)))));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -14,6 +14,7 @@ import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
|
||||
import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.CardPhaseLimitEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.CountActiveEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.NegativeEvaluator;
|
||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||
@@ -53,7 +54,7 @@ public class Card7_293 extends AbstractMinion {
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, card, null,
|
||||
new NegativeEvaluator(
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 3,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, new ConstantEvaluator(3),
|
||||
new CountActiveEvaluator(Filters.not(self), Culture.SAURON, Race.ORC))))));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -56,7 +56,7 @@ public class Card8_023 extends AbstractPermanent {
|
||||
action.appendEffect(
|
||||
new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, Filters.name("Shelob"), null,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, 6,
|
||||
new CardPhaseLimitEvaluator(game, self, Phase.SKIRMISH, new ConstantEvaluator(6),
|
||||
new ConstantEvaluator(3)))));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
@@ -178,16 +178,16 @@ public class ValueResolver {
|
||||
return new ConstantEvaluator(count);
|
||||
};
|
||||
} else if (type.equalsIgnoreCase("limit")) {
|
||||
FieldUtils.validateAllowedFields(object, "value", "amount");
|
||||
final int limit = FieldUtils.getInteger(object.get("value"), "value");
|
||||
ValueSource valueSource = resolveEvaluator(object.get("amount"), 0, environment);
|
||||
return (actionContext) -> new LimitEvaluator(valueSource.getEvaluator(actionContext), limit);
|
||||
FieldUtils.validateAllowedFields(object, "limit", "value");
|
||||
ValueSource limitSource = resolveEvaluator(object.get("limit"), 1, environment);
|
||||
ValueSource valueSource = resolveEvaluator(object.get("value"), 0, environment);
|
||||
return (actionContext) -> new LimitEvaluator(valueSource.getEvaluator(actionContext), limitSource.getEvaluator(actionContext));
|
||||
} else if (type.equalsIgnoreCase("cardphaselimit")) {
|
||||
FieldUtils.validateAllowedFields(object, "limit", "amount");
|
||||
final int limit = FieldUtils.getInteger(object.get("limit"), "limit");
|
||||
ValueSource limitSource = resolveEvaluator(object.get("limit"), 0, environment);
|
||||
ValueSource valueSource = resolveEvaluator(object.get("amount"), 0, environment);
|
||||
return (actionContext) -> new CardPhaseLimitEvaluator(actionContext.getGame(), actionContext.getSource(),
|
||||
actionContext.getGame().getGameState().getCurrentPhase(), limit,
|
||||
actionContext.getGame().getGameState().getCurrentPhase(), limitSource.getEvaluator(actionContext),
|
||||
valueSource.getEvaluator(actionContext));
|
||||
} else if (type.equalsIgnoreCase("countStacked")) {
|
||||
FieldUtils.validateAllowedFields(object, "on", "filter");
|
||||
@@ -227,7 +227,7 @@ public class ValueResolver {
|
||||
return Math.min(limit, count);
|
||||
}
|
||||
});
|
||||
} else if (type.equalsIgnoreCase("forEachCultureOver")) {
|
||||
} else if (type.equalsIgnoreCase("forEachCulture")) {
|
||||
FieldUtils.validateAllowedFields(object, "over", "filter");
|
||||
final int over = FieldUtils.getInteger(object.get("over"), "over", 0);
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter", "any");
|
||||
|
||||
@@ -76,8 +76,8 @@ public class FilterFactory {
|
||||
(actionContext -> Filters.siteNumber(actionContext.getGame().getGameState().getCurrentSiteNumber())));
|
||||
simpleFilters.put("siteincurrentregion",
|
||||
(actionContext) -> Filters.siteInCurrentRegion);
|
||||
simpleFilters.put("siteinregion2",
|
||||
(actionContext) -> Filters.and(CardType.SITE, Filters.region(2)));
|
||||
simpleFilters.put("sitehassitenumber",
|
||||
(actionContext) -> Filters.siteHasSiteNumber);
|
||||
simpleFilters.put("idinstored",
|
||||
(actionContext ->
|
||||
new Filter() {
|
||||
|
||||
@@ -751,6 +751,15 @@ public class Filters {
|
||||
public static Filter siteNumber(final int siteNumber) {
|
||||
return siteNumberBetweenInclusive(siteNumber, siteNumber);
|
||||
}
|
||||
public static Filter siteHasSiteNumber = Filters.and(CardType.SITE,
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(LotroGame game, PhysicalCard physicalCard) {
|
||||
int bpNumber = physicalCard.getBlueprint().getSiteNumber();
|
||||
Integer siteNumber = physicalCard.getSiteNumber();
|
||||
return Objects.requireNonNullElse(siteNumber, bpNumber) != 0;
|
||||
}
|
||||
});
|
||||
|
||||
public static Filter siteNumberBetweenInclusive(final int minSiteNumber, final int maxSiteNumber) {
|
||||
return new Filter() {
|
||||
|
||||
@@ -8,25 +8,26 @@ import com.gempukku.lotro.logic.modifiers.LimitCounter;
|
||||
public class CardPhaseLimitEvaluator implements Evaluator {
|
||||
private Integer _evaluated;
|
||||
|
||||
private final Evaluator _evaluator;
|
||||
private final Evaluator _amount;
|
||||
|
||||
private final LotroGame _game;
|
||||
private final PhysicalCard _source;
|
||||
private final Phase _phase;
|
||||
private final int _limit;
|
||||
private final Evaluator _limit;
|
||||
|
||||
public CardPhaseLimitEvaluator(LotroGame game, PhysicalCard source, Phase phase, int limit, Evaluator evaluator) {
|
||||
public CardPhaseLimitEvaluator(LotroGame game, PhysicalCard source, Phase phase, Evaluator limit, Evaluator amount) {
|
||||
_game = game;
|
||||
_source = source;
|
||||
_phase = phase;
|
||||
_limit = limit;
|
||||
_evaluator = evaluator;
|
||||
_amount = amount;
|
||||
}
|
||||
|
||||
private int evaluateOnce(LotroGame game, PhysicalCard cardAffected) {
|
||||
LimitCounter limitCounter = game.getModifiersQuerying().getUntilEndOfPhaseLimitCounter(_source, _phase);
|
||||
int internalResult = _evaluator.evaluateExpression(game, cardAffected);
|
||||
return limitCounter.incrementToLimit(_limit, internalResult);
|
||||
int amountResult = _amount.evaluateExpression(game, cardAffected);
|
||||
int limitResult = _amount.evaluateExpression(game, cardAffected);
|
||||
return limitCounter.incrementToLimit(limitResult, amountResult);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -4,16 +4,16 @@ import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
|
||||
public class LimitEvaluator implements Evaluator {
|
||||
private final int _limit;
|
||||
private final Evaluator _evaluator;
|
||||
private final Evaluator _limit;
|
||||
private final Evaluator _value;
|
||||
|
||||
public LimitEvaluator(Evaluator evaluator, int limit) {
|
||||
_evaluator = evaluator;
|
||||
_limit = limit;
|
||||
public LimitEvaluator(Evaluator valueEvaluator, Evaluator limitEvaluator) {
|
||||
_value = valueEvaluator;
|
||||
_limit = limitEvaluator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int evaluateExpression(LotroGame game, PhysicalCard cardAffected) {
|
||||
return Math.min(_limit, _evaluator.evaluateExpression(game, cardAffected));
|
||||
return Math.min( _limit.evaluateExpression(game, cardAffected), _value.evaluateExpression(game, cardAffected));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user