Some more cards

This commit is contained in:
marcin.sciesinski
2019-08-29 17:49:35 -07:00
parent bc15ef7e49
commit cc68a638c9
6 changed files with 280 additions and 5 deletions

View File

@@ -142,7 +142,7 @@
"filter": "self"
},
"effect": {
"type": "stackTopCardOfDrawDeck",
"type": "stackTopCardsOfDrawDeck",
"where": "self"
}
},
@@ -227,7 +227,7 @@
"effects": {
"type": "event",
"cost": {
"type": "stackTopCardOfDrawDeck",
"type": "stackTopCardsOfDrawDeck",
"deck": "owner",
"where": "choose(culture(dwarven),support area,condition)",
"count": 3
@@ -554,7 +554,187 @@
}
}
]
}
},
"40_18": {
"title": "*Gimli",
"subtitle": "Stalwart Protector",
"side": "free people",
"culture": "dwarven",
"cost": 3,
"type": "companion",
"race": "dwarf",
"strength": 6,
"vitality": 4,
"resistance": 7,
"keyword": "damage+1",
"effects": [
{
"type": "modifyOwnCost",
"condition": {
"type": "phase",
"phase": "play starting fellowship"
},
"amount": -1
},
{
"type": "modifyStrength",
"condition": {
"type": "location",
"filter": "or(mountain,underground)"
},
"amount": 2
},
{
"type": "canttakemorewoundsthan",
"phase": "skirmish",
"amount": 1
}
]
},
"40_19": {
"title": "*Gimli's Battle Axe",
"subtitle": "Weapon of Erebor",
"side": "free people",
"culture": "dwarven",
"cost": 2,
"type": "possession",
"possession": "hand weapon",
"strength": 2,
"target": "dwarf",
"effects": [
{
"type": "addKeyword",
"filter": "hasAttached(self),name(Gimli)",
"keyword": "damage+1"
},
{
"type": "trigger",
"optional": true,
"trigger": {
"type": "winsSkirmish",
"filter": "hasAttached(self)"
},
"effect": {
"type": "stackCardsFromDiscard",
"where": "choose(culture(dwarven),support area,condition)",
"filter": "choose(culture(dwarven),event)"
}
}
]
},
"40_21": {
"title": "Killing Blow",
"side": "free people",
"culture": "dwarven",
"cost": 2,
"type": "event",
"keyword": "skirmish",
"effects": {
"type": "event",
"effect": [
{
"type": "modifyStrength",
"amount": 2,
"filter": "choose(dwarf)",
"memorize": "dwarf"
},
{
"type": "condition",
"condition": {
"type": "canSpot",
"filter": "culture(dwarven),condition,hasStacked(any)"
},
"effect": {
"type": "addKeyword",
"filter": "memory(dwarf)",
"keyword": "damage+1"
}
}
]
}
},
"40_22": {
"title": "Lethal Strike",
"side": "free people",
"culture": "dwarven",
"cost": 1,
"type": "event",
"keyword": "skirmish",
"effects": {
"type": "event",
"cost": {
"type": "exert",
"filter": "choose(dwarf)",
"memorize": "dwarf"
},
"effect": [
{
"type": "modifyStrength",
"filter": "memory(dwarf)",
"amount": 3
},
{
"type": "addKeyword",
"filter": "memory(dwarf)",
"keyword": "damage+1"
}
]
}
},
"40_23": {
"title": "Memories of Khazad-dum",
"side": "free people",
"culture": "dwarven",
"cost": 2,
"type": "condition",
"keyword": "support area",
"effects": [
{
"type": "trigger",
"trigger": {
"type": "played",
"filter": "self"
},
"effect": {
"type": "stackTopCardsOfDrawDeck",
"where": "self"
}
},
{
"type": "activated",
"phase": "skirmish",
"cost": {
"type": "discardStackedCards",
"on": "self",
"filter": "choose(side(free people))"
},
"effect": {
"type": "modifyStrength",
"filter": "choose(dwarf)",
"amount": 1
}
}
]
},
"40_24": {
"title": "Miners of Mithril",
"side": "free people",
"culture": "dwarven",
"cost": 0,
"type": "event",
"keyword": "fellowship",
"effects": {
"type": "event",
"cost": {
"type": "stackCardsFromHand",
"where": "choose(culture(dwarven),support area,condition)",
"filter": "choose(side(free people))"
},
"effect": {
"type": "drawCards"
}
}
},
"40_184": {
"title": "Black Steed",
"subtitle": "Bred to Serve",

View File

@@ -28,6 +28,7 @@ public class EffectFieldProcessor implements FieldProcessor {
effectProcessors.put("archerytotal", new ArcheryTotal());
effectProcessors.put("opponentmaynotdiscard", new OpponentMayNotDiscard());
effectProcessors.put("modifyowncost", new ModifyOwnCost());
effectProcessors.put("canttakemorewoundsthan", new CantTakeMoreWoundsThan());
}
@Override

View File

@@ -13,7 +13,7 @@ public class EffectAppenderFactory {
private Map<String, EffectAppenderProducer> effectAppenderProducers = new HashMap<>();
public EffectAppenderFactory() {
effectAppenderProducers.put("stacktopcardofdrawdeck", new StackTopCardOfDrawDeck());
effectAppenderProducers.put("stacktopcardsofdrawdeck", new StackTopCardsOfDrawDeck());
effectAppenderProducers.put("discard", new DiscardFromPlay());
effectAppenderProducers.put("preventdiscard", new PreventCardEffectAppender());
effectAppenderProducers.put("exert", new Exert());
@@ -42,6 +42,7 @@ public class EffectAppenderFactory {
effectAppenderProducers.put("drawcards", new DrawCards());
effectAppenderProducers.put("removeburdens", new RemoveBurdens());
effectAppenderProducers.put("stackcardsfromhand", new StackCardsFromHand());
effectAppenderProducers.put("stackcardsfromdiscard", new StackCardsFromDiscard());
effectAppenderProducers.put("putcardsfromdiscardintohand", new PutCardsFromDiscardIntoHand());
}

View File

@@ -0,0 +1,57 @@
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.CardResolver;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
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.StackCardFromDiscardEffect;
import com.gempukku.lotro.logic.timing.Effect;
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 StackCardsFromDiscard implements EffectAppenderProducer {
@Override
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "filter", "where", "count");
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "choose(any)");
final String where = FieldUtils.getString(effectObject.get("where"), "where");
final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment);
MultiEffectAppender result = new MultiEffectAppender();
result.addEffectAppender(
CardResolver.resolveCard(where, "_temp1", "owner", "Choose card to stack on", environment));
result.addEffectAppender(
CardResolver.resolveCardsInDiscard(filter, valueSource, "_temp2", "owner", "Choose cards to stack", environment));
result.addEffectAppender(
new DelayedAppender() {
@Override
protected List<? extends Effect> createEffects(CostToEffectAction action, String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) {
final PhysicalCard card = action.getCardFromMemory("_temp1");
final Collection<? extends PhysicalCard> cardsInHand = action.getCardsFromMemory("_temp2");
List<Effect> result = new LinkedList<>();
for (PhysicalCard physicalCard : cardsInHand) {
result.add(new StackCardFromDiscardEffect(physicalCard, card));
}
return result;
}
});
return result;
}
}

View File

@@ -15,7 +15,7 @@ import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult;
import org.json.simple.JSONObject;
public class StackTopCardOfDrawDeck implements EffectAppenderProducer {
public class StackTopCardsOfDrawDeck implements EffectAppenderProducer {
@Override
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "deck", "where", "count");

View File

@@ -0,0 +1,36 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.*;
import com.gempukku.lotro.cards.build.field.EffectProcessor;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.logic.modifiers.CantTakeMoreThanXWoundsModifier;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
import org.json.simple.JSONObject;
public class CantTakeMoreWoundsThan implements EffectProcessor {
@Override
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(value, "filter", "phase", "condition", "amount");
final ValueSource valueSource = ValueResolver.resolveEvaluator(value.get("amount"), 1, environment);
final JSONObject[] conditionArray = FieldUtils.getObjectArray(value.get("condition"), "condition");
final String filter = FieldUtils.getString(value.get("filter"), "filter", "self");
final Phase phase = FieldUtils.getEnum(Phase.class, value.get("phase"), "phase");
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter);
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
blueprint.appendInPlayModifier(
(game, self) -> {
final Evaluator evaluator = valueSource.getEvaluator(null, null, game, self, null, null);
return new CantTakeMoreThanXWoundsModifier(self, phase,
valueSource.getEvaluator(null, null, game, self, null, null)
.evaluateExpression(game, self),
new RequirementCondition(requirements, null, self, null, null),
filterableSource.getFilterable(null, game, self, null, null));
});
}
}