Multiply ValueSource
This commit is contained in:
@@ -857,6 +857,34 @@
|
||||
"by": "side(shadow)"
|
||||
}
|
||||
},
|
||||
"40_30": {
|
||||
"title": "Take Cover!",
|
||||
"side": "free people",
|
||||
"culture": "dwarven",
|
||||
"cost": 2,
|
||||
"type": "event",
|
||||
"keyword": "archery",
|
||||
"effects": {
|
||||
"type": "event",
|
||||
"cost": {
|
||||
"type": "discard",
|
||||
"filter": "choose(culture(dwarven),condition)",
|
||||
"memorizeStackedCards": "stackedCards"
|
||||
},
|
||||
"effect": {
|
||||
"type": "modifyArcheryTotal",
|
||||
"side": "shadow",
|
||||
"amount": {
|
||||
"type": "multiply",
|
||||
"source": {
|
||||
"type": "forEachInMemory",
|
||||
"memory": "stackedCards"
|
||||
},
|
||||
"multiplier": -1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_184": {
|
||||
"title": "Black Steed",
|
||||
"subtitle": "Bred to Serve",
|
||||
|
||||
@@ -18,15 +18,18 @@ import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class DiscardFromPlay implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "count", "filter", "memorize");
|
||||
FieldUtils.validateAllowedFields(effectObject, "count", "filter", "memorize", "memorizeStackedCards");
|
||||
|
||||
final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment);
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
|
||||
final String memory = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp");
|
||||
final String stackedCardsMemory = FieldUtils.getString(effectObject.get("memorizeStackedCards"), "memorizeStackedCards");
|
||||
|
||||
MultiEffectAppender result = new MultiEffectAppender();
|
||||
|
||||
@@ -39,6 +42,14 @@ public class DiscardFromPlay implements EffectAppenderProducer {
|
||||
@Override
|
||||
protected Effect createEffect(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
final Collection<? extends PhysicalCard> cardsFromMemory = action.getCardsFromMemory(memory);
|
||||
if (stackedCardsMemory != null) {
|
||||
List<PhysicalCard> stackedCards = new LinkedList<>();
|
||||
for (PhysicalCard physicalCard : cardsFromMemory) {
|
||||
stackedCards.addAll(game.getGameState().getStackedCards(physicalCard));
|
||||
}
|
||||
|
||||
action.setCardMemory(stackedCardsMemory, stackedCards);
|
||||
}
|
||||
return new DiscardCardsFromPlayEffect(playerId, self, Filters.in(cardsFromMemory));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -41,7 +41,8 @@ public class DrawCards implements EffectAppenderProducer {
|
||||
protected Effect createEffect(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
final String drawPlayer = playerSource.getPlayer(playerId, game, self, effectResult, effect);
|
||||
final Evaluator evaluator = count.getEvaluator(action, playerId, game, self, effectResult, effect);
|
||||
return new DrawCardsEffect(action, drawPlayer, evaluator);
|
||||
final int cardsDrawn = evaluator.evaluateExpression(game, null);
|
||||
return new DrawCardsEffect(action, drawPlayer, cardsDrawn);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2,15 +2,18 @@ package com.gempukku.lotro.cards.build.field.effect.appender;
|
||||
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.ValueSource;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppender;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.CostToEffectAction;
|
||||
import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import org.json.simple.JSONObject;
|
||||
@@ -20,12 +23,14 @@ public class ModifyArcheryTotal implements EffectAppenderProducer {
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "amount", "side");
|
||||
|
||||
final int amount = FieldUtils.getInteger(effectObject.get("amount"), "amount");
|
||||
final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("amount"), 0, environment);
|
||||
final Side side = FieldUtils.getEnum(Side.class, effectObject.get("side"), "side");
|
||||
|
||||
return new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
final Evaluator evaluator = valueSource.getEvaluator(action, playerId, game, self, effectResult, effect);
|
||||
final int amount = evaluator.evaluateExpression(game, null);
|
||||
return new AddUntilEndOfPhaseModifierEffect(
|
||||
new ArcheryTotalModifier(self, side, amount));
|
||||
}
|
||||
|
||||
@@ -8,10 +8,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.CostToEffectAction;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.CountStackedEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.LimitEvaluator;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.*;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import org.json.simple.JSONObject;
|
||||
@@ -91,6 +88,10 @@ public class ValueResolver {
|
||||
final Filterable on1 = onFilter.getFilterable(playerId, game, self, effectResult, effect);
|
||||
return new CountStackedEvaluator(on1, Filters.any);
|
||||
};
|
||||
} else if (type.equalsIgnoreCase("multiply")) {
|
||||
final int multiplier = FieldUtils.getInteger(object.get("multiplier"), "multiplier");
|
||||
final ValueSource valueSource = ValueResolver.resolveEvaluator(object.get("source"), 0, environment);
|
||||
return (action, playerId, game, self, effectResult, effect) -> new MultiplyEvaluator(multiplier, valueSource.getEvaluator(action, playerId, game, self, effectResult, effect));
|
||||
} else if (type.equalsIgnoreCase("forEachVitality")) {
|
||||
final int over = FieldUtils.getInteger(object.get("over"), "over", 0);
|
||||
return (action, playerId, game, self, effectResult, effect) -> (game1, cardAffected) -> Math.max(0, game1.getModifiersQuerying().getVitality(game1, cardAffected) - over);
|
||||
|
||||
Reference in New Issue
Block a user