Few more migrated cards
This commit is contained in:
@@ -43,5 +43,66 @@
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"40_4": {
|
||||
"title": "Balin's Revenge",
|
||||
"side": "free people",
|
||||
"culture": "dwarven",
|
||||
"cost": 0,
|
||||
"type": "event",
|
||||
"keyword": "skirmish",
|
||||
"effects": {
|
||||
"type": "event",
|
||||
"requirement": {
|
||||
"type": "canExert",
|
||||
"filter": "dwarf"
|
||||
},
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "choose(dwarf)"
|
||||
},
|
||||
"effect": {
|
||||
"type": "wound",
|
||||
"count": "0-2",
|
||||
"filter": "choose(goblin)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_5": {
|
||||
"title": "Battle Fever",
|
||||
"side": "free people",
|
||||
"culture": "dwarven",
|
||||
"cost": 2,
|
||||
"type": "event",
|
||||
"keyword": "skirmish",
|
||||
"effects": {
|
||||
"type": "event",
|
||||
"requirement": {
|
||||
"type": "canExert",
|
||||
"filter": "name(Gimli)"
|
||||
},
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "choose(name(Gimli))",
|
||||
"memory": "exertedGimli"
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "replaceInSkirmish",
|
||||
"filter": "unbound,companion",
|
||||
"with": "memory(exertedGimli)"
|
||||
},
|
||||
{
|
||||
"type": "addStrength",
|
||||
"filter": "memory(exertedGimli)",
|
||||
"amount": 2
|
||||
},
|
||||
{
|
||||
"type": "addKeyword",
|
||||
"filter": "memory(exertedGimli)",
|
||||
"keyword": "damage+1"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,4 +4,8 @@ public class InvalidCardDefinitionException extends Exception {
|
||||
public InvalidCardDefinitionException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public InvalidCardDefinitionException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.gempukku.lotro.cards.build.FieldProcessor;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.field.effect.ActivatedEffectProcessor;
|
||||
import com.gempukku.lotro.cards.build.field.effect.ActivatedTriggerEffectProcessor;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EventEffectProcessor;
|
||||
import com.gempukku.lotro.cards.build.field.effect.TriggerEffectProcessor;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
@@ -19,6 +20,7 @@ public class EffectFieldProcessor implements FieldProcessor {
|
||||
effectProcessors.put("trigger", new TriggerEffectProcessor());
|
||||
effectProcessors.put("activatedtrigger", new ActivatedTriggerEffectProcessor());
|
||||
effectProcessors.put("activated", new ActivatedEffectProcessor());
|
||||
effectProcessors.put("event", new EventEffectProcessor());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -18,8 +18,11 @@ public class EffectAppenderFactory {
|
||||
effectAppenderProducers.put("preventdiscardfromplay", new PreventCardEffectAppender());
|
||||
effectAppenderProducers.put("exert", new Exert());
|
||||
effectAppenderProducers.put("addstrength", new AddStrength());
|
||||
effectAppenderProducers.put("addkeyword", new AddStrength());
|
||||
effectAppenderProducers.put("discardtopcardfromdeck", new DiscardTopCardFromDeck());
|
||||
effectAppenderProducers.put("addtwilight", new AddTwilight());
|
||||
effectAppenderProducers.put("wound", new Wound());
|
||||
effectAppenderProducers.put("replaceinskirmish", new ReplaceInSkirmish());
|
||||
}
|
||||
|
||||
public EffectAppender getEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect;
|
||||
|
||||
import com.gempukku.lotro.cards.build.BuiltLotroCardBlueprint;
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.field.EffectProcessor;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class EventEffectProcessor implements EffectProcessor {
|
||||
@Override
|
||||
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
DefaultActionSource actionSource = new DefaultActionSource();
|
||||
EffectUtils.processRequirementsCostsAndEffects(value, environment, actionSource);
|
||||
|
||||
blueprint.setPlayEventAction(actionSource);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
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.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.CardResolver;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CountResolver;
|
||||
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.CostToEffectAction;
|
||||
import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class AddKeyword implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
final CountResolver.Count count = CountResolver.resolveCount(effectObject.get("count"), 1);
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
|
||||
final String memory = FieldUtils.getString(effectObject.get("memory"), "memory", "_temp");
|
||||
final String keywordString = FieldUtils.getString(effectObject.get("keyword"), "keyword");
|
||||
|
||||
final String[] keywordSplit = keywordString.split("\\+");
|
||||
Keyword keyword = FieldUtils.getEnum(Keyword.class, keywordSplit[0], "keyword");
|
||||
int value = 1;
|
||||
if (keywordSplit.length == 2)
|
||||
value = Integer.parseInt(keywordSplit[1]);
|
||||
final int keywordValue = value;
|
||||
|
||||
MultiEffectAppender result = new MultiEffectAppender();
|
||||
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCards(filter, count.getMin(), count.getMax(), memory, "Choose cards to add keywork to", environment));
|
||||
result.addEffectAppender(
|
||||
new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
final Collection<? extends PhysicalCard> cardsFromMemory = action.getCardsFromMemory(memory);
|
||||
return new AddUntilEndOfPhaseModifierEffect(
|
||||
new KeywordModifier(self, Filters.in(cardsFromMemory), keyword, keywordValue));
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,8 @@ import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
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.CardResolver;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CountResolver;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
@@ -21,20 +23,19 @@ public class AddStrength implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
final int amount = FieldUtils.getInteger(effectObject.get("amount"), "amount");
|
||||
final int count = FieldUtils.getInteger(effectObject.get("count"), "count");
|
||||
final CountResolver.Count count = CountResolver.resolveCount(effectObject.get("count"), 1);
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
|
||||
final String memory = FieldUtils.getString(effectObject.get("memory"), "memory", "_temp");
|
||||
|
||||
MultiEffectAppender result = new MultiEffectAppender();
|
||||
|
||||
String discardMemory = "_temp";
|
||||
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCards(filter, count, discardMemory, "Choose cards to add strength to", environment));
|
||||
CardResolver.resolveCards(filter, count.getMin(), count.getMax(), memory, "Choose cards to add strength to", environment));
|
||||
result.addEffectAppender(
|
||||
new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
final Collection<? extends PhysicalCard> cardsFromMemory = action.getCardsFromMemory(discardMemory);
|
||||
final Collection<? extends PhysicalCard> cardsFromMemory = action.getCardsFromMemory(memory);
|
||||
return new AddUntilEndOfPhaseModifierEffect(
|
||||
new StrengthModifier(self, Filters.in(cardsFromMemory), amount));
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@ import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
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.CardResolver;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CountResolver;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
@@ -19,22 +21,21 @@ import java.util.Collection;
|
||||
public class DiscardFromPlay implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
final int count = FieldUtils.getInteger(effectObject.get("count"), "count", 1);
|
||||
final CountResolver.Count count = CountResolver.resolveCount(effectObject.get("count"), 1);
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
|
||||
final String memory = FieldUtils.getString(effectObject.get("memory"), "memory", "_temp");
|
||||
|
||||
MultiEffectAppender result = new MultiEffectAppender();
|
||||
|
||||
String discardMemory = "_temp";
|
||||
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCards(filter,
|
||||
(playerId, game, source, effectResult, effect) -> Filters.canBeDiscarded(playerId, source),
|
||||
count, discardMemory, "Choose cards to discard", environment));
|
||||
count.getMin(), count.getMax(), memory, "Choose cards to discard", environment));
|
||||
result.addEffectAppender(
|
||||
new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
final Collection<? extends PhysicalCard> cardsFromMemory = action.getCardsFromMemory(discardMemory);
|
||||
final Collection<? extends PhysicalCard> cardsFromMemory = action.getCardsFromMemory(memory);
|
||||
return new DiscardCardsFromPlayEffect(playerId, self, Filters.in(cardsFromMemory));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
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.PlayerResolver;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.CostToEffectAction;
|
||||
|
||||
@@ -5,6 +5,8 @@ import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
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.CardResolver;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CountResolver;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
@@ -19,23 +21,22 @@ import java.util.Collection;
|
||||
public class Exert implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
final int count = FieldUtils.getInteger(effectObject.get("count"), "count", 1);
|
||||
final CountResolver.Count count = CountResolver.resolveCount(effectObject.get("count"), 1);
|
||||
final int times = FieldUtils.getInteger(effectObject.get("times"), "times", 1);
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
|
||||
final String memory = FieldUtils.getString(effectObject.get("memory"), "memory", "_temp");
|
||||
|
||||
MultiEffectAppender result = new MultiEffectAppender();
|
||||
|
||||
String discardMemory = "_temp";
|
||||
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCards(filter,
|
||||
(playerId, game, source, effectResult, effect) -> Filters.canExert(source, times),
|
||||
count, discardMemory, "Choose cards to exert", environment));
|
||||
count.getMin(), count.getMax(), memory, "Choose cards to exert", environment));
|
||||
result.addEffectAppender(
|
||||
new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
final Collection<? extends PhysicalCard> cardsFromMemory = action.getCardsFromMemory(discardMemory);
|
||||
final Collection<? extends PhysicalCard> cardsFromMemory = action.getCardsFromMemory(memory);
|
||||
return new ExertCharactersEffect(action, self, cardsFromMemory.toArray(new PhysicalCard[0]));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
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.CardResolver;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
@@ -19,17 +20,18 @@ public class PreventCardEffectAppender implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
|
||||
final String memory = FieldUtils.getString(effectObject.get("memory"), "memory", "_temp");
|
||||
|
||||
MultiEffectAppender result = new MultiEffectAppender();
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCard(filter,
|
||||
(playerId, game, source, effectResult, effect) -> Filters.in(((PreventableCardEffect) effect).getAffectedCardsMinusPrevented(game)),
|
||||
"_temp", "Choose card to prevent effect on", environment));
|
||||
memory, "Choose card to prevent effect on", environment));
|
||||
result.addEffectAppender(
|
||||
new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
return new PreventCardEffect((PreventableCardEffect) effect, action.getCardFromMemory("_temp"));
|
||||
return new PreventCardEffect((PreventableCardEffect) effect, action.getCardFromMemory(memory));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.appender;
|
||||
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.FilterableSource;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
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.CardResolver;
|
||||
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.ReplaceInSkirmishEffect;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class ReplaceInSkirmish implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
|
||||
final String with = FieldUtils.getString(effectObject.get("with"), "with");
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter);
|
||||
|
||||
MultiEffectAppender result = new MultiEffectAppender();
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCard(with, "_temp", "Choose character to replace with in skirmish", environment));
|
||||
result.addEffectAppender(
|
||||
new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
final PhysicalCard card = action.getCardFromMemory("_temp");
|
||||
return new ReplaceInSkirmishEffect(card, filterableSource.getFilterable(playerId, game, self, effectResult, effect));
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,8 @@ import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
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.CardResolver;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.CostToEffectAction;
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
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.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.CardResolver;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CountResolver;
|
||||
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.effects.WoundCharactersEffect;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class Wound implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
final CountResolver.Count count = CountResolver.resolveCount(effectObject.get("count"), 1);
|
||||
final int times = FieldUtils.getInteger(effectObject.get("times"), "times", 1);
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
|
||||
final String memory = FieldUtils.getString(effectObject.get("memory"), "memory", "_temp");
|
||||
|
||||
MultiEffectAppender result = new MultiEffectAppender();
|
||||
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCards(filter,
|
||||
(playerId, game, source, effectResult, effect) -> Filters.canTakeWounds(source, times),
|
||||
count.getMin(), count.getMax(), memory, "Choose cards to wound", environment));
|
||||
result.addEffectAppender(
|
||||
new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
|
||||
final Collection<? extends PhysicalCard> cardsFromMemory = action.getCardsFromMemory(memory);
|
||||
return new WoundCharactersEffect(self, cardsFromMemory.toArray(new PhysicalCard[0]));
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.appender;
|
||||
package com.gempukku.lotro.cards.build.field.effect.appender.resolver;
|
||||
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.FilterableSource;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppender;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.AbstractEffectAppender;
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -70,7 +71,7 @@ public class CardResolver {
|
||||
return resolveCard(type, null, memory, choiceText, environment);
|
||||
}
|
||||
|
||||
public static EffectAppender resolveCards(String type, FilterableSource additionalFilter, int count, String memory, String choiceText, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
public static EffectAppender resolveCards(String type, FilterableSource additionalFilter, int min, int max, String memory, String choiceText, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
if (type.equals("self")) {
|
||||
return new AbstractEffectAppender() {
|
||||
@Override
|
||||
@@ -106,7 +107,7 @@ public class CardResolver {
|
||||
Filterable additionalFilterable = Filters.any;
|
||||
if (additionalFilter != null)
|
||||
additionalFilterable = additionalFilter.getFilterable(playerId, game, self, effectResult, effect);
|
||||
return new ChooseActiveCardsEffect(self, playerId, choiceText, count, count, filterable, additionalFilterable) {
|
||||
return new ChooseActiveCardsEffect(self, playerId, choiceText, min, max, filterable, additionalFilterable) {
|
||||
@Override
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> cards) {
|
||||
action.setCardMemory(memory, cards);
|
||||
@@ -118,7 +119,7 @@ public class CardResolver {
|
||||
throw new RuntimeException("Unable to resolve card resolver of type: " + type);
|
||||
}
|
||||
|
||||
public static EffectAppender resolveCards(String type, int count, String memory, String choiceText, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
return resolveCards(type, null, count, memory, choiceText, environment);
|
||||
public static EffectAppender resolveCards(String type, int min, int max, String memory, String choiceText, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
return resolveCards(type, null, min, max, memory, choiceText, environment);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.appender.resolver;
|
||||
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
|
||||
public class CountResolver {
|
||||
public static Count resolveCount(Object value, int defaultValue) throws InvalidCardDefinitionException {
|
||||
if (value == null)
|
||||
return new Count(defaultValue, defaultValue);
|
||||
|
||||
try {
|
||||
if (value instanceof String) {
|
||||
String stringValue = (String) value;
|
||||
if (stringValue.contains("-")) {
|
||||
final String[] split = stringValue.split("-", 2);
|
||||
final int min = Integer.parseInt(split[0]);
|
||||
final int max = Integer.parseInt(split[1]);
|
||||
if (min > max || min < 0 || max < 1)
|
||||
throw new InvalidCardDefinitionException("Unable to resolve count: " + value);
|
||||
return new Count(min, max);
|
||||
} else {
|
||||
int v = Integer.parseInt(stringValue);
|
||||
return new Count(v, v);
|
||||
}
|
||||
} else if (value instanceof Number) {
|
||||
return new Count(((Number) value).intValue(), ((Number) value).intValue());
|
||||
}
|
||||
} catch (NumberFormatException exp) {
|
||||
throw new InvalidCardDefinitionException("Unable to resolve count: " + value, exp);
|
||||
}
|
||||
throw new InvalidCardDefinitionException("Unable to resolve count: " + value);
|
||||
}
|
||||
|
||||
public static class Count {
|
||||
private int min;
|
||||
private int max;
|
||||
|
||||
private Count(int min, int max) {
|
||||
this.min = min;
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
public int getMin() {
|
||||
return min;
|
||||
}
|
||||
|
||||
public int getMax() {
|
||||
return max;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.appender;
|
||||
package com.gempukku.lotro.cards.build.field.effect.appender.resolver;
|
||||
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.FilterableSource;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppender;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.AbstractEffectAppender;
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -4,10 +4,6 @@ import com.gempukku.lotro.cards.build.FilterableSource;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.results.CharacterLostSkirmishResult;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -34,13 +30,13 @@ public class FilterFactory {
|
||||
simpleFilters.put("self", (playerId, game, source, effectResult, effect) -> source);
|
||||
simpleFilters.put("your", (playerId, game, source, effectResult, effect) -> Filters.owner(source.getOwner()));
|
||||
simpleFilters.put("skirmishloser",
|
||||
new FilterableSource() {
|
||||
@Override
|
||||
public Filterable getFilterable(String playerId, LotroGame game, PhysicalCard source, EffectResult effectResult, Effect effect) {
|
||||
final CharacterLostSkirmishResult lostSkirmish = (CharacterLostSkirmishResult) effectResult;
|
||||
return lostSkirmish.getLoser();
|
||||
}
|
||||
(playerId, game, source, effectResult, effect) -> {
|
||||
final CharacterLostSkirmishResult lostSkirmish = (CharacterLostSkirmishResult) effectResult;
|
||||
return lostSkirmish.getLoser();
|
||||
});
|
||||
simpleFilters.put("unbound",
|
||||
(playerId, game, source, effectResult, effect) -> Filters.not(Keyword.RING_BOUND));
|
||||
|
||||
parameterFilters.put("culture", (parameter, filterFactory) -> {
|
||||
final Culture culture = Culture.valueOf(parameter.toUpperCase());
|
||||
if (culture == null)
|
||||
@@ -53,6 +49,8 @@ public class FilterFactory {
|
||||
final FilterableSource filterableSource = filterFactory.generateFilter(parameter);
|
||||
return (playerId, game, source, effectResult, effect) -> Filters.hasAttached(filterableSource.getFilterable(playerId, game, source, effectResult, effect));
|
||||
});
|
||||
parameterFilters.put("name",
|
||||
(parameter, filterFactory) -> (playerId, game, source, effectResult, effect) -> Filters.name(parameter));
|
||||
}
|
||||
|
||||
private void appendFilter(Filterable value) {
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
package com.gempukku.lotro.logic.timing;
|
||||
|
||||
public class PlayUtil {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user