diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set04-errata-playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set04-errata-playtest.json index 5adcdd8a5..5596b0bc9 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set04-errata-playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set04-errata-playtest.json @@ -117,7 +117,7 @@ "condition": [ { "type": "canSpot", - "filter": "smeagol" + "filter": "name(smeagol)" }, { "type": "canSpot", diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set07-errata-playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set07-errata-playtest.json index e88ca4d67..63ec9c216 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set07-errata-playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set07-errata-playtest.json @@ -15,7 +15,7 @@ "text": "Assign to Gandalf", "effect": { "type": "assignFpCharacterToSkirmish", - "fpCharacter": "choose(gandalf)", + "fpCharacter": "choose(name(gandalf))", "against": "self" } } diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set08-errata-playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set08-errata-playtest.json index 97e048b38..82cf770fd 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set08-errata-playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set08-errata-playtest.json @@ -8,14 +8,14 @@ "effects": [ { "type": "modifier", - "condition": { - "type": "haveInitiative", - "side": "free_people" - }, "modifier": { "type": "addKeyword", "filter": "dwarf", - "keyword": "damage+1" + "keyword": "damage+1", + "condition": { + "type": "haveInitiative", + "side": "free_people" + } } }, { diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set11-errata-playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set11-errata-playtest.json index 3ff05a29a..fddcec0a2 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set11-errata-playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set11-errata-playtest.json @@ -45,7 +45,7 @@ }, "effect": { "type": "transfer", - "filter": "choose(or(possession,condition)),attachedTo(character)", + "filter": "choose(or(possession,condition),attachedTo(character))", "where": "choose(any)", "checkTarget": true } diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set13-errata-playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set13-errata-playtest.json index ca76995ad..423612af2 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set13-errata-playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set13-errata-playtest.json @@ -2,7 +2,7 @@ "83_188": { "title": "Courtyard Parapet", "type": "site", - "block": "Shadows and onwards", + "block": "Shadows", "cost": 0, "keyword": "Dwelling", "direction": "left", 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 3e02e103e..59503402a 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 @@ -23,6 +23,7 @@ public class EffectAppenderFactory { effectAppenderProducers.put("modifystrength", new ModifyStrength()); effectAppenderProducers.put("addkeyword", new AddKeyword()); effectAppenderProducers.put("modifyarcherytotal", new ModifyArcheryTotal()); + effectAppenderProducers.put("modifysitenumber", new ModifySiteNumber()); effectAppenderProducers.put("addburdens", new AddBurdens()); effectAppenderProducers.put("discardtopcardsfromdeck", 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/appender/ModifySiteNumber.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ModifySiteNumber.java new file mode 100644 index 000000000..265187409 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ModifySiteNumber.java @@ -0,0 +1,55 @@ +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.ValueSource; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.cards.build.field.effect.EffectAppender; +import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolver; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.TimeResolver; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.logic.actions.CostToEffectAction; +import com.gempukku.lotro.logic.effects.AddUntilModifierEffect; +import com.gempukku.lotro.logic.modifiers.MinionSiteNumberModifier; +import com.gempukku.lotro.logic.modifiers.StrengthModifier; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; +import com.gempukku.lotro.logic.timing.Effect; +import org.json.simple.JSONObject; + +import java.util.Collection; + +public class ModifySiteNumber implements EffectAppenderProducer { + @Override + public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(effectObject, "amount", "count", "filter", "until", "memorize"); + + final ValueSource amountSource = ValueResolver.resolveEvaluator(effectObject.get("amount"), environment); + final ValueSource valueSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); + final String filter = FieldUtils.getString(effectObject.get("filter"), "filter"); + final String memory = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp"); + final TimeResolver.Time time = TimeResolver.resolveTime(effectObject.get("until"), "end(current)"); + + MultiEffectAppender result = new MultiEffectAppender(); + + result.addEffectAppender( + CardResolver.resolveCards(filter, valueSource, memory, "you", "Choose cards to modify site number of", environment)); + result.addEffectAppender( + new DelayedAppender() { + @Override + protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) { + final Collection cardsFromMemory = actionContext.getCardsFromMemory(memory); + final Evaluator evaluator = amountSource.getEvaluator(actionContext); + final int amount = evaluator.evaluateExpression(actionContext.getGame(), actionContext.getSource()); + return new AddUntilModifierEffect( + new MinionSiteNumberModifier(actionContext.getSource(), Filters.in(cardsFromMemory), amount), time); + } + }); + + return result; + } + +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/MinionSiteNumberModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/MinionSiteNumberModifier.java index 760ac1749..e0bf02b64 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/MinionSiteNumberModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/MinionSiteNumberModifier.java @@ -10,6 +10,10 @@ public class MinionSiteNumberModifier extends AbstractModifier { private Evaluator evaluator; private boolean nonCardTextModifier; + public MinionSiteNumberModifier(PhysicalCard source, Filterable affectFilter, int modifier) { + this(source, affectFilter, null, modifier); + } + public MinionSiteNumberModifier(PhysicalCard source, Filterable affectFilter, Condition condition, int modifier) { this(source, affectFilter, condition, new ConstantEvaluator(modifier)); } diff --git a/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json b/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json index 88d3ea341..8537061a2 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json +++ b/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json @@ -427,7 +427,6 @@ "set":[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "hall":false }, - { "name":"PLAYTEST - PC Fellowship Block", "code":"test_pc_fotr_block", @@ -444,8 +443,8 @@ "sites":"KING", "hall":true, "playtest":true, - "set":[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 51, 52, 53, 71, 72, 73, 101, 151], - "banned":["1_40", "1_45", "1_80", "1_108", "1_138", "1_139", "1_195", "1_234", "1_248", "1_311", "1_313", "1_316", "2_32", "2_75", "2_101", "2_108", "2_121", "3_17", "3_38", "3_42", "3_67", "3_68", "3_106", "3_108", "3_113", "7_49", "7_96", "8_1", "10_2", "10_91"], + "set":[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 51, 52, 53, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 101, 151], + "banned":["1_40", "1_45", "1_80", "1_108", "1_138", "1_139", "1_195", "1_234", "1_248", "1_311", "1_313", "1_316", "2_32", "2_75", "2_101", "2_108", "2_121", "3_17", "3_38", "3_42", "3_67", "3_68", "3_106", "3_108", "3_113", "4_73", "4_192", "4_276", "4_304", "7_49", "7_96", "8_1", "10_2", "10_11", "10_91"] }, { "name":"PLAYTEST - PC Expanded", @@ -453,8 +452,7 @@ "sites":"SHADOWS", "hall":true, "playtest":true, - "banned":["1_40", "1_45", "1_80", "1_108", "1_138", "1_139", "1_195", "1_234", "1_248", "1_311", "1_313", "1_316", "2_32", "2_75", "2_101", "2_108", "2_121", "3_17", "3_38", "3_42", "3_67", "3_68", "3_106", "3_108", "3_113", "4_73", "7_49", "8_1", "10_2", "10_11", "10_91", "11_31", "11_100", "11_132"], - "restricted":["4_276", "4_304"], - "set":[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 51, 52, 53, 71, 72, 73, 101, 151] - }, + "set":[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 51, 52, 53, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 101, 151], + "banned":["1_40", "1_45", "1_80", "1_108", "1_138", "1_139", "1_195", "1_234", "1_248", "1_311", "1_313", "1_316", "2_32", "2_75", "2_101", "2_108", "2_121", "3_17", "3_38", "3_42", "3_67", "3_68", "3_106", "3_108", "3_113", "4_73", "4_192", "4_276", "4_304", "7_49", "7_96", "8_1", "10_2", "10_11", "10_91", "11_31", "11_100", "11_114", "11_132", "13_188", "15_64"] + } ]