Cards from set 14 (Expanded Middle-Earth) are in new system

This commit is contained in:
marcin.sciesinski
2019-09-07 16:02:53 -07:00
parent 2b929c8b80
commit ec0c8ffb02
24 changed files with 656 additions and 804 deletions

View File

@@ -0,0 +1,564 @@
{
"14_1": {
"title": "*Dain Ironfoot",
"subtitle": "King Under the Mountain",
"culture": "dwarven",
"cost": 3,
"type": "companion",
"race": "dwarf",
"strength": 7,
"vitality": 3,
"resistance": 6,
"effects": [
{
"type": "modifier",
"modifier": {
"type": "modifyCost",
"filter": "another,or(dwarf,and(culture(gandalf),man))",
"amount": -1
}
},
{
"type": "trigger",
"optional": true,
"trigger": {
"type": "startOfPhase",
"phase": "regroup"
},
"cost": {
"type": "discard",
"filter": "choose(or(culture(dwarven),culture(gandalf)),condition)"
},
"effect": {
"type": "discard",
"filter": "choose(minion)"
}
}
]
},
"14_2": {
"title": "*Elladan",
"subtitle": "Son of Elrond",
"culture": "elven",
"cost": 3,
"type": "companion",
"race": "elf",
"strength": 7,
"vitality": 3,
"resistance": 6,
"effects": [
{
"type": "modifier",
"modifier": {
"type": "modifyCost",
"filter": "name(Elrohir)",
"amount": -2
}
},
{
"type": "modifier",
"modifier": {
"type": "modifyCost",
"filter": "culture(elven),event",
"condition": {
"type": "canSpot",
"filter": "or(name(Elladan),name(Elrohir)),inSkirmish"
},
"amount": -2
}
}
]
},
"14_3": {
"title": "*Elrohir",
"subtitle": "Son of Elrond",
"culture": "elven",
"cost": 3,
"type": "companion",
"race": "elf",
"strength": 7,
"vitality": 3,
"resistance": 6,
"effects": [
{
"type": "modifier",
"modifier": {
"type": "modifyCost",
"filter": "name(Elladan)",
"amount": -2
}
},
{
"type": "trigger",
"trigger": {
"type": "played",
"filter": "culture(elven),event"
},
"condition": {
"type": "canSpot",
"filter": "or(name(Elladan),name(Elrohir)),inSkirmish"
},
"effect": {
"type": "modifyStrength",
"filter": "all(minion,inSkirmish)",
"amount": -2
}
}
]
},
"14_4": {
"title": "*Gildor Inglorion",
"subtitle": "Of the House of Finrod",
"culture": "elven",
"cost": 2,
"type": "companion",
"race": "elf",
"strength": 6,
"vitality": 3,
"resistance": 6,
"effects": {
"type": "trigger",
"trigger": {
"type": "startOfPhase",
"phase": "archery"
},
"condition": {
"type": "isMore",
"firstNumber": {
"type": "forEachYouCanSpot",
"filter": "minion"
},
"secondNumber": {
"type": "forEachYouCanSpot",
"filter": "companion"
}
},
"effect": {
"type": "addKeyword",
"filter": "all(companion)",
"keyword": "archer"
}
}
},
"14_5": {
"title": "*Brand",
"subtitle": "King of Dale",
"culture": "gandalf",
"cost": 2,
"type": "companion",
"race": "man",
"strength": 6,
"vitality": 3,
"resistance": 6,
"effects": [
{
"type": "modifier",
"modifier": {
"type": "modifyStrength",
"filter": "or(dwarf,and(another,culture(gandalf),man))",
"amount": 1
}
},
{
"type": "modifier",
"modifier": {
"type": "modifyArcheryTotal",
"condition": {
"type": "isMore",
"firstNumber": {
"type": "forEachYouCanSpot",
"filter": "minion"
},
"secondNumber": {
"type": "forEachYouCanSpot",
"filter": "companion"
}
},
"side": "free people",
"amount": {
"type": "subtract",
"firstNumber": {
"type": "forEachYouCanSpot",
"filter": "minion"
},
"secondNumber": {
"type": "forEachYouCanSpot",
"filter": "companion"
}
}
}
}
]
},
"14_6": {
"title": "*Grimbeorn",
"subtitle": "Beorning Chieftain",
"culture": "gandalf",
"cost": 3,
"type": "companion",
"race": "man",
"strength": 4,
"vitality": 5,
"resistance": 6,
"effects": [
{
"type": "trigger",
"trigger": {
"type": "startOfTurn"
},
"effect": {
"type": "heal",
"filter": "self"
}
},
{
"type": "trigger",
"optional": true,
"trigger": {
"type": "startOfPhase",
"phase": "maneuver"
},
"cost": [
{
"type": "exert",
"filter": "self",
"times": 2
},
{
"type": "discardFromHand",
"forced": false,
"filter": "choose(minion)",
"memorize": "discardedCard"
}
],
"effect": {
"type": "modifyStrength",
"filter": "self",
"amount": {
"type": "printedStrengthFromMemory",
"memory": "discardedCard"
}
}
}
]
},
"14_7": {
"title": "*Duilin",
"subtitle": "Ranger from Blackroot Vale",
"culture": "gondor",
"cost": 2,
"type": "companion",
"race": "man",
"strength": 5,
"vitality": 3,
"resistance": 5,
"keyword": "ranger",
"effects": {
"type": "modifier",
"modifier": {
"type": "modifyStrength",
"filter": "self",
"condition": {
"type": "location",
"filter": "or(forest,river)"
}
}
}
},
"14_8": {
"title": "*Duinhir",
"subtitle": "Tall Man of Blackroot Vale",
"culture": "gondor",
"cost": 2,
"type": "companion",
"race": "man",
"strength": 6,
"vitality": 3,
"resistance": 5,
"effects": [
{
"type": "modifier",
"modifier": {
"type": "addKeyword",
"condition": {
"type": "canSpot",
"filter": "mount"
},
"keyword": "damage+1"
}
},
{
"type": "trigger",
"optional": true,
"trigger": {
"type": "winsSkirmish",
"filter": "self"
},
"condition": {
"type": "isMore",
"firstNumber": {
"type": "forEachYouCanSpot",
"filter": "minion"
},
"secondNumber": {
"type": "forEachYouCanSpot",
"filter": "companion"
}
},
"cost": {
"type": "exert",
"filter": "self"
},
"effect": {
"type": "discard",
"filter": "choose(minion,strengthLessThan(8))"
}
}
]
},
"14_9": {
"title": "*Halbarad",
"subtitle": "Ranger of the North",
"culture": "gondor",
"cost": 3,
"type": "companion",
"race": "man",
"strength": 7,
"vitality": 3,
"resistance": 6,
"keyword": "ranger",
"effects": [
{
"type": "modifyOwnCost",
"condition": {
"type": "canSpot",
"filter": "ring bearer,resistanceMoreThan(8)"
},
"amount": -1
},
{
"type": "trigger",
"optional": true,
"trigger": {
"type": "startOfPhase",
"phase": "maneuver"
},
"cost": {
"type": "discardFromHand",
"filter": "choose(culture(gondor))",
"forced": false
},
"effect": {
"type": "heal",
"filter": "choose(culture(gondor),companion)"
}
}
]
},
"14_10": {
"title": "Furious Hillman",
"culture": "men",
"cost": 3,
"type": "minion",
"race": "man",
"strength": 8,
"vitality": 2,
"site": 4,
"effects": {
"type": "activatedTrigger",
"trigger": {
"type": "played",
"filter": "side(free people),event"
},
"condition": {
"type": "canSpot",
"filter": "another,culture(men)"
},
"cost": {
"type": "discard",
"filter": "self"
},
"effect": {
"type": "cancelEvent"
}
}
},
"14_11": {
"title": "Swarming Hillman",
"culture": "men",
"cost": 3,
"type": "minion",
"race": "man",
"strength": 8,
"vitality": 2,
"site": 4,
"effects": {
"type": "trigger",
"trigger": {
"type": "startOfPhase",
"phase": "regroup"
},
"condition": {
"type": "isMore",
"firstNumber": {
"type": "forEachYouCanSpot",
"filter": "character,man"
},
"secondNumber": {
"type": "maxOfRaces",
"filter": "character,not(man)"
}
},
"effect": {
"type": "addModifier",
"modifier": {
"type": "modifyMoveLimit",
"amount": -1
},
"until": "endOfTurn"
}
}
},
"14_12": {
"title": "Half-troll of Far Harad",
"culture": "orc",
"cost": 3,
"type": "minion",
"race": "half-troll",
"strength": 8,
"vitality": 2,
"site": 4,
"effects": {
"type": "trigger",
"optional": true,
"trigger": {
"type": "startOfPhase",
"phase": "assignment"
},
"condition": {
"type": "isMore",
"firstNumber": {
"type": "forEachYouCanSpot",
"filter": "companion"
},
"secondNumber": {
"type": "forEachYouCanSpot",
"filter": "minion"
}
},
"cost": {
"type": "removeTwilight",
"amount": 2
},
"effect": {
"type": "playCardFromDiscard",
"filter": "choose(culture(orc),orc)",
"removedTwilight": 2
}
}
},
"14_13": {
"title": "*Horror of Harad",
"culture": "orc",
"cost": 4,
"type": "minion",
"race": "half-troll",
"strength": 9,
"vitality": 3,
"site": 4,
"keyword": [
"ambush+1",
"damage+1",
"fierce",
"lurker",
"muster",
"toil+2"
]
},
"14_14": {
"title": "Uruk-hai Healer",
"culture": "uruk-hai",
"cost": 3,
"type": "minion",
"race": "uruk-hai",
"strength": 8,
"vitality": 2,
"site": 5,
"keyword": "damage+1",
"effects": {
"type": "trigger",
"optional": true,
"trigger": {
"type": "startOfPhase",
"phase": "assignment"
},
"effect": {
"type": "duplicate",
"effect": {
"type": "heal",
"filter": "choose(uruk-hai)",
"count": "0-1"
},
"amount": {
"type": "forEachYouCanSpot",
"filter": "companion"
}
}
}
},
"14_15": {
"title": "Uruk-hai Scout",
"culture": "uruk-hai",
"cost": 3,
"type": "minion",
"race": "uruk-hai",
"strength": 8,
"vitality": 2,
"site": 5,
"keyword": "damage+1",
"effects": {
"type": "trigger",
"trigger": {
"type": "played",
"filter": "self"
},
"effect": [
{
"type": "choice",
"texts": [
"Choose keyword - Battleground",
"Choose keyword - Mountain",
"Choose keyword - Plains",
"Choose keyword - Underground"
],
"effects": [
{
"type": "addKeyword",
"filter": "choose(currentSite)",
"keyword": "battleground",
"until": "endOfTurn"
},
{
"type": "addKeyword",
"filter": "choose(currentSite)",
"keyword": "mountain",
"until": "endOfTurn"
},
{
"type": "addKeyword",
"filter": "choose(currentSite)",
"keyword": "plains",
"until": "endOfTurn"
},
{
"type": "addKeyword",
"filter": "choose(currentSite)",
"keyword": "underground",
"until": "endOfTurn"
}
]
}
]
}
}
}

View File

@@ -1,59 +0,0 @@
package com.gempukku.lotro.cards.set14.dwarven;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
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.cardtype.AbstractCompanion;
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Free
* Culture: Dwarven
* Twilight Cost: 3
* Type: Companion • Dwarf
* Strength: 7
* Vitality: 3
* Resistance: 6
* Game Text: Each of your other Dwarves and [GANDALF] Men is twilight cost -1. At the start of the regroup phase, you
* may discard a [DWARVEN] or [GANDALF] condition from play to discard a minion from play.
*/
public class Card14_001 extends AbstractCompanion {
public Card14_001() {
super(3, 7, 3, 6, Culture.DWARVEN, Race.DWARF, null, "Dain Ironfoot", "King Under the Mountain", true);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new TwilightCostModifier(self,
Filters.and(Filters.owner(self.getOwner()), Filters.not(self),
Filters.or(Race.DWARF, Filters.and(Culture.GANDALF, Race.MAN))), -1));
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.REGROUP)
&& PlayConditions.canDiscardFromPlay(self, game, CardType.CONDITION, Filters.or(Culture.DWARVEN, Culture.GANDALF))) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.CONDITION, Filters.or(Culture.DWARVEN, Culture.GANDALF)));
action.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.MINION));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,45 +0,0 @@
package com.gempukku.lotro.cards.set14.elven;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.SpotCondition;
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
import java.util.LinkedList;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Free
* Culture: Elven
* Twilight Cost: 3
* Type: Companion • Elf
* Strength: 7
* Vitality: 3
* Resistance: 6
* Game Text: Elrohir is twilight cost -2. Each time you play an [ELVEN] event during a skirmish involving Elladan
* or Elrohir, that event is twilight cost -2.
*/
public class Card14_002 extends AbstractCompanion {
public Card14_002() {
super(3, 7, 3, 6, Culture.ELVEN, Race.ELF, null, "Elladan", "Son of Elrond", true);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(
new TwilightCostModifier(self, Filters.name("Elrohir"), -2));
modifiers.add(
new TwilightCostModifier(self,
Filters.and(Filters.owner(self.getOwner()), CardType.EVENT, Culture.ELVEN),
new SpotCondition(Filters.or(Filters.name("Elladan"), Filters.name("Elrohir")), Filters.inSkirmish), -2));
return modifiers;
}
}

View File

@@ -1,54 +0,0 @@
package com.gempukku.lotro.cards.set14.elven;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Race;
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.cardtype.AbstractCompanion;
import com.gempukku.lotro.logic.effects.SnapshotAndApplyStrengthModifierUntilEndOfCurrentPhaseEffect;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Free
* Culture: Elven
* Twilight Cost: 3
* Type: Companion • Elf
* Strength: 7
* Vitality: 3
* Resistance: 6
* Game Text: Elladan is twilight cost -2. Each time you play an [ELVEN] event during a skirmish involving Elrohir
* or Elladan, each minion in that skirmish is strength -2.
*/
public class Card14_003 extends AbstractCompanion {
public Card14_003() {
super(3, 7, 3, 6, Culture.ELVEN, Race.ELF, null, "Elrohir", "Son of Elrond", true);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new TwilightCostModifier(self, Filters.name("Elladan"), -2));
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, Culture.ELVEN, CardType.EVENT)
&& PlayConditions.canSpot(game, Filters.or(Filters.name("Elrohir"), Filters.name("Elladan")), Filters.inSkirmish)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new SnapshotAndApplyStrengthModifierUntilEndOfCurrentPhaseEffect(self, -2, Filters.and(CardType.MINION, Filters.inSkirmish)));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,47 +0,0 @@
package com.gempukku.lotro.cards.set14.elven;
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
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.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Free
* Culture: Elven
* Twilight Cost: 2
* Type: Companion • Elf
* Strength: 6
* Vitality: 3
* Resistance: 6
* Game Text: At the start of each archery phase, if you can spot more minions than companions, each of your companions
* is an archer.
*/
public class Card14_004 extends AbstractCompanion {
public Card14_004() {
super(2, 6, 3, 6, Culture.ELVEN, Race.ELF, null, "Gildor Inglorion", "Of the House of Finrod", true);
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.ARCHERY)
&& Filters.countActive(game, CardType.MINION)
> Filters.countActive(game, CardType.COMPANION)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new KeywordModifier(self, Filters.and(Filters.owner(self.getOwner()), CardType.COMPANION), Keyword.ARCHER)));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,62 +0,0 @@
package com.gempukku.lotro.cards.set14.gandalf;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
import java.util.LinkedList;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Free
* Culture: Gandalf
* Twilight Cost: 2
* Type: Companion • Man
* Strength: 6
* Vitality: 3
* Resistance: 6
* Game Text: Each of your Dwarves and other [GANDALF] Men is strength +1. While you can spot more minions
* than companions, the fellowship archery total is +X, where X is the number of minions minus the number of companions.
*/
public class Card14_005 extends AbstractCompanion {
public Card14_005() {
super(2, 6, 3, 6, Culture.GANDALF, Race.MAN, null, "Brand", "King of Dale", true);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(
new StrengthModifier(self,
Filters.and(Filters.owner(self.getOwner()), Filters.not(self),
Filters.or(Race.DWARF, Filters.and(Culture.GANDALF, Race.MAN))), 1));
modifiers.add(
new ArcheryTotalModifier(self, Side.FREE_PEOPLE,
new Condition() {
@Override
public boolean isFullfilled(LotroGame game) {
return Filters.countActive(game, CardType.MINION)
> Filters.countActive(game, CardType.COMPANION);
}
}, new Evaluator() {
@Override
public int evaluateExpression(LotroGame game, PhysicalCard cardAffected) {
return Filters.countActive(game, CardType.MINION)
- Filters.countActive(game, CardType.COMPANION);
}
}
));
return modifiers;
}
}

View File

@@ -1,79 +0,0 @@
package com.gempukku.lotro.cards.set14.gandalf;
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.logic.effects.SelfExertEffect;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
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.ChooseAndDiscardCardsFromHandEffect;
import com.gempukku.lotro.logic.effects.HealCharactersEffect;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Free
* Culture: Gandalf
* Twilight Cost: 3
* Type: Companion • Man
* Strength: 4
* Vitality: 5
* Resistance: 6
* Game Text: At the start of each turn, heal Grimbeorn. At the start of the maneuver phase, you may exert Grimbeorn
* twice and discard a minion from hand to make Grimbeorn strength +X until the regroup phase, where X is that minion's
* strength.
*/
public class Card14_006 extends AbstractCompanion {
public Card14_006() {
super(3, 4, 5, 6, Culture.GANDALF, Race.MAN, null, "Grimbeorn", "Beorning Chieftain", true);
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.startOfTurn(game, effectResult)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new HealCharactersEffect(self, self));
return Collections.singletonList(action);
}
return null;
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.MANEUVER)
&& PlayConditions.canSelfExert(self, 2, game)
&& PlayConditions.canDiscardFromHand(game, playerId, 1, CardType.MINION)) {
final OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost(
new SelfExertEffect(action, self));
action.appendCost(
new SelfExertEffect(action, self));
action.appendCost(
new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, CardType.MINION) {
@Override
protected void cardsBeingDiscardedCallback(Collection<PhysicalCard> cardsBeingDiscarded) {
for (PhysicalCard physicalCard : cardsBeingDiscarded) {
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new StrengthModifier(self, self, physicalCard.getBlueprint().getStrength()), Phase.REGROUP));
}
}
});
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,38 +0,0 @@
package com.gempukku.lotro.cards.set14.gondor;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.modifiers.condition.LocationCondition;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Free
* Culture: Gondor
* Twilight Cost: 2
* Type: Companion • Man
* Strength: 5
* Vitality: 3
* Resistance: 5
* Game Text: Ranger. While the fellowship is at a forest or river site, Duilin is strength +3.
*/
public class Card14_007 extends AbstractCompanion {
public Card14_007() {
super(2, 5, 3, 5, Culture.GONDOR, Race.MAN, null, "Duilin", "Ranger from Blackroot Vale", true);
addKeyword(Keyword.RANGER);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new StrengthModifier(self, self, new LocationCondition(Filters.or(Keyword.FOREST, Keyword.RIVER)), 3));
}
}

View File

@@ -1,58 +0,0 @@
package com.gempukku.lotro.cards.set14.gondor;
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.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
import com.gempukku.lotro.logic.effects.SelfExertEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.SpotCondition;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Free
* Culture: Gondor
* Twilight Cost: 2
* Type: Companion • Man
* Strength: 6
* Vitality: 3
* Resistance: 5
* Game Text: While you can spot a mount, Duinhir is damage +1. Each time Duinhir wins a skirmish, if you can spot more
* minions than companions, you may exert him to discard a minion that has strength 7 or less.
*/
public class Card14_008 extends AbstractCompanion {
public Card14_008() {
super(2, 6, 3, 5, Culture.GONDOR, Race.MAN, null, "Duinhir", "Tall Man of Blackroot Vale", true);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new KeywordModifier(self, self, new SpotCondition(PossessionClass.MOUNT), Keyword.DAMAGE, 1));
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.winsSkirmish(game, effectResult, self)
&& Filters.countActive(game, CardType.MINION)
> Filters.countActive(game, CardType.COMPANION)
&& PlayConditions.canSelfExert(self, game)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost(
new SelfExertEffect(action, self));
action.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.MINION, Filters.lessStrengthThan(8)));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,55 +0,0 @@
package com.gempukku.lotro.cards.set14.gondor;
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.common.*;
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.effects.ChooseAndDiscardCardsFromHandEffect;
import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Free
* Culture: Gondor
* Twilight Cost: 3
* Type: Companion • Man
* Strength: 7
* Vitality: 3
* Resistance: 6
* Game Text: Ranger. While the Ring-bearer has resistance 9 or more, Halbarad's twilight cost is -1. At the start of
* the maneuver phase, you may discard a [GONDOR] card from hand to heal a [GONDOR] companion.
*/
public class Card14_009 extends AbstractCompanion {
public Card14_009() {
super(3, 7, 3, 6, Culture.GONDOR, Race.MAN, null, "Halbarad", "Ranger of the North", true);
addKeyword(Keyword.RANGER);
}
@Override
public int getTwilightCostModifier(LotroGame game, PhysicalCard self) {
if (game.getModifiersQuerying().getResistance(game, game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId())) >= 9)
return -1;
return 0;
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.MANEUVER)
&& PlayConditions.canDiscardFromHand(game, playerId, 1, Culture.GONDOR)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, Culture.GONDOR));
action.appendEffect(
new ChooseAndHealCharactersEffect(action, playerId, Culture.GONDOR, CardType.COMPANION));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,52 +0,0 @@
package com.gempukku.lotro.cards.set14.men;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.effects.CancelEventEffect;
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
import com.gempukku.lotro.logic.timing.results.PlayEventResult;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Race;
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.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Shadow
* Culture: Man
* Twilight Cost: 3
* Type: Minion • Man
* Strength: 8
* Vitality: 2
* Site: 4
* Game Text: Response: If the Free Peoples player plays an event, spot another [MEN] Man and discard this minion from
* play to cancel that event.
*/
public class Card14_010 extends AbstractMinion {
public Card14_010() {
super(3, 8, 2, 4, Race.MAN, Culture.MEN, "Furious Hillman");
}
@Override
public List<? extends ActivateCardAction> getOptionalInPlayAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, Filters.owner(game.getGameState().getCurrentPlayerId()), CardType.EVENT)
&& PlayConditions.canSelfDiscard(self, game)
&& PlayConditions.canSpot(game, Filters.not(self), Culture.MEN, Race.MAN)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfDiscardEffect(self));
action.appendEffect(
new CancelEventEffect(self, (PlayEventResult) effectResult));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,61 +0,0 @@
package com.gempukku.lotro.cards.set14.men;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.effects.AddUntilEndOfTurnModifierEffect;
import com.gempukku.lotro.logic.modifiers.MoveLimitModifier;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
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.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Shadow
* Culture: Man
* Twilight Cost: 3
* Type: Minion • Man
* Strength: 8
* Vitality: 2
* Site: 4
* Game Text: At the start of the regroup phase, if you can spot more Man characters than any other race, make the move
* limit -1 this turn.
*/
public class Card14_011 extends AbstractMinion {
public Card14_011() {
super(3, 8, 2, 4, Race.MAN, Culture.MEN, "Swarming Hillman");
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.REGROUP)) {
if (!hasMoreOrEqualCharactersInAnyRaceThanMen(game)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddUntilEndOfTurnModifierEffect(
new MoveLimitModifier(self, -1)));
return Collections.singletonList(action);
}
}
return null;
}
private boolean hasMoreOrEqualCharactersInAnyRaceThanMen(LotroGame game) {
int menCount = Filters.countActive(game, Filters.character, Race.MAN);
for (Race race : Race.values()) {
if (race != Race.MAN) {
if (Filters.countActive(game, Filters.character, race) >= menCount)
return true;
}
}
return false;
}
}

View File

@@ -1,53 +0,0 @@
package com.gempukku.lotro.cards.set14.orc;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.effects.RemoveTwilightEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromDiscardEffect;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
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.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Shadow
* Culture: Orc
* Twilight Cost: 3
* Type: Minion • Half•troll
* Strength: 8
* Vitality: 2
* Site: 4
* Game Text: At the start of each assignment phase, if you can spot more companions than minions, you may remove (2)
* to play an [ORC] Orc from your discard pile.
*/
public class Card14_012 extends AbstractMinion {
public Card14_012() {
super(3, 8, 2, 4, Race.HALF_TROLL, Culture.ORC, "Half-troll of Far Harad");
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.ASSIGNMENT)
&& Filters.countActive(game, CardType.COMPANION)
> Filters.countActive(game, CardType.MINION)
&& PlayConditions.canPlayFromDiscard(playerId, game, 2, 0, Culture.ORC, Race.ORC)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost(
new RemoveTwilightEffect(2));
action.appendEffect(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.ORC, Race.ORC));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,29 +0,0 @@
package com.gempukku.lotro.cards.set14.orc;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
/**
* Set: Expanded Middle-earth
* Side: Shadow
* Culture: Orc
* Twilight Cost: 4
* Type: Minion • Half•troll
* Strength: 9
* Vitality: 3
* Site: 4
* Game Text: Ambush (1). Damage +1. Fierce. Lurker. Muster. Toil 2.
*/
public class Card14_013 extends AbstractMinion {
public Card14_013() {
super(4, 9, 3, 4, Race.HALF_TROLL, Culture.ORC, "Horror of Harad", null, true);
addKeyword(Keyword.AMBUSH, 1);
addKeyword(Keyword.DAMAGE, 1);
addKeyword(Keyword.FIERCE);
addKeyword(Keyword.LURKER);
addKeyword(Keyword.MUSTER);
addKeyword(Keyword.TOIL, 2);
}
}

View File

@@ -1,46 +0,0 @@
package com.gempukku.lotro.cards.set14.uruk_hai;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.timing.TriggerConditions;
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.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Shadow
* Culture: Uruk-hai
* Twilight Cost: 3
* Type: Minion • Uruk-Hai
* Strength: 8
* Vitality: 2
* Site: 5
* Game Text: Damage +1. At the start of each assignment phase, you may heal an Uruk-hai for each companion
* you can spot.
*/
public class Card14_014 extends AbstractMinion {
public Card14_014() {
super(3, 8, 2, 5, Race.URUK_HAI, Culture.URUK_HAI, "Uruk-hai Healer");
addKeyword(Keyword.DAMAGE, 1);
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.ASSIGNMENT)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
int countCompanions = Filters.countActive(game, CardType.COMPANION);
for (int i = 0; i < countCompanions; i++)
action.appendEffect(
new ChooseAndHealCharactersEffect(action, playerId, 1, 1, Race.URUK_HAI));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,65 +0,0 @@
package com.gempukku.lotro.cards.set14.uruk_hai;
import com.gempukku.lotro.logic.cardtype.AbstractMinion;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.effects.AddUntilEndOfTurnModifierEffect;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
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.decisions.MultipleChoiceAwaitingDecision;
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
import com.gempukku.lotro.logic.modifiers.KeywordModifier;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: Expanded Middle-earth
* Side: Shadow
* Culture: Uruk-hai
* Twilight Cost: 3
* Type: Minion • Uruk-Hai
* Strength: 8
* Vitality: 2
* Site: 5
* Game Text: Damage +1. When you play this, choose one of the following keywords: battleground, mountain, plains,
* or underground. The fellowship's current site gains that keyword until the end of the turn.
*/
public class Card14_015 extends AbstractMinion {
public Card14_015() {
super(3, 8, 2, 5, Race.URUK_HAI, Culture.URUK_HAI, "Uruk-hai Scout");
addKeyword(Keyword.DAMAGE, 1);
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(final LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, self)) {
final RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new PlayoutDecisionEffect(self.getOwner(),
new MultipleChoiceAwaitingDecision(1, "Choose type", new String[]{"battleground", "mountain", "plains", "underground"}) {
@Override
protected void validDecisionMade(int index, String result) {
Keyword keyword;
if (index == 0)
keyword = Keyword.BATTLEGROUND;
else if (index == 1)
keyword = Keyword.MOUNTAIN;
else if (index == 2)
keyword = Keyword.PLAINS;
else
keyword = Keyword.UNDERGROUND;
action.appendEffect(
new AddUntilEndOfTurnModifierEffect(
new KeywordModifier(self, game.getGameState().getCurrentSite(), keyword)));
}
}));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -73,7 +73,8 @@
{
"setId":"14",
"setName":"Expanded Middle-earth",
"rarityFile":"/set14-rarity.txt"
"rarityFile": "/set14-rarity.txt",
"needsLoading": false
},
{
"setId":"15",

View File

@@ -14,6 +14,8 @@ public class TriggerEffectProcessor implements EffectProcessor {
FieldUtils.validateAllowedFields(value, "trigger", "optional", "condition", "cost", "effect");
final JSONObject[] triggerArray = FieldUtils.getObjectArray(value.get("trigger"), "trigger");
if (triggerArray.length == 0)
throw new InvalidCardDefinitionException("Trigger effect without trigger definition");
final boolean optional = FieldUtils.getBoolean(value.get("optional"), "optional", false);
for (JSONObject trigger : triggerArray) {

View File

@@ -4,6 +4,7 @@ import com.gempukku.lotro.cards.build.*;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
@@ -173,6 +174,17 @@ public class ValueResolver {
});
}
};
} else if (type.equalsIgnoreCase("printedStrengthFromMemory")) {
FieldUtils.validateAllowedFields(object, "memory");
final String memory = FieldUtils.getString(object.get("memory"), "memory");
return actionContext -> (Evaluator) (game, cardAffected) -> {
int result = 0;
for (PhysicalCard physicalCard : actionContext.getCardsFromMemory(memory)) {
result += physicalCard.getBlueprint().getStrength();
}
return result;
};
} else if (type.equalsIgnoreCase("subtract")) {
FieldUtils.validateAllowedFields(object, "firstNumber", "secondNumber");
final ValueSource firstNumber = ValueResolver.resolveEvaluator(object.get("firstNumber"), 0, environment);
@@ -192,6 +204,20 @@ public class ValueResolver {
}
return total;
};
} else if (type.equals("maxOfRaces")) {
FieldUtils.validateAllowedFields(object, "filter");
final String filter = FieldUtils.getString(object.get("filter"), "filter");
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
return actionContext -> (game, cardAffected) -> {
int result = 0;
final Filterable filterable = filterableSource.getFilterable(actionContext);
for (Race race : Race.values())
result = Math.max(result, Filters.countSpottable(game, race, filterable));
return result;
};
}
throw new InvalidCardDefinitionException("Unrecognized type of an evaluator " + type);
}

View File

@@ -128,6 +128,16 @@ public class FilterFactory {
int amount = Integer.parseInt(parameter);
return (actionContext) -> Filters.maxResistance(amount - 1);
});
parameterFilters.put("resistanceMoreThan",
(parameter, environment) -> {
int amount = Integer.parseInt(parameter);
return (actionContext) -> Filters.minResistance(amount + 1);
});
parameterFilters.put("strengthLessThan",
(parameter, environment) -> {
int amount = Integer.parseInt(parameter);
return (actionContext) -> Filters.lessStrengthThan(amount);
});
parameterFilters.put("not",
(parameter, environment) -> {
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(parameter, environment);

View File

@@ -30,6 +30,7 @@ public class ModifierSourceFactory {
modifierProducers.put("modifysitenumber", new ModifySiteNumber());
modifierProducers.put("cantusespecialabilities", new CantUseSpecialAbilities());
modifierProducers.put("skipphase", new SkipPhase());
modifierProducers.put("modifymovelimit", new ModifyMoveLimit());
}
public ModifierSource getModifier(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {

View File

@@ -0,0 +1,25 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
import com.gempukku.lotro.cards.build.ModifierSource;
import com.gempukku.lotro.cards.build.ValueSource;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
import com.gempukku.lotro.logic.modifiers.MoveLimitModifier;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
import org.json.simple.JSONObject;
public class ModifyMoveLimit implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "amount");
final ValueSource valueSource = ValueResolver.resolveEvaluator(object.get("amount"), 1, environment);
return (actionContext) -> {
final Evaluator evaluator = valueSource.getEvaluator(actionContext);
return new MoveLimitModifier(actionContext.getSource(), evaluator.evaluateExpression(actionContext.getGame(), null));
};
}
}

View File

@@ -0,0 +1,25 @@
package com.gempukku.lotro.cards.build.field.effect.requirement;
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
import com.gempukku.lotro.cards.build.Requirement;
import com.gempukku.lotro.cards.build.ValueSource;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
import org.json.simple.JSONObject;
public class IsMore implements RequirementProducer {
@Override
public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "firstNumber", "secondNumber");
final ValueSource firstNumber = ValueResolver.resolveEvaluator(object.get("firstNumber"), 0, environment);
final ValueSource secondNumber = ValueResolver.resolveEvaluator(object.get("secondNumber"), 0, environment);
return actionContext -> {
final int first = firstNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null);
final int second = secondNumber.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null);
return first > second;
};
}
}

View File

@@ -29,6 +29,7 @@ public class RequirementFactory {
requirementProducers.put("fierceskirmish", new FierceSkirmish());
requirementProducers.put("movecountminimum", new MoveCountMinimum());
requirementProducers.put("wasassignedtoskirmish", new WasAssignedToSkirmish());
requirementProducers.put("ismore", new IsMore());
}
public Requirement getRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {