diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1.json index 5ecab6f97..e247be217 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set1.json @@ -47,7 +47,7 @@ "filter": "self" }, "effect": { - "type": "addStrength", + "type": "modifyStrength", "filter": "self", "amount": 2 } @@ -67,12 +67,32 @@ "effects": { "type": "event", "effect": { - "type": "addArcheryTotal", + "type": "modifyArcheryTotal", "side": "free people", "amount": 1 } } }, + "1_51": { + "title": "Legolas", + "subtitle": "Prince of Mirkwood", + "unique": true, + "side": "free people", + "culture": "elven", + "cost": 2, + "type": "companion", + "race": "elf", + "strength": 6, + "vitality": 3, + "resistance": 6, + "signet": "gandalf", + "keyword": "archer", + "effects": { + "type": "modifyStrength", + "filter": "self,inSkirmishAgainst(nazgul)", + "amount": 3 + } + }, "1_94": { "title": "Athelas", "side": "free people", diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set10.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set10.json new file mode 100644 index 000000000..3ecb81486 --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set10.json @@ -0,0 +1,17 @@ +{ + "10_121": { + "title": "Frodo", + "subtitle": "Resolute Hobbit", + "unique": true, + "side": "free people", + "culture": "shire", + "cost": 0, + "type": "companion", + "race": "hobbit", + "strength": 3, + "vitality": 4, + "resistance": 12, + "signet": "frodo", + "keyword": "can start with ring" + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set4.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set4.json new file mode 100644 index 000000000..ef175e523 --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set4.json @@ -0,0 +1,71 @@ +{ + "4_138": { + "title": "Band of Uruk Bowmen", + "side": "shadow", + "culture": "isengard", + "cost": 5, + "type": "minion", + "race": "uruk-hai", + "strength": 7, + "vitality": 3, + "site": 5, + "keyword": [ + "archer", + "damage+1" + ], + "effects": { + "type": "archeryTotal", + "condition": { + "type": "controlsSite", + "player": "owner" + }, + "side": "shadow", + "amount": 1 + } + }, + "4_218": { + "title": "Desert Legion", + "unique": true, + "side": "shadow", + "culture": "raider", + "cost": 6, + "type": "minion", + "race": "man", + "strength": 13, + "vitality": 3, + "site": 4, + "keyword": [ + "southron", + "ambush+1" + ], + "effects": [ + { + "type": "modifyStrength", + "condition": { + "type": "canSpotBurdens", + "amount": 4 + }, + "filter": "self", + "amount": 5 + }, + { + "type": "addKeyword", + "condition": { + "type": "canSpotBurdens", + "amount": 5 + }, + "filter": "self", + "keyword": "fierce" + }, + { + "type": "addKeyword", + "condition": { + "type": "canSpotBurdens", + "amount": 6 + }, + "filter": "self", + "keyword": "damage+1" + } + ] + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40.json index cc61619ca..9dbfeff7e 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40.json @@ -93,7 +93,7 @@ "with": "memory(exertedGimli)" }, { - "type": "addStrength", + "type": "modifyStrength", "filter": "memory(exertedGimli)", "amount": 2 }, @@ -144,7 +144,7 @@ "strength": 2, "target": "nazgul", "effects": { - "type": "addStrength", + "type": "modifyStrength", "filter": "hasAttached(self),inSkirmishAgainst(companion,resistanceLessThan(4))", "amount": 2 } diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set5.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set5.json new file mode 100644 index 000000000..3d2c8d530 --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set5.json @@ -0,0 +1,29 @@ +{ + "5_7": { + "title": "Gimli", + "subtitle": "Skilled Defender", + "unique": true, + "side": "free people", + "culture": "dwarven", + "cost": 2, + "type": "companion", + "race": "dwarf", + "strength": 6, + "vitality": 3, + "resistance": 6, + "signet": "theoden", + "keyword": "damage+1", + "effects": { + "type": "trigger", + "optional": true, + "trigger": { + "type": "winsSkirmish", + "filter": "self" + }, + "effect": { + "type": "wound", + "filter": "choose(minion,assignedToSkirmish(unbound,companion))" + } + } + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_089.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_089.java index efb424a9c..6ea870a5e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_089.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_089.java @@ -28,7 +28,7 @@ import java.util.List; */ public class Card4_089 extends AbstractCompanion { public Card4_089() { - super(4, 7, 4, 6, Culture.GANDALF, Race.WIZARD, Signet.THÉODEN, "Gandalf", "Greyhame", true); + super(4, 7, 4, 6, Culture.GANDALF, Race.WIZARD, Signet.THEODEN, "Gandalf", "Greyhame", true); } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_267.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_267.java index f79b88319..5c245e18d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_267.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_267.java @@ -31,7 +31,7 @@ import java.util.List; */ public class Card4_267 extends AbstractCompanion { public Card4_267() { - super(3, 7, 3, 6, Culture.ROHAN, Race.MAN, Signet.THÉODEN, Names.eomer, "Third Marshal of Riddermark", true); + super(3, 7, 3, 6, Culture.ROHAN, Race.MAN, Signet.THEODEN, Names.eomer, "Third Marshal of Riddermark", true); } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_270.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_270.java index 6de0aef28..3e7f968d9 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_270.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_270.java @@ -1,19 +1,15 @@ package com.gempukku.lotro.cards.set4.rohan; -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.PreventCardEffect; -import com.gempukku.lotro.logic.effects.SelfExertEffect; 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.ActivateCardAction; -import com.gempukku.lotro.logic.effects.AddTwilightEffect; -import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.effects.WoundCharactersEffect; +import com.gempukku.lotro.logic.cardtype.AbstractCompanion; +import com.gempukku.lotro.logic.effects.*; import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.PlayConditions; +import com.gempukku.lotro.logic.timing.TriggerConditions; import java.util.Collections; import java.util.List; @@ -33,7 +29,7 @@ import java.util.List; */ public class Card4_270 extends AbstractCompanion { public Card4_270() { - super(2, 6, 3, 6, Culture.ROHAN, Race.MAN, Signet.THÉODEN, Names.eowyn, "Lady of Rohan", true); + super(2, 6, 3, 6, Culture.ROHAN, Race.MAN, Signet.THEODEN, Names.eowyn, "Lady of Rohan", true); addKeyword(Keyword.VALIANT); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_275.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_275.java index d76b7820a..1c08476b4 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_275.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_275.java @@ -36,7 +36,7 @@ public class Card4_275 extends AbstractEvent { action.appendCost( new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.name(Names.theoden))); action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose companion", CardType.COMPANION, Signet.THÉODEN) { + new ChooseActiveCardEffect(self, playerId, "Choose companion", CardType.COMPANION, Signet.THEODEN) { @Override protected void cardSelected(LotroGame game, PhysicalCard card) { action.insertEffect( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_365.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_365.java index 235e00397..319f6b2fd 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_365.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_365.java @@ -35,7 +35,7 @@ import java.util.List; */ public class Card4_365 extends AbstractCompanion { public Card4_365() { - super(2, 6, 2, 6, Culture.ROHAN, Race.MAN, Signet.THÉODEN, Names.theoden, "Lord of the Mark", true); + super(2, 6, 2, 6, Culture.ROHAN, Race.MAN, Signet.THEODEN, Names.theoden, "Lord of the Mark", true); } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/dwarven/Card5_007.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/dwarven/Card5_007.java index d9fa993a3..6fd75224a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/dwarven/Card5_007.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/dwarven/Card5_007.java @@ -1,14 +1,14 @@ package com.gempukku.lotro.cards.set5.dwarven; -import com.gempukku.lotro.logic.cardtype.AbstractCompanion; -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.cardtype.AbstractCompanion; import com.gempukku.lotro.logic.effects.ChooseAndWoundCharactersEffect; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.TriggerConditions; import java.util.Collections; import java.util.List; @@ -28,7 +28,7 @@ import java.util.List; */ public class Card5_007 extends AbstractCompanion { public Card5_007() { - super(2, 6, 3, 6, Culture.DWARVEN, Race.DWARF, Signet.THÉODEN, "Gimli", "Skilled Defender", true); + super(2, 6, 3, 6, Culture.DWARVEN, Race.DWARF, Signet.THEODEN, "Gimli", "Skilled Defender", true); addKeyword(Keyword.DAMAGE, 1); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/elven/Card5_121.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/elven/Card5_121.java index 6b2108f7f..df9be2256 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/elven/Card5_121.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/elven/Card5_121.java @@ -1,14 +1,14 @@ package com.gempukku.lotro.cards.set5.elven; -import com.gempukku.lotro.logic.cardtype.AbstractCompanion; -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.cardtype.AbstractCompanion; import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.TriggerConditions; import java.util.Collections; import java.util.List; @@ -27,7 +27,7 @@ import java.util.List; */ public class Card5_121 extends AbstractCompanion { public Card5_121() { - super(2, 6, 3, 6, Culture.ELVEN, Race.ELF, Signet.THÉODEN, "Legolas", "Archer of Mirkwood", true); + super(2, 6, 3, 6, Culture.ELVEN, Race.ELF, Signet.THEODEN, "Legolas", "Archer of Mirkwood", true); addKeyword(Keyword.ARCHER); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/rohan/Card5_084.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/rohan/Card5_084.java index 63c0e0c40..869b20cb0 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/rohan/Card5_084.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/rohan/Card5_084.java @@ -34,9 +34,9 @@ public class Card5_084 extends AbstractEvent { action.appendCost( new ChooseAndExertCharactersEffect(action, playerId, 1, 1, 2, Filters.name(Names.theoden))); action.appendEffect( - new HealCharactersEffect(self, Filters.and(CardType.COMPANION, Filters.not(Filters.name(Names.theoden)), Signet.THÉODEN))); + new HealCharactersEffect(self, Filters.and(CardType.COMPANION, Filters.not(Filters.name(Names.theoden)), Signet.THEODEN))); action.appendEffect( - new HealCharactersEffect(self, Filters.and(CardType.COMPANION, Filters.not(Filters.name(Names.theoden)), Signet.THÉODEN))); + new HealCharactersEffect(self, Filters.and(CardType.COMPANION, Filters.not(Filters.name(Names.theoden)), Signet.THEODEN))); return action; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/gondor/Card6_050.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/gondor/Card6_050.java index d44a2d3dd..f9d8d316f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/gondor/Card6_050.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/gondor/Card6_050.java @@ -33,7 +33,7 @@ import java.util.List; */ public class Card6_050 extends AbstractCompanion { public Card6_050() { - super(4, 8, 4, 6, Culture.GONDOR, Race.MAN, Signet.THÉODEN, "Aragorn", "Defender of Free Peoples", true); + super(4, 8, 4, 6, Culture.GONDOR, Race.MAN, Signet.THEODEN, "Aragorn", "Defender of Free Peoples", true); } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/site/Card6_118.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/site/Card6_118.java index d93a2bb2f..1504b54e5 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/site/Card6_118.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/site/Card6_118.java @@ -33,7 +33,7 @@ public class Card6_118 extends AbstractSite { @Override public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { if (PlayConditions.canUseSiteDuringPhase(game, Phase.FELLOWSHIP, self) - && PlayConditions.canSpot(game, 3, CardType.COMPANION, Signet.THÉODEN)) { + && PlayConditions.canSpot(game, 3, CardType.COMPANION, Signet.THEODEN)) { ActivateCardAction action = new ActivateCardAction(self); Set hand = new HashSet(game.getGameState().getHand(playerId)); action.appendCost( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/dwarven/Card7_006.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/dwarven/Card7_006.java index e50b0e31f..1c3ede8b4 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/dwarven/Card7_006.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/dwarven/Card7_006.java @@ -25,7 +25,7 @@ import java.util.List; */ public class Card7_006 extends AbstractCompanion { public Card7_006() { - super(2, 6, 3, 6, Culture.DWARVEN, Race.DWARF, Signet.THÉODEN, "Gimli", "Faithful Companion", true); + super(2, 6, 3, 6, Culture.DWARVEN, Race.DWARF, Signet.THEODEN, "Gimli", "Faithful Companion", true); addKeyword(Keyword.DAMAGE, 1); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/elven/Card7_026.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/elven/Card7_026.java index 98ea014c5..43992275c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/elven/Card7_026.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/elven/Card7_026.java @@ -27,7 +27,7 @@ import java.util.List; */ public class Card7_026 extends AbstractCompanion { public Card7_026() { - super(2, 6, 3, 6, Culture.ELVEN, Race.ELF, Signet.THÉODEN, "Legolas", "Nimble Warrior", true); + super(2, 6, 3, 6, Culture.ELVEN, Race.ELF, Signet.THEODEN, "Legolas", "Nimble Warrior", true); addKeyword(Keyword.ARCHER); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_037.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_037.java index 6f6d2cfc1..fa53e7814 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_037.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_037.java @@ -38,7 +38,7 @@ import java.util.List; */ public class Card7_037 extends AbstractCompanion { public Card7_037() { - super(4, 7, 4, 6, Culture.GANDALF, Race.WIZARD, Signet.THÉODEN, "Gandalf", "Manager of Wizards", true); + super(4, 7, 4, 6, Culture.GANDALF, Race.WIZARD, Signet.THEODEN, "Gandalf", "Manager of Wizards", true); } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gondor/Card7_090.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gondor/Card7_090.java index 232d07d71..e56ecc29a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gondor/Card7_090.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gondor/Card7_090.java @@ -30,7 +30,7 @@ import java.util.List; */ public class Card7_090 extends AbstractCompanion { public Card7_090() { - super(3, 7, 3, 6, Culture.GONDOR, Race.MAN, Signet.THÉODEN, "Faramir", "Stout Captain", true); + super(3, 7, 3, 6, Culture.GONDOR, Race.MAN, Signet.THEODEN, "Faramir", "Stout Captain", true); addKeyword(Keyword.RANGER); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_228.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_228.java index 9c8d9afb0..7b26257f4 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_228.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_228.java @@ -26,7 +26,7 @@ import java.util.List; */ public class Card7_228 extends AbstractCompanion { public Card7_228() { - super(2, 6, 3, 6, Culture.ROHAN, Race.MAN, Signet.THÉODEN, Names.eowyn, "Dernhelm", true); + super(2, 6, 3, 6, Culture.ROHAN, Race.MAN, Signet.THEODEN, Names.eowyn, "Dernhelm", true); addKeyword(Keyword.VALIANT); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_254.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_254.java index 1dc330fff..e003a4a64 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_254.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_254.java @@ -1,15 +1,15 @@ package com.gempukku.lotro.cards.set7.rohan; -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.choose.ChooseAndExertCharactersEffect; 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.choose.ChooseAndExertCharactersEffect; 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; @@ -29,7 +29,7 @@ import java.util.List; */ public class Card7_254 extends AbstractCompanion { public Card7_254() { - super(3, 7, 3, 6, Culture.ROHAN, Race.MAN, Signet.THÉODEN, Names.theoden, "Leader of Spears", true); + super(3, 7, 3, 6, Culture.ROHAN, Race.MAN, Signet.THEODEN, Names.theoden, "Leader of Spears", true); addKeyword(Keyword.VALIANT); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_365.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_365.java index 374b10aea..2b9050ea7 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_365.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/rohan/Card7_365.java @@ -30,7 +30,7 @@ import java.util.List; */ public class Card7_365 extends AbstractCompanion { public Card7_365() { - super(3, 7, 3, 6, Culture.ROHAN, Race.MAN, Signet.THÉODEN, Names.eomer, "Valiant Warchief", true); + super(3, 7, 3, 6, Culture.ROHAN, Race.MAN, Signet.THEODEN, Names.eomer, "Valiant Warchief", true); addKeyword(Keyword.VALIANT); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/shire/Card7_321.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/shire/Card7_321.java index 8c82b720a..d5a028d45 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/shire/Card7_321.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/shire/Card7_321.java @@ -31,7 +31,7 @@ import java.util.List; */ public class Card7_321 extends AbstractCompanion { public Card7_321() { - super(1, 3, 4, 6, Culture.SHIRE, Race.HOBBIT, Signet.THÉODEN, "Merry", "Swordthain", true); + super(1, 3, 4, 6, Culture.SHIRE, Race.HOBBIT, Signet.THEODEN, "Merry", "Swordthain", true); } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/rohan/Card8_090.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/rohan/Card8_090.java index 86de0e626..ea87d4b44 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/rohan/Card8_090.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/rohan/Card8_090.java @@ -32,7 +32,7 @@ public class Card8_090 extends AbstractEvent { PlayEventAction action = new PlayEventAction(self); action.appendCost( new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.name(Names.theoden))); - int count = Filters.countActive(game, CardType.COMPANION, Signet.THÉODEN); + int count = Filters.countActive(game, CardType.COMPANION, Signet.THEODEN); for (int i = 0; i < count; i++) action.appendEffect( new ChooseAndExertCharactersEffect(action, playerId, 1, 1, CardType.MINION)); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/rohan/Card9_045.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/rohan/Card9_045.java index 7e60ece02..0a3a87765 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/rohan/Card9_045.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/rohan/Card9_045.java @@ -43,7 +43,7 @@ public class Card9_045 extends AbstractAttachableFPPossession { @Override public List getInPlayModifiers(LotroGame game, PhysicalCard self) { return Collections.singletonList( - new AddSignetModifier(self, Filters.hasAttached(self), Signet.THÉODEN)); + new AddSignetModifier(self, Filters.hasAttached(self), Signet.THEODEN)); } @Override diff --git a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Signet.java b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Signet.java index f256c97a0..2ed06ca79 100644 --- a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Signet.java +++ b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Signet.java @@ -1,5 +1,15 @@ -package com.gempukku.lotro.common; - -public enum Signet implements Filterable { - ARAGORN, FRODO, GANDALF, THÉODEN -} +package com.gempukku.lotro.common; + +public enum Signet implements Filterable { + ARAGORN("Aragorn"), FRODO("Frodo"), GANDALF("Gandalf"), THEODEN("Théoden"); + + private String displayText; + + Signet(String displayText) { + this.displayText = displayText; + } + + public String toString() { + return displayText; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/BuiltLotroCardBlueprint.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/BuiltLotroCardBlueprint.java index bf13fc555..ff347ea50 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/BuiltLotroCardBlueprint.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/BuiltLotroCardBlueprint.java @@ -37,7 +37,7 @@ public class BuiltLotroCardBlueprint implements LotroCardBlueprint { private Set possessionClasses; private Direction direction; - private List playRequirements; + private List requirements; private List targetFilters; private List requiredBeforeTriggers; @@ -98,10 +98,10 @@ public class BuiltLotroCardBlueprint implements LotroCardBlueprint { optionalAfterTriggers.add(actionSource); } - public void appendPlayRequirement(PlayRequirement playRequirement) { - if (playRequirements == null) - playRequirements = new LinkedList<>(); - playRequirements.add(playRequirement); + public void appendPlayRequirement(Requirement requirement) { + if (requirements == null) + requirements = new LinkedList<>(); + requirements.add(requirement); } public void appendInPlayModifier(ModifierSource modifierSource) { @@ -368,11 +368,11 @@ public class BuiltLotroCardBlueprint implements LotroCardBlueprint { @Override public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) { - if (playRequirements == null) + if (requirements == null) return true; - for (PlayRequirement playRequirement : playRequirements) { - if (!playRequirement.accepts(null, game, self, null, null)) + for (Requirement requirement : requirements) { + if (!requirement.accepts(null, game, self, null, null)) return false; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/PlayRequirement.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/Requirement.java similarity index 90% rename from gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/PlayRequirement.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/Requirement.java index 31cd2e449..c22973e99 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/PlayRequirement.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/Requirement.java @@ -5,6 +5,6 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; -public interface PlayRequirement { +public interface Requirement { boolean accepts(String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/EffectFieldProcessor.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/EffectFieldProcessor.java index 6c16d01a4..386374705 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/EffectFieldProcessor.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/EffectFieldProcessor.java @@ -8,7 +8,9 @@ import com.gempukku.lotro.cards.build.field.effect.ActivatedEffectProcessor; import com.gempukku.lotro.cards.build.field.effect.ActivatedTriggerEffectProcessor; import com.gempukku.lotro.cards.build.field.effect.EventEffectProcessor; import com.gempukku.lotro.cards.build.field.effect.TriggerEffectProcessor; -import com.gempukku.lotro.cards.build.field.effect.modifier.AddStrength; +import com.gempukku.lotro.cards.build.field.effect.modifier.AddKeyword; +import com.gempukku.lotro.cards.build.field.effect.modifier.ArcheryTotal; +import com.gempukku.lotro.cards.build.field.effect.modifier.ModifyStrength; import org.json.simple.JSONObject; import java.util.HashMap; @@ -22,7 +24,9 @@ public class EffectFieldProcessor implements FieldProcessor { effectProcessors.put("activatedtrigger", new ActivatedTriggerEffectProcessor()); effectProcessors.put("activated", new ActivatedEffectProcessor()); effectProcessors.put("event", new EventEffectProcessor()); - effectProcessors.put("addstrength", new AddStrength()); + effectProcessors.put("modifystrength", new ModifyStrength()); + effectProcessors.put("addkeyword", new AddKeyword()); + effectProcessors.put("archerytotal", new ArcheryTotal()); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/FieldUtils.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/FieldUtils.java index bc716e9be..b38daf2ee 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/FieldUtils.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/FieldUtils.java @@ -56,7 +56,7 @@ public class FieldUtils { if (value == null) return null; final String string = getString(value, key); - return Enum.valueOf(enumClass, string.toUpperCase().replace(' ', '_')); + return Enum.valueOf(enumClass, string.toUpperCase().replace(' ', '_').replace('-', '_')); } public static JSONObject[] getObjectArray(Object value, String key) throws InvalidCardDefinitionException { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/RequirementFieldProcessor.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/RequirementFieldProcessor.java index 738e1be87..2e22393e9 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/RequirementFieldProcessor.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/RequirementFieldProcessor.java @@ -8,8 +8,8 @@ public class RequirementFieldProcessor implements FieldProcessor { public void processField(String key, Object value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { final JSONObject[] requirementsArray = FieldUtils.getObjectArray(value, key); for (JSONObject requirement : requirementsArray) { - final PlayRequirement playRequirement = environment.getRequirementFactory().getRequirement(requirement, environment); - blueprint.appendPlayRequirement(playRequirement); + final Requirement conditionRequirement = environment.getRequirementFactory().getRequirement(requirement, environment); + blueprint.appendPlayRequirement(conditionRequirement); } } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/DefaultActionSource.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/DefaultActionSource.java index e84e2c02d..1c8464677 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/DefaultActionSource.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/DefaultActionSource.java @@ -1,7 +1,7 @@ package com.gempukku.lotro.cards.build.field.effect; import com.gempukku.lotro.cards.build.ActionSource; -import com.gempukku.lotro.cards.build.PlayRequirement; +import com.gempukku.lotro.cards.build.Requirement; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; @@ -12,13 +12,13 @@ import java.util.LinkedList; import java.util.List; public class DefaultActionSource implements ActionSource { - private List playRequirements = new LinkedList<>(); + private List requirements = new LinkedList<>(); private List costs = new LinkedList<>(); private List effects = new LinkedList<>(); - public void addPlayRequirement(PlayRequirement playRequirement) { - this.playRequirements.add(playRequirement); + public void addPlayRequirement(Requirement requirement) { + this.requirements.add(requirement); } public void addCost(EffectAppender effectAppender) { @@ -31,8 +31,8 @@ public class DefaultActionSource implements ActionSource { @Override public boolean isValid(String playerId, LotroGame game, PhysicalCard self, EffectResult effectResult, Effect effect) { - for (PlayRequirement playRequirement : playRequirements) { - if (!playRequirement.accepts(playerId, game, self, effectResult, effect)) + for (Requirement requirement : requirements) { + if (!requirement.accepts(playerId, game, self, effectResult, effect)) return false; } return true; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java index aaa2fb36d..6955121af 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java @@ -17,9 +17,9 @@ public class EffectAppenderFactory { effectAppenderProducers.put("discard", new DiscardFromPlay()); effectAppenderProducers.put("preventdiscard", new PreventCardEffectAppender()); effectAppenderProducers.put("exert", new Exert()); - effectAppenderProducers.put("addstrength", new AddStrength()); + effectAppenderProducers.put("modifystrength", new ModifyStrength()); effectAppenderProducers.put("addkeyword", new AddKeyword()); - effectAppenderProducers.put("addarcherytotal", new AddArcheryTotal()); + effectAppenderProducers.put("modifyarcherytotal", new ModifyArcheryTotal()); effectAppenderProducers.put("addburden", new AddBurden()); effectAppenderProducers.put("discardtopcardfromdeck", new DiscardTopCardFromDeck()); effectAppenderProducers.put("addtwilight", new AddTwilight()); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectUtils.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectUtils.java index 640baaf96..203f469fc 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectUtils.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectUtils.java @@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.build.field.effect; import com.gempukku.lotro.cards.build.CardGenerationEnvironment; import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; -import com.gempukku.lotro.cards.build.PlayRequirement; +import com.gempukku.lotro.cards.build.Requirement; import com.gempukku.lotro.cards.build.field.FieldUtils; import com.gempukku.lotro.cards.build.field.effect.trigger.TriggerChecker; import org.json.simple.JSONObject; @@ -19,8 +19,8 @@ public class EffectUtils { public static void processRequirementsCostsAndEffects(JSONObject value, CardGenerationEnvironment environment, DefaultActionSource actionSource) throws InvalidCardDefinitionException { final JSONObject[] requirementArray = FieldUtils.getObjectArray(value.get("requirement"), "requirement"); for (JSONObject requirement : requirementArray) { - final PlayRequirement playRequirement = environment.getRequirementFactory().getRequirement(requirement, environment); - actionSource.addPlayRequirement(playRequirement); + final Requirement conditionRequirement = environment.getRequirementFactory().getRequirement(requirement, environment); + actionSource.addPlayRequirement(conditionRequirement); } processCostsAndEffects(value, environment, actionSource); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddArcheryTotal.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ModifyArcheryTotal.java similarity index 96% rename from gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddArcheryTotal.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ModifyArcheryTotal.java index 4bee4bb88..9e2d21226 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddArcheryTotal.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ModifyArcheryTotal.java @@ -15,7 +15,7 @@ import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; import org.json.simple.JSONObject; -public class AddArcheryTotal implements EffectAppenderProducer { +public class ModifyArcheryTotal implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(effectObject, "amount", "side"); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddStrength.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ModifyStrength.java similarity index 97% rename from gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddStrength.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ModifyStrength.java index a4be16ff7..97b44a63f 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AddStrength.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ModifyStrength.java @@ -19,7 +19,7 @@ import org.json.simple.JSONObject; import java.util.Collection; -public class AddStrength implements EffectAppenderProducer { +public class ModifyStrength implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(effectObject, "amount", "count", "filter", "memory"); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java index 3813aebfe..c242d1e5f 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java @@ -70,6 +70,11 @@ public class FilterFactory { final FilterableSource filterableSource = filterFactory.generateFilter(parameter); return (playerId, game, source, effectResult, effect) -> Filters.inSkirmishAgainst(filterableSource.getFilterable(playerId, game, source, effectResult, effect)); }); + parameterFilters.put("assignedToSkirmish", + (parameter, filterFactory) -> { + final FilterableSource filterableSource = filterFactory.generateFilter(parameter); + return (playerId, game, source, effectResult, effect) -> Filters.assignedToSkirmishAgainst(filterableSource.getFilterable(playerId, game, source, effectResult, effect)); + }); parameterFilters.put("resistanceLessThan", (parameter, filterFactory) -> { int amount = Integer.parseInt(parameter); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/AddKeyword.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/AddKeyword.java new file mode 100644 index 000000000..a540a9882 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/AddKeyword.java @@ -0,0 +1,42 @@ +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.Keyword; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.KeywordModifier; +import com.gempukku.lotro.logic.modifiers.Modifier; +import org.json.simple.JSONObject; + +public class AddKeyword implements EffectProcessor { + @Override + public void processEffect(JSONObject effectObject, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(effectObject, "filter", "condition", "keyword"); + + 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 String[] keywordSplit = keywordString.split("\\+"); + Keyword keyword = FieldUtils.getEnum(Keyword.class, keywordSplit[0], "keyword"); + int value = 1; + if (keywordSplit.length == 2) + value = Integer.parseInt(keywordSplit[1]); + final int keywordValue = value; + + final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter); + final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment); + + blueprint.appendInPlayModifier( + new ModifierSource() { + @Override + public Modifier getModifier(LotroGame game, PhysicalCard self) { + return new KeywordModifier(self, + filterableSource.getFilterable(null, game, self, null, null), + new RequirementCondition(requirements, null, self, null, null), keyword, keywordValue); + } + }); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ArcheryTotal.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ArcheryTotal.java new file mode 100644 index 000000000..69fcd1be3 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ArcheryTotal.java @@ -0,0 +1,34 @@ +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.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier; +import com.gempukku.lotro.logic.modifiers.Modifier; +import org.json.simple.JSONObject; + +public class ArcheryTotal implements EffectProcessor { + @Override + public void processEffect(JSONObject effectObject, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(effectObject, "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 Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment); + + blueprint.appendInPlayModifier( + new ModifierSource() { + @Override + public Modifier getModifier(LotroGame game, PhysicalCard self) { + return new ArcheryTotalModifier(self, side, + new RequirementCondition(requirements, null, self, null, null), + amount); + } + }); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/AddStrength.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyStrength.java similarity index 70% rename from gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/AddStrength.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyStrength.java index 8d85cad1b..89ddead4c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/AddStrength.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifyStrength.java @@ -9,22 +9,25 @@ import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.StrengthModifier; import org.json.simple.JSONObject; -public class AddStrength implements EffectProcessor { +public class ModifyStrength implements EffectProcessor { @Override public void processEffect(JSONObject value, BuiltLotroCardBlueprint blueprint, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(value, "filter", "amount"); + FieldUtils.validateAllowedFields(value, "filter", "condition", "amount"); final int amount = FieldUtils.getInteger(value.get("amount"), "amount"); - final String filter = FieldUtils.getString(value.get("filter"), "filter"); + final JSONObject[] conditionArray = FieldUtils.getObjectArray(value.get("condition"), "condition"); + final String filter = FieldUtils.getString(value.get("filter"), "filter", "self"); final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter); + final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment); blueprint.appendInPlayModifier( new ModifierSource() { @Override public Modifier getModifier(LotroGame game, PhysicalCard self) { return new StrengthModifier(self, - filterableSource.getFilterable(null, game, self, null, null), amount); + filterableSource.getFilterable(null, game, self, null, null), + new RequirementCondition(requirements, null, self, null, null), amount); } }); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/RequirementCondition.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/RequirementCondition.java new file mode 100644 index 000000000..735ef63fe --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/RequirementCondition.java @@ -0,0 +1,34 @@ +package com.gempukku.lotro.cards.build.field.effect.modifier; + +import com.gempukku.lotro.cards.build.Requirement; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.Condition; +import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.EffectResult; + +public class RequirementCondition implements Condition { + private Requirement[] requirements; + private String playerId; + private PhysicalCard self; + private EffectResult effectResult; + private Effect effect; + + public RequirementCondition(Requirement[] requirements, String playerId, PhysicalCard self, EffectResult effectResult, Effect effect) { + this.requirements = requirements; + this.playerId = playerId; + this.self = self; + this.effectResult = effectResult; + this.effect = effect; + } + + @Override + public boolean isFullfilled(LotroGame game) { + for (Requirement requirement : requirements) { + if (!requirement.accepts(playerId, game, self, effectResult, effect)) + return false; + } + + return true; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanDiscardFromPlay.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanDiscardFromPlay.java index 5768f7f38..29d74c6f6 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanDiscardFromPlay.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanDiscardFromPlay.java @@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.build.field.effect.requirement; 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.PlayRequirement; +import com.gempukku.lotro.cards.build.Requirement; import com.gempukku.lotro.cards.build.field.FieldUtils; import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.logic.timing.PlayConditions; @@ -11,7 +11,7 @@ import org.json.simple.JSONObject; public class CanDiscardFromPlay implements RequirementProducer { @Override - public PlayRequirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(object, "count", "filter"); final int count = FieldUtils.getInteger(object.get("count"), "count", 1); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanExert.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanExert.java index 665c9b89a..0ad058145 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanExert.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanExert.java @@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.build.field.effect.requirement; 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.PlayRequirement; +import com.gempukku.lotro.cards.build.Requirement; import com.gempukku.lotro.cards.build.field.FieldUtils; import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.logic.timing.PlayConditions; @@ -11,7 +11,7 @@ import org.json.simple.JSONObject; public class CanExert implements RequirementProducer { @Override - public PlayRequirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(object, "count", "times", "filter"); final int count = FieldUtils.getInteger(object.get("count"), "count", 1); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanSpot.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanSpot.java index 4687dd1a3..190a42430 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanSpot.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanSpot.java @@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.build.field.effect.requirement; 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.PlayRequirement; +import com.gempukku.lotro.cards.build.Requirement; import com.gempukku.lotro.cards.build.field.FieldUtils; import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.logic.timing.PlayConditions; @@ -11,7 +11,7 @@ import org.json.simple.JSONObject; public class CanSpot implements RequirementProducer { @Override - public PlayRequirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(object, "count", "filter"); final int count = FieldUtils.getInteger(object.get("count"), "count", 1); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanSpotBurdens.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanSpotBurdens.java new file mode 100644 index 000000000..f231c060d --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanSpotBurdens.java @@ -0,0 +1,18 @@ +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.field.FieldUtils; +import com.gempukku.lotro.logic.timing.PlayConditions; +import org.json.simple.JSONObject; + +public class CanSpotBurdens implements RequirementProducer { + @Override + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "amount"); + + final int count = FieldUtils.getInteger(object.get("amount"), "amount", 1); + return (playerId, game, self, effectResult, effect) -> PlayConditions.canSpotBurdens(game, count); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanStackTopCardOfDrawDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanStackTopCardOfDrawDeck.java index 994837600..ae69d5e36 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanStackTopCardOfDrawDeck.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/CanStackTopCardOfDrawDeck.java @@ -8,7 +8,7 @@ import org.json.simple.JSONObject; public class CanStackTopCardOfDrawDeck implements RequirementProducer { @Override - public PlayRequirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(object, "deck", "where", "count"); final String deck = FieldUtils.getString(object.get("deck"), "deck", "owner"); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/ControlsSite.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/ControlsSite.java new file mode 100644 index 000000000..d01f7792d --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/ControlsSite.java @@ -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.PlayerSource; +import com.gempukku.lotro.cards.build.Requirement; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver; +import com.gempukku.lotro.logic.timing.PlayConditions; +import org.json.simple.JSONObject; + +public class ControlsSite implements RequirementProducer { + @Override + public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "player"); + + final String player = FieldUtils.getString(object.get("player"), "player", "owner"); + final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment); + + return (playerId, game, self, effectResult, effect) -> { + return PlayConditions.controllsSite(game, + playerSource.getPlayer(playerId, game, self, effectResult, effect)); + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java index e67b38561..3b6acb2ec 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementFactory.java @@ -2,7 +2,7 @@ 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.PlayRequirement; +import com.gempukku.lotro.cards.build.Requirement; import com.gempukku.lotro.cards.build.field.FieldUtils; import org.json.simple.JSONObject; @@ -17,13 +17,22 @@ public class RequirementFactory { requirementProducers.put("canexert", new CanExert()); requirementProducers.put("canspot", new CanSpot()); requirementProducers.put("canstacktopcardofdrawdeck", new CanStackTopCardOfDrawDeck()); + requirementProducers.put("canspotburdens", new CanSpotBurdens()); + requirementProducers.put("controlssite", new ControlsSite()); } - public PlayRequirement getRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + public Requirement getRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { final String type = FieldUtils.getString(object.get("type"), "type"); final RequirementProducer requirementProducer = requirementProducers.get(type.toLowerCase()); if (requirementProducer == null) throw new InvalidCardDefinitionException("Unable to resolve requirement of type: " + type); return requirementProducer.getPlayRequirement(object, environment); } + + public Requirement[] getRequirements(JSONObject[] object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + Requirement[] result = new Requirement[object.length]; + for (int i = 0; i < object.length; i++) + result[i] = getRequirement(object[i], environment); + return result; + } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementProducer.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementProducer.java index 6e4d4c2af..fb4fce947 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementProducer.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/RequirementProducer.java @@ -2,9 +2,9 @@ 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.PlayRequirement; +import com.gempukku.lotro.cards.build.Requirement; import org.json.simple.JSONObject; public interface RequirementProducer { - PlayRequirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException; + Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerChecker.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerChecker.java index 37dc86cfd..504020ec8 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerChecker.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerChecker.java @@ -1,7 +1,7 @@ package com.gempukku.lotro.cards.build.field.effect.trigger; -import com.gempukku.lotro.cards.build.PlayRequirement; +import com.gempukku.lotro.cards.build.Requirement; -public interface TriggerChecker extends PlayRequirement { +public interface TriggerChecker extends Requirement { boolean isBefore(); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java index 9b1643db4..11716a4f8 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java @@ -154,7 +154,7 @@ public class GameStats { resistanceStr = "F" + resistance; else if (signet == Signet.GANDALF) resistanceStr = "G" + resistance; - else if (signet == Signet.THÉODEN) + else if (signet == Signet.THEODEN) resistanceStr = "T" + resistance; else resistanceStr = String.valueOf(resistance);