Reworked all modifiers to use them both as static effects, as well as results of actions
This commit is contained in:
@@ -53,9 +53,12 @@
|
||||
"filter": "dwarf"
|
||||
},
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self,inSkirmishAgainst(orc)",
|
||||
"amount": 2
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self,inSkirmishAgainst(orc)",
|
||||
"amount": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"1_12": {
|
||||
@@ -128,9 +131,12 @@
|
||||
"signet": "aragorn",
|
||||
"keyword": "ranger",
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"amount": 3,
|
||||
"filter": "self,inSkirmishAgainst(nazgul)"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"amount": 3,
|
||||
"filter": "self,inSkirmishAgainst(nazgul)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"1_38": {
|
||||
@@ -167,11 +173,14 @@
|
||||
"filter": "elf"
|
||||
},
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"amount": 2,
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "siteBlock(fellowship),or(siteNumber(6),siteNumber(7),siteNumber(8))"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"amount": 2,
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "siteBlock(fellowship),or(siteNumber(6),siteNumber(7),siteNumber(8))"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -219,9 +228,12 @@
|
||||
"signet": "gandalf",
|
||||
"keyword": "archer",
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self,inSkirmishAgainst(nazgul)",
|
||||
"amount": 3
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self,inSkirmishAgainst(nazgul)",
|
||||
"amount": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
"1_53": {
|
||||
@@ -314,9 +326,12 @@
|
||||
"keyword": "tracker",
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifyRoamingPenalty",
|
||||
"filter": "culture(sauron),minion,your",
|
||||
"amount": -1
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyRoamingPenalty",
|
||||
"filter": "culture(sauron),minion,your",
|
||||
"amount": -1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "activated",
|
||||
@@ -381,9 +396,12 @@
|
||||
"resistance": 6,
|
||||
"signet": "aragorn",
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self,hasAttached(weapon)",
|
||||
"amount": 2
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self,hasAttached(weapon)",
|
||||
"amount": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"1_306": {
|
||||
@@ -398,8 +416,11 @@
|
||||
"resistance": 6,
|
||||
"signet": "frodo",
|
||||
"effects": {
|
||||
"type": "opponentMayNotDiscard",
|
||||
"filter": "your,culture(shire),tale"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "opponentMayNotDiscard",
|
||||
"filter": "your,culture(shire),tale"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,13 +13,16 @@
|
||||
"damage+1"
|
||||
],
|
||||
"effects": {
|
||||
"type": "archeryTotal",
|
||||
"side": "shadow",
|
||||
"condition": {
|
||||
"type": "controlsSite",
|
||||
"player": "owner"
|
||||
},
|
||||
"amount": 1
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "archeryTotal",
|
||||
"side": "shadow",
|
||||
"condition": {
|
||||
"type": "controlsSite",
|
||||
"player": "owner"
|
||||
},
|
||||
"amount": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"4_218": {
|
||||
@@ -37,31 +40,40 @@
|
||||
],
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifyStrength",
|
||||
"condition": {
|
||||
"type": "canSpotBurdens",
|
||||
"amount": 4
|
||||
},
|
||||
"filter": "self",
|
||||
"amount": 5
|
||||
},
|
||||
{
|
||||
"type": "addKeyword",
|
||||
"condition": {
|
||||
"type": "canSpotBurdens",
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"condition": {
|
||||
"type": "canSpotBurdens",
|
||||
"amount": 4
|
||||
},
|
||||
"filter": "self",
|
||||
"amount": 5
|
||||
},
|
||||
"filter": "self",
|
||||
"keyword": "fierce"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "addKeyword",
|
||||
"condition": {
|
||||
"type": "canSpotBurdens",
|
||||
"amount": 6
|
||||
},
|
||||
"filter": "self",
|
||||
"keyword": "damage+1"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"condition": {
|
||||
"type": "canSpotBurdens",
|
||||
"amount": 5
|
||||
},
|
||||
"filter": "self",
|
||||
"keyword": "fierce"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"condition": {
|
||||
"type": "canSpotBurdens",
|
||||
"amount": 6
|
||||
},
|
||||
"filter": "self",
|
||||
"keyword": "damage+1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -301,15 +301,18 @@
|
||||
"type": "condition",
|
||||
"keyword": "support area",
|
||||
"effects": {
|
||||
"type": "addKeyword",
|
||||
"filter": "dwarf",
|
||||
"keyword": "damage",
|
||||
"amount": {
|
||||
"type": "limit",
|
||||
"value": 2,
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"filter": "dwarf",
|
||||
"keyword": "damage",
|
||||
"amount": {
|
||||
"type": "countStacked",
|
||||
"on": "self"
|
||||
"type": "limit",
|
||||
"value": 2,
|
||||
"amount": {
|
||||
"type": "countStacked",
|
||||
"on": "self"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -321,15 +324,18 @@
|
||||
"type": "condition",
|
||||
"keyword": "support area",
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "self,hasStacked(culture(dwarven))"
|
||||
},
|
||||
"filter": "dwarf",
|
||||
"amount": {
|
||||
"type": "forEachVitality",
|
||||
"over": 3
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "self,hasStacked(culture(dwarven))"
|
||||
},
|
||||
"filter": "dwarf",
|
||||
"amount": {
|
||||
"type": "forEachVitality",
|
||||
"over": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -446,17 +452,23 @@
|
||||
"amount": -1
|
||||
},
|
||||
{
|
||||
"type": "modifyStrength",
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "or(mountain,underground)"
|
||||
},
|
||||
"amount": 2
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "or(mountain,underground)"
|
||||
},
|
||||
"amount": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "canttakemorewoundsthan",
|
||||
"phase": "skirmish",
|
||||
"amount": 1
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "canttakemorewoundsthan",
|
||||
"phase": "skirmish",
|
||||
"amount": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -471,9 +483,12 @@
|
||||
"target": "dwarf",
|
||||
"effects": [
|
||||
{
|
||||
"type": "addKeyword",
|
||||
"filter": "bearer,name(Gimli)",
|
||||
"keyword": "damage+1"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"filter": "bearer,name(Gimli)",
|
||||
"keyword": "damage+1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
@@ -503,13 +518,16 @@
|
||||
"keyword": "damage+1",
|
||||
"effects": [
|
||||
{
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "name(Gimli)"
|
||||
},
|
||||
"filter": "self",
|
||||
"type": "modifyStrength",
|
||||
"amount": 1
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "name(Gimli)"
|
||||
},
|
||||
"filter": "self",
|
||||
"type": "modifyStrength",
|
||||
"amount": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"condition": {
|
||||
@@ -797,13 +815,16 @@
|
||||
"type": "condition",
|
||||
"keyword": "support area",
|
||||
"effects": {
|
||||
"type": "cantBeExerted",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "self,hasStackedCount(3,any)"
|
||||
},
|
||||
"filter": "dwarf",
|
||||
"by": "side(shadow)"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "cantBeExerted",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "self,hasStackedCount(3,any)"
|
||||
},
|
||||
"filter": "dwarf",
|
||||
"by": "side(shadow)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_30": {
|
||||
@@ -845,12 +866,15 @@
|
||||
"resistance": 6,
|
||||
"keyword": "damage+1",
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self",
|
||||
"amount": 2,
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "culture(dwarven),condition,hasStackedCount(3,culture(dwarven))"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self",
|
||||
"amount": 2,
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "culture(dwarven),condition,hasStackedCount(3,culture(dwarven))"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -38,12 +38,15 @@
|
||||
"resistance": 8,
|
||||
"keyword": "ranger",
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "or(river,forest)"
|
||||
},
|
||||
"amount": 3
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "or(river,forest)"
|
||||
},
|
||||
"amount": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_35": {
|
||||
@@ -354,9 +357,12 @@
|
||||
"possession": "ranged weapon",
|
||||
"target": "elf",
|
||||
"effects": {
|
||||
"type": "addKeyword",
|
||||
"filter": "bearer",
|
||||
"keyword": "archer"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"filter": "bearer",
|
||||
"keyword": "archer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_43": {
|
||||
@@ -542,8 +548,11 @@
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"type": "cantBeOverwhelmedMultiplier",
|
||||
"filter": "self,inSkirmishAgainst(nazgul)"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "cantBeOverwhelmedMultiplier",
|
||||
"filter": "self,inSkirmishAgainst(nazgul)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "activated",
|
||||
@@ -606,14 +615,20 @@
|
||||
"target": "elf",
|
||||
"effects": [
|
||||
{
|
||||
"type": "addKeyword",
|
||||
"filter": "bearer,name(Arwen)",
|
||||
"keyword": "damage+1"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"filter": "bearer,name(Arwen)",
|
||||
"keyword": "damage+1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "modifyStrength",
|
||||
"filter": "bearer,inSkirmishAgainst(nazgul)",
|
||||
"amount": 2
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "bearer,inSkirmishAgainst(nazgul)",
|
||||
"amount": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -746,9 +761,12 @@
|
||||
"strength": 1,
|
||||
"target": "name(Legolas)",
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "wounded,minion,inSkirmishAgainst(bearer)",
|
||||
"amount": -2
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "wounded,minion,inSkirmishAgainst(bearer)",
|
||||
"amount": -2
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_55": {
|
||||
|
||||
@@ -211,11 +211,14 @@
|
||||
"vitality": 4,
|
||||
"resistance": 8,
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self",
|
||||
"amount": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "hobbit,companion"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "self",
|
||||
"amount": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "hobbit,companion"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -320,14 +323,20 @@
|
||||
"target": "name(Gandalf)",
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifyStrength",
|
||||
"filter": "name(Gandalf),inSkirmishAgainst(or(orc,goblin))",
|
||||
"amount": 2
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "name(Gandalf),inSkirmishAgainst(or(orc,goblin))",
|
||||
"amount": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "addKeyword",
|
||||
"filter": "name(Gandalf),inSkirmishAgainst(or(orc,goblin))",
|
||||
"keyword": "damage+1"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"filter": "name(Gandalf),inSkirmishAgainst(or(orc,goblin))",
|
||||
"keyword": "damage+1"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -341,10 +350,13 @@
|
||||
"target": "name(Gandalf)",
|
||||
"effects": [
|
||||
{
|
||||
"type": "cantTakeMoreWoundsThan",
|
||||
"filter": "name(Gandalf)",
|
||||
"amount": 1,
|
||||
"phase": "skirmish"
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "cantTakeMoreWoundsThan",
|
||||
"filter": "name(Gandalf)",
|
||||
"amount": 1,
|
||||
"phase": "skirmish"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
@@ -577,19 +589,22 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "modifyCost",
|
||||
"condition": [
|
||||
{
|
||||
"type": "canSpot",
|
||||
"filter": "name(Gandalf)"
|
||||
},
|
||||
{
|
||||
"type": "haveInitiative",
|
||||
"side": "free people"
|
||||
}
|
||||
],
|
||||
"filter": "side(free people),or(artifact,condition,possession)",
|
||||
"amount": -1
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyCost",
|
||||
"condition": [
|
||||
{
|
||||
"type": "canSpot",
|
||||
"filter": "name(Gandalf)"
|
||||
},
|
||||
{
|
||||
"type": "haveInitiative",
|
||||
"side": "free people"
|
||||
}
|
||||
],
|
||||
"filter": "side(free people),or(artifact,condition,possession)",
|
||||
"amount": -1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
@@ -604,6 +619,119 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"40_81": {
|
||||
"title": "*Might of the Maiar",
|
||||
"culture": "gandalf",
|
||||
"cost": 1,
|
||||
"type": "condition",
|
||||
"strength": 1,
|
||||
"keyword": "spell",
|
||||
"target": "name(Gandalf)",
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"filter": "bearer",
|
||||
"keyword": "damage+1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "losesInitiative",
|
||||
"side": "free people"
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "discard",
|
||||
"filter": "self"
|
||||
},
|
||||
{
|
||||
"type": "modifyStrength",
|
||||
"filter": "all(name(Gandalf))",
|
||||
"amount": -2,
|
||||
"until": "start(regroup)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"40_82": {
|
||||
"title": "*Mithrandir's Touch",
|
||||
"culture": "gandalf",
|
||||
"cost": 1,
|
||||
"type": "condition",
|
||||
"vitality": 1,
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "name(Gandalf)"
|
||||
},
|
||||
"target": "unbound,companion,not(name(Gandalf))",
|
||||
"effects": {
|
||||
"type": "activatedTrigger",
|
||||
"condition": {
|
||||
"type": "phase",
|
||||
"phase": "skirmish"
|
||||
},
|
||||
"trigger": {
|
||||
"type": "aboutToTakeWound",
|
||||
"filter": "bearer"
|
||||
},
|
||||
"cost": {
|
||||
"type": "discardFromHand",
|
||||
"forced": false,
|
||||
"count": 2,
|
||||
"filter": "choose(culture(gandalf))"
|
||||
},
|
||||
"effect": {
|
||||
"type": "preventWound",
|
||||
"filter": "choose(bearer)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_83": {
|
||||
"title": "My Brave Hobbits",
|
||||
"culture": "gandalf",
|
||||
"cost": 2,
|
||||
"type": "event",
|
||||
"keyword": [
|
||||
"maneuver",
|
||||
"spell"
|
||||
],
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"count": 2,
|
||||
"filter": "hobbit,companion"
|
||||
},
|
||||
"effects": {
|
||||
"type": "event",
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "choose(name(Gandalf))",
|
||||
"times": 2
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "addModifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"amount": 3,
|
||||
"filter": "hobbit,companion"
|
||||
},
|
||||
"until": "start(regroup)"
|
||||
},
|
||||
{
|
||||
"type": "addModifier",
|
||||
"modifier": {
|
||||
"type": "cantTakeMoreWoundsThan",
|
||||
"filter": "hobbit,companion"
|
||||
},
|
||||
"until": "start(regroup)"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"40_86": {
|
||||
"title": "Protector of the West",
|
||||
"culture": "gandalf",
|
||||
|
||||
@@ -14,11 +14,14 @@
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifyStrength",
|
||||
"amount": 2,
|
||||
"condition": {
|
||||
"type": "cantSpotFPCultures",
|
||||
"amount": 3
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"amount": 2,
|
||||
"condition": {
|
||||
"type": "cantSpotFPCultures",
|
||||
"amount": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -154,13 +154,16 @@
|
||||
"vitality": 4,
|
||||
"resistance": 8,
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "forest"
|
||||
},
|
||||
"filter": "self",
|
||||
"amount": 2
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "forest"
|
||||
},
|
||||
"filter": "self",
|
||||
"amount": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_265": {
|
||||
|
||||
@@ -9,9 +9,12 @@
|
||||
"strength": 2,
|
||||
"target": "nazgul",
|
||||
"effects": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "bearer,inSkirmishAgainst(companion,resistanceLessThan(4))",
|
||||
"amount": 2
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "bearer,inSkirmishAgainst(companion,resistanceLessThan(4))",
|
||||
"amount": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_211": {
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.build;
|
||||
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppenderFactory;
|
||||
import com.gempukku.lotro.cards.build.field.effect.filter.FilterFactory;
|
||||
import com.gempukku.lotro.cards.build.field.effect.modifier.ModifierSourceFactory;
|
||||
import com.gempukku.lotro.cards.build.field.effect.requirement.RequirementFactory;
|
||||
import com.gempukku.lotro.cards.build.field.effect.trigger.TriggerCheckerFactory;
|
||||
|
||||
@@ -13,4 +14,6 @@ public interface CardGenerationEnvironment {
|
||||
RequirementFactory getRequirementFactory();
|
||||
|
||||
TriggerCheckerFactory getTriggerCheckerFactory();
|
||||
|
||||
ModifierSourceFactory getModifierSourceFactory();
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.gempukku.lotro.cards.build;
|
||||
import com.gempukku.lotro.cards.build.field.*;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppenderFactory;
|
||||
import com.gempukku.lotro.cards.build.field.effect.filter.FilterFactory;
|
||||
import com.gempukku.lotro.cards.build.field.effect.modifier.ModifierSourceFactory;
|
||||
import com.gempukku.lotro.cards.build.field.effect.requirement.RequirementFactory;
|
||||
import com.gempukku.lotro.cards.build.field.effect.trigger.TriggerCheckerFactory;
|
||||
import com.gempukku.lotro.game.LotroCardBlueprint;
|
||||
@@ -19,6 +20,7 @@ public class LotroCardBlueprintBuilder implements CardGenerationEnvironment {
|
||||
private FilterFactory filterFactory = new FilterFactory();
|
||||
private RequirementFactory requirementFactory = new RequirementFactory();
|
||||
private TriggerCheckerFactory triggerCheckerFactory = new TriggerCheckerFactory();
|
||||
private ModifierSourceFactory modifierSourceFactory = new ModifierSourceFactory();
|
||||
|
||||
public LotroCardBlueprintBuilder() {
|
||||
fieldProcessors.put("title", new TitleFieldProcessor());
|
||||
@@ -81,4 +83,9 @@ public class LotroCardBlueprintBuilder implements CardGenerationEnvironment {
|
||||
public TriggerCheckerFactory getTriggerCheckerFactory() {
|
||||
return triggerCheckerFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModifierSourceFactory getModifierSourceFactory() {
|
||||
return modifierSourceFactory;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.FieldProcessor;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.field.effect.*;
|
||||
import com.gempukku.lotro.cards.build.field.effect.modifier.*;
|
||||
import com.gempukku.lotro.cards.build.field.effect.modifier.Modifier;
|
||||
import com.gempukku.lotro.cards.build.field.effect.modifier.ModifyOwnCost;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -19,17 +20,9 @@ public class EffectFieldProcessor implements FieldProcessor {
|
||||
effectProcessors.put("activatedtrigger", new ActivatedTriggerEffectProcessor());
|
||||
effectProcessors.put("activated", new ActivatedEffectProcessor());
|
||||
effectProcessors.put("event", new EventEffectProcessor());
|
||||
effectProcessors.put("modifystrength", new ModifyStrength());
|
||||
effectProcessors.put("modifyroamingpenalty", new ModifyRoamingPenalty());
|
||||
effectProcessors.put("addkeyword", new AddKeyword());
|
||||
effectProcessors.put("archerytotal", new ArcheryTotal());
|
||||
effectProcessors.put("opponentmaynotdiscard", new OpponentMayNotDiscard());
|
||||
effectProcessors.put("modifyowncost", new ModifyOwnCost());
|
||||
effectProcessors.put("canttakemorewoundsthan", new CantTakeMoreWoundsThan());
|
||||
effectProcessors.put("cantbeexerted", new CantBeExerted());
|
||||
effectProcessors.put("extracost", new ExtraCost());
|
||||
effectProcessors.put("cantbeoverwhelmedmultiplier", new CantBeOverwhelmedMultiplier());
|
||||
effectProcessors.put("modifycost", new ModifyCost());
|
||||
effectProcessors.put("modifier", new Modifier());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -73,6 +73,7 @@ public class EffectAppenderFactory {
|
||||
effectAppenderProducers.put("canparticipateinarcheryfireandskirmishes", new CanParticipateInArcheryFireAndSkirmishes());
|
||||
effectAppenderProducers.put("revealrandomcardsfromhand", new RevealRandomCardsFromHand());
|
||||
effectAppenderProducers.put("putcardsfromdeckintohand", new PutCardsFromDeckIntoHand());
|
||||
effectAppenderProducers.put("addmodifier", new AddModifier());
|
||||
}
|
||||
|
||||
public EffectAppender getEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.appender;
|
||||
|
||||
import com.gempukku.lotro.cards.build.ActionContext;
|
||||
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.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.TimeResolver;
|
||||
import com.gempukku.lotro.logic.actions.CostToEffectAction;
|
||||
import com.gempukku.lotro.logic.effects.AddUntilModifierEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class AddModifier implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "modifier", "until");
|
||||
|
||||
final JSONObject modifierObj = (JSONObject) effectObject.get("modifier");
|
||||
final TimeResolver.Time until = TimeResolver.resolveTime(effectObject.get("until"), "end(current)");
|
||||
|
||||
ModifierSource modifierSource = environment.getModifierSourceFactory().getModifier(modifierObj, environment);
|
||||
|
||||
return new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) {
|
||||
final Modifier modifier = modifierSource.getModifier(actionContext);
|
||||
return new AddUntilModifierEffect(modifier, until);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
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.Keyword;
|
||||
@@ -10,14 +9,14 @@ import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class AddKeyword implements EffectProcessor {
|
||||
public class AddKeyword implements ModifierSourceProducer {
|
||||
@Override
|
||||
public void processEffect(JSONObject effectObject, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "filter", "condition", "keyword", "amount");
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "filter", "condition", "keyword", "amount");
|
||||
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(effectObject.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "self");
|
||||
final String keywordString = FieldUtils.getString(effectObject.get("keyword"), "keyword");
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter", "self");
|
||||
final String keywordString = FieldUtils.getString(object.get("keyword"), "keyword");
|
||||
|
||||
final String[] keywordSplit = keywordString.split("\\+");
|
||||
Keyword keyword = FieldUtils.getEnum(Keyword.class, keywordSplit[0], "keyword");
|
||||
@@ -25,13 +24,12 @@ public class AddKeyword implements EffectProcessor {
|
||||
if (keywordSplit.length == 2)
|
||||
value = Integer.parseInt(keywordSplit[1]);
|
||||
|
||||
final ValueSource amount = ValueResolver.resolveEvaluator(effectObject.get("amount"), value, environment);
|
||||
final ValueSource amount = ValueResolver.resolveEvaluator(object.get("amount"), value, environment);
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||
|
||||
blueprint.appendInPlayModifier(
|
||||
new ModifierSource() {
|
||||
return new ModifierSource() {
|
||||
@Override
|
||||
public Modifier getModifier(ActionContext actionContext) {
|
||||
final Evaluator evaluator = amount.getEvaluator(actionContext);
|
||||
@@ -39,6 +37,6 @@ public class AddKeyword implements EffectProcessor {
|
||||
filterableSource.getFilterable(actionContext),
|
||||
new RequirementCondition(requirements, actionContext), keyword, evaluator);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +1,30 @@
|
||||
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.common.Side;
|
||||
import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class ArcheryTotal implements EffectProcessor {
|
||||
public class ArcheryTotal implements ModifierSourceProducer {
|
||||
@Override
|
||||
public void processEffect(JSONObject effectObject, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "amount", "condition", "side");
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "amount", "condition", "side");
|
||||
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(effectObject.get("condition"), "condition");
|
||||
final int amount = FieldUtils.getInteger(effectObject.get("amount"), "amount");
|
||||
final Side side = FieldUtils.getEnum(Side.class, effectObject.get("side"), "side");
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||
final int amount = FieldUtils.getInteger(object.get("amount"), "amount");
|
||||
final Side side = FieldUtils.getEnum(Side.class, object.get("side"), "side");
|
||||
|
||||
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||
|
||||
blueprint.appendInPlayModifier(
|
||||
new ModifierSource() {
|
||||
return new ModifierSource() {
|
||||
@Override
|
||||
public Modifier getModifier(ActionContext actionContext) {
|
||||
return new ArcheryTotalModifier(actionContext.getSource(), side,
|
||||
new RequirementCondition(requirements, actionContext),
|
||||
amount);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,31 +1,28 @@
|
||||
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.logic.modifiers.CantExertWithCardModifier;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class CantBeExerted implements EffectProcessor {
|
||||
public class CantBeExerted implements ModifierSourceProducer {
|
||||
@Override
|
||||
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(value, "filter", "condition", "by");
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "filter", "condition", "by");
|
||||
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(value.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(value.get("filter"), "filter", "self");
|
||||
final String byFilter = FieldUtils.getString(value.get("by"), "by", "any");
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter", "self");
|
||||
final String byFilter = FieldUtils.getString(object.get("by"), "by", "any");
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
final FilterableSource byFilterableSource = environment.getFilterFactory().generateFilter(byFilter, environment);
|
||||
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||
|
||||
blueprint.appendInPlayModifier(
|
||||
(actionContext) -> {
|
||||
return (actionContext) -> {
|
||||
return new CantExertWithCardModifier(actionContext.getSource(),
|
||||
filterableSource.getFilterable(actionContext),
|
||||
new RequirementCondition(requirements, actionContext),
|
||||
byFilterableSource.getFilterable(actionContext));
|
||||
});
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,31 +1,28 @@
|
||||
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.common.Filterable;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.OverwhelmedByMultiplierModifier;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class CantBeOverwhelmedMultiplier implements EffectProcessor {
|
||||
public class CantBeOverwhelmedMultiplier implements ModifierSourceProducer {
|
||||
@Override
|
||||
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(value, "filter", "multiplier");
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "filter", "multiplier");
|
||||
|
||||
final String filter = FieldUtils.getString(value.get("filter"), "filter");
|
||||
final int multiplier = FieldUtils.getInteger(value.get("multiplier"), "multiplier", 3);
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
||||
final int multiplier = FieldUtils.getInteger(object.get("multiplier"), "multiplier", 3);
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
|
||||
blueprint.appendInPlayModifier(
|
||||
new ModifierSource() {
|
||||
return new ModifierSource() {
|
||||
@Override
|
||||
public Modifier getModifier(ActionContext actionContext) {
|
||||
final Filterable filterable = filterableSource.getFilterable(actionContext);
|
||||
return new OverwhelmedByMultiplierModifier(actionContext.getSource(), filterable, multiplier);
|
||||
}
|
||||
}
|
||||
);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,34 +1,31 @@
|
||||
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 org.json.simple.JSONObject;
|
||||
|
||||
public class CantTakeMoreWoundsThan implements EffectProcessor {
|
||||
public class CantTakeMoreWoundsThan implements ModifierSourceProducer {
|
||||
@Override
|
||||
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(value, "filter", "phase", "condition", "amount");
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "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 ValueSource objectSource = ValueResolver.resolveEvaluator(object.get("amount"), 1, environment);
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter", "self");
|
||||
final Phase phase = FieldUtils.getEnum(Phase.class, object.get("phase"), "phase");
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||
|
||||
blueprint.appendInPlayModifier(
|
||||
(actionContext) -> {
|
||||
return (actionContext) -> {
|
||||
return new CantTakeMoreThanXWoundsModifier(actionContext.getSource(), phase,
|
||||
valueSource.getEvaluator(actionContext)
|
||||
objectSource.getEvaluator(actionContext)
|
||||
.evaluateExpression(actionContext.getGame(), null),
|
||||
new RequirementCondition(requirements, actionContext),
|
||||
filterableSource.getFilterable(actionContext));
|
||||
});
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.modifier;
|
||||
|
||||
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.ModifierSource;
|
||||
import com.gempukku.lotro.cards.build.field.EffectProcessor;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class Modifier implements EffectProcessor {
|
||||
@Override
|
||||
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(value, "modifier");
|
||||
|
||||
JSONObject jsonObject = (JSONObject) value.get("modifier");
|
||||
final ModifierSource modifier = environment.getModifierSourceFactory().getModifier(jsonObject, environment);
|
||||
|
||||
blueprint.appendInPlayModifier(modifier);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
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.field.FieldUtils;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class ModifierSourceFactory {
|
||||
private Map<String, ModifierSourceProducer> modifierProducers = new HashMap<>();
|
||||
|
||||
public ModifierSourceFactory() {
|
||||
modifierProducers.put("addkeyword", new AddKeyword());
|
||||
modifierProducers.put("archerytotal", new ArcheryTotal());
|
||||
modifierProducers.put("cantbeexerted", new CantBeExerted());
|
||||
modifierProducers.put("cantbeoverwhelmedmultiplier", new CantBeOverwhelmedMultiplier());
|
||||
modifierProducers.put("canttakemorewoundsthan", new CantTakeMoreWoundsThan());
|
||||
modifierProducers.put("modifycost", new ModifyCost());
|
||||
modifierProducers.put("modifyroamingpenalty", new ModifyRoamingPenalty());
|
||||
modifierProducers.put("modifystrength", new ModifyStrength());
|
||||
modifierProducers.put("opponentmaynotdiscard", new OpponentMayNotDiscard());
|
||||
}
|
||||
|
||||
public ModifierSource getModifier(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
final String type = FieldUtils.getString(object.get("type"), "type");
|
||||
final ModifierSourceProducer modifierSourceProducer = modifierProducers.get(type.toLowerCase());
|
||||
if (modifierSourceProducer == null)
|
||||
throw new InvalidCardDefinitionException("Unable to resolve modifier of type: " + type);
|
||||
return modifierSourceProducer.getModifierSource(object, environment);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
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 org.json.simple.JSONObject;
|
||||
|
||||
public interface ModifierSourceProducer {
|
||||
ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException;
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
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.Filterable;
|
||||
@@ -9,24 +8,23 @@ import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class ModifyCost implements EffectProcessor {
|
||||
public class ModifyCost implements ModifierSourceProducer {
|
||||
@Override
|
||||
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(value, "condition", "filter", "amount");
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "condition", "filter", "amount");
|
||||
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(value.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(value.get("filter"), "filter");
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
||||
|
||||
final Requirement[] conditions = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
final ValueSource amountSource = ValueResolver.resolveEvaluator(value.get("amount"), 0, environment);
|
||||
final ValueSource amountSource = ValueResolver.resolveEvaluator(object.get("amount"), 0, environment);
|
||||
|
||||
blueprint.appendInPlayModifier(
|
||||
actionContext -> {
|
||||
return actionContext -> {
|
||||
final Filterable filterable = filterableSource.getFilterable(actionContext);
|
||||
final RequirementCondition requirementCondition = new RequirementCondition(conditions, actionContext);
|
||||
final Evaluator evaluator = amountSource.getEvaluator(actionContext);
|
||||
return new TwilightCostModifier(actionContext.getSource(), filterable, requirementCondition, evaluator);
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +1,30 @@
|
||||
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.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.RoamingPenaltyModifier;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class ModifyRoamingPenalty implements EffectProcessor {
|
||||
public class ModifyRoamingPenalty implements ModifierSourceProducer {
|
||||
@Override
|
||||
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(value, "filter", "condition", "amount");
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "filter", "condition", "amount");
|
||||
|
||||
final int amount = FieldUtils.getInteger(value.get("amount"), "amount");
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(value.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(value.get("filter"), "filter", "self");
|
||||
final int amount = FieldUtils.getInteger(object.get("amount"), "amount");
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter", "self");
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||
|
||||
blueprint.appendInPlayModifier(
|
||||
new ModifierSource() {
|
||||
return new ModifierSource() {
|
||||
@Override
|
||||
public Modifier getModifier(ActionContext actionContext) {
|
||||
return new RoamingPenaltyModifier(actionContext.getSource(),
|
||||
filterableSource.getFilterable(actionContext),
|
||||
new RequirementCondition(requirements, actionContext), amount);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,31 +1,29 @@
|
||||
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.logic.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class ModifyStrength implements EffectProcessor {
|
||||
public class ModifyStrength implements ModifierSourceProducer {
|
||||
@Override
|
||||
public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(value, "filter", "condition", "amount");
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "filter", "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 ValueSource valueSource = ValueResolver.resolveEvaluator(object.get("amount"), 1, environment);
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter", "self");
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||
|
||||
blueprint.appendInPlayModifier(
|
||||
(actionContext) -> {
|
||||
return (actionContext) -> {
|
||||
final Evaluator evaluator = valueSource.getEvaluator(actionContext);
|
||||
return new StrengthModifier(actionContext.getSource(),
|
||||
filterableSource.getFilterable(actionContext),
|
||||
new RequirementCondition(requirements, actionContext), evaluator);
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +1,25 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.modifier;
|
||||
|
||||
import com.gempukku.lotro.cards.build.BuiltLotroCardBlueprint;
|
||||
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.EffectProcessor;
|
||||
import com.gempukku.lotro.cards.build.ModifierSource;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.logic.modifiers.CantDiscardFromPlayByPlayerModifier;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class OpponentMayNotDiscard implements EffectProcessor {
|
||||
public class OpponentMayNotDiscard implements ModifierSourceProducer {
|
||||
@Override
|
||||
public void processEffect(JSONObject effectObject, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "filter");
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "filter");
|
||||
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "self");
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter", "self");
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
|
||||
blueprint.appendInPlayModifier(
|
||||
(actionContext) -> {
|
||||
return (actionContext) -> {
|
||||
return new CantDiscardFromPlayByPlayerModifier(actionContext.getSource(), "Can't be discarded by opponent",
|
||||
filterableSource.getFilterable(actionContext),
|
||||
actionContext.getPerformingPlayer());
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user