diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set19/set19-Ringwraith-errata.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set19/set19-Ringwraith-errata.hjson index bd6db9e54..35b474066 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set19/set19-Ringwraith-errata.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set19/set19-Ringwraith-errata.hjson @@ -116,7 +116,7 @@ { type: trigger trigger: { - type: freeplayerstartedassigning + type: fpstartedassigning } effect: [ { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-elven.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-elven.hjson index 965f9350d..1f2d645e3 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-elven.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-elven.hjson @@ -676,7 +676,7 @@ effects: { type: trigger trigger: { - type: revealCardFromTopOfDrawDeck + type: revealsCardFromTopOfDrawDeck filter: culture(elven) } optional: true @@ -942,7 +942,7 @@ effects: { type: trigger trigger: { - type: revealCardFromTopOfDrawDeck + type: revealsCardFromTopOfDrawDeck } optional: true cost: { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-shire.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-shire.hjson index 33c329d01..16aa90503 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-shire.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/second-edition/set40/set40-shire.hjson @@ -410,7 +410,7 @@ { type: modifier modifier: { - type: classSpot + type: ItemClassSpot class: pipe } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantRemoveBurdens.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantRemoveBurdens.java index ceb813dae..7b7bb84d1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantRemoveBurdens.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantRemoveBurdens.java @@ -11,7 +11,7 @@ public class CantRemoveBurdens implements ModifierSourceProducer { FieldUtils.validateAllowedFields(object, "filter", "requires"); final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires"); - final String filter = FieldUtils.getString(object.get("filter"), "filter"); + final String filter = FieldUtils.getString(object.get("filter"), "filter", "any"); final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment); final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ClassSpot.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ItemClassSpot.java similarity index 94% rename from gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ClassSpot.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ItemClassSpot.java index ac3af72cc..5ba277f3e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ClassSpot.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ItemClassSpot.java @@ -10,7 +10,7 @@ import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.PossessionClassSpotModifier; import org.json.simple.JSONObject; -public class ClassSpot implements ModifierSourceProducer { +public class ItemClassSpot implements ModifierSourceProducer { @Override public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(object, "class"); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java index 9be3964d0..64579bc00 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java @@ -45,12 +45,12 @@ public class ModifierSourceFactory { modifierProducers.put("canttakemorewoundsthan", new CantTakeMoreWoundsThan()); modifierProducers.put("canttakewounds", new CantTakeWounds()); modifierProducers.put("cantusespecialabilities", new CantUseSpecialAbilities()); - modifierProducers.put("classspot", new ClassSpot()); modifierProducers.put("extracosttoplay", new ExtraCostToPlay()); modifierProducers.put("fpculturespot", new FPCultureSpot()); modifierProducers.put("fpusesresinsteadofstr", new FPUsesResInsteadOfStr()); modifierProducers.put("fpusesvitinsteadofstr", new FPUsesVitInsteadOfStr()); modifierProducers.put("hastomoveifable", new HasToMoveIfAble()); + modifierProducers.put("itemclassspot", new ItemClassSpot()); modifierProducers.put("modifyarcherytotal", new ModifyArcheryTotal()); modifierProducers.put("modifycost", new ModifyCost()); modifierProducers.put("modifymovelimit", new ModifyMoveLimit()); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/MemoryLike.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/MemoryLike.java index a39e63384..5b53b818b 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/MemoryLike.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/MemoryLike.java @@ -16,7 +16,7 @@ public class MemoryLike implements RequirementProducer { return (actionContext) -> { String valueFromMemory = actionContext.getValueFromMemory(memory); - return valueFromMemory != null && valueFromMemory.contains(value); + return valueFromMemory != null && valueFromMemory.toLowerCase().contains(value.toLowerCase()); }; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/ActivatedTriggerCheckerProducer.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/ActivatedTriggerCheckerProducer.java deleted file mode 100644 index 2f322901d..000000000 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/ActivatedTriggerCheckerProducer.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.gempukku.lotro.cards.build.field.effect.trigger; - -import com.gempukku.lotro.cards.build.ActionContext; -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.FieldUtils; -import com.gempukku.lotro.common.Filterable; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.timing.results.ActivateCardResult; -import org.json.simple.JSONObject; - -public class ActivatedTriggerCheckerProducer implements TriggerCheckerProducer { - @Override - public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(value, "filter", "memorize"); - - final String filterString = FieldUtils.getString(value.get("filter"), "filter"); - final String memorize = FieldUtils.getString(value.get("memorize"), "memorize"); - final FilterableSource filter = environment.getFilterFactory().generateFilter(filterString, environment); - return new TriggerChecker() { - @Override - public boolean accepts(ActionContext actionContext) { - final Filterable filterable = filter.getFilterable(actionContext); - boolean activated = TriggerConditions.activated(actionContext.getGame(), actionContext.getEffectResult(), filterable); - - if (activated) { - ActivateCardResult activateCardResult = (ActivateCardResult) actionContext.getEffectResult(); - - if (memorize != null) { - PhysicalCard playedCard = activateCardResult.getSource(); - actionContext.setCardMemory(memorize, playedCard); - } - } - return activated; - } - - @Override - public boolean isBefore() { - return false; - } - }; - } -} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/FreePlayerStartedAssigning.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/FPStartedAssigning.java similarity index 71% rename from gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/FreePlayerStartedAssigning.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/FPStartedAssigning.java index 55f968b23..a5876aad8 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/FreePlayerStartedAssigning.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/FPStartedAssigning.java @@ -2,19 +2,15 @@ package com.gempukku.lotro.cards.build.field.effect.trigger; import com.gempukku.lotro.cards.build.ActionContext; 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.FieldUtils; import com.gempukku.lotro.logic.timing.TriggerConditions; import org.json.simple.JSONObject; -public class FreePlayerStartedAssigning implements TriggerCheckerProducer { +public class FPStartedAssigning implements TriggerCheckerProducer { @Override public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(value, "filter"); - - String filter = FieldUtils.getString(value.get("filter"), "filter", "any"); - final FilterableSource fpFilter = environment.getFilterFactory().generateFilter(filter, environment); + FieldUtils.validateAllowedFields(value); return new TriggerChecker() { @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Moves.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Moves.java index 19f11f314..29af45067 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Moves.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Moves.java @@ -10,7 +10,7 @@ import org.json.simple.JSONObject; public class Moves implements TriggerCheckerProducer { @Override public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(value, "filter"); + FieldUtils.validateAllowedFields(value); return new TriggerChecker() { @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/PutsOnRing.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/PutsOnRing.java index 987de80dd..73f9f1908 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/PutsOnRing.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/PutsOnRing.java @@ -10,7 +10,7 @@ import org.json.simple.JSONObject; public class PutsOnRing implements TriggerCheckerProducer { @Override public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(value, "filter"); + FieldUtils.validateAllowedFields(value); return new TriggerChecker() { @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealCardFromTopOfDrawDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealsCardFromTopOfDrawDeck.java similarity index 96% rename from gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealCardFromTopOfDrawDeck.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealsCardFromTopOfDrawDeck.java index 2e8598cbd..e29997b45 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealCardFromTopOfDrawDeck.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RevealsCardFromTopOfDrawDeck.java @@ -12,7 +12,7 @@ import com.gempukku.lotro.logic.timing.TriggerConditions; import com.gempukku.lotro.logic.timing.results.RevealCardFromTopOfDeckResult; import org.json.simple.JSONObject; -public class RevealCardFromTopOfDrawDeck implements TriggerCheckerProducer { +public class RevealsCardFromTopOfDrawDeck implements TriggerCheckerProducer { @Override public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(value, "filter"); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesOffRing.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesOffRing.java index 65259ced7..0a4eae95d 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesOffRing.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TakesOffRing.java @@ -10,7 +10,7 @@ import org.json.simple.JSONObject; public class TakesOffRing implements TriggerCheckerProducer { @Override public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(value, "filter"); + FieldUtils.validateAllowedFields(value); return new TriggerChecker() { @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java index 6cd92b598..da592a8fd 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java @@ -18,7 +18,6 @@ public class TriggerCheckerFactory { triggerCheckers.put("abouttoheal", new AboutToHeal()); triggerCheckers.put("abouttomoveto", new AboutToMoveTo()); triggerCheckers.put("abouttotakewound", new AboutToTakeWound()); - triggerCheckers.put("activated", new ActivatedTriggerCheckerProducer()); triggerCheckers.put("addsburden", new AddsBurden()); triggerCheckers.put("addsthreat", new AddsThreat()); triggerCheckers.put("assignedagainst", new AssignedAgainst()); @@ -33,7 +32,7 @@ public class TriggerCheckerFactory { triggerCheckers.put("endofturn", new EndOfTurn()); triggerCheckers.put("exertedby", new ExertedBy()); triggerCheckers.put("exerts", new Exerts()); - triggerCheckers.put("freeplayerstartedassigning", new FreePlayerStartedAssigning()); + triggerCheckers.put("fpstartedassigning", new FPStartedAssigning()); triggerCheckers.put("heals", new Heals()); triggerCheckers.put("killed", new Killed()); triggerCheckers.put("losesinitiative", new LosesInitiative()); @@ -46,7 +45,7 @@ public class TriggerCheckerFactory { triggerCheckers.put("putsonring", new PutsOnRing()); triggerCheckers.put("reconciles", new Reconciles()); triggerCheckers.put("removesburden", new RemovesBurden()); - triggerCheckers.put("revealcardfromtopofdrawdeck", new RevealCardFromTopOfDrawDeck()); + triggerCheckers.put("revealscardfromtopofdrawdeck", new RevealsCardFromTopOfDrawDeck()); triggerCheckers.put("startofphase", new StartOfPhase()); triggerCheckers.put("startofturn", new StartOfTurn()); triggerCheckers.put("takesoffring", new TakesOffRing()); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/UsesSpecialAbility.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/UsesSpecialAbility.java index 506c8cc7c..58a1fc95a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/UsesSpecialAbility.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/UsesSpecialAbility.java @@ -5,17 +5,20 @@ 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.FieldUtils; +import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.logic.timing.TriggerConditions; +import com.gempukku.lotro.logic.timing.results.ActivateCardResult; import org.json.simple.JSONObject; public class UsesSpecialAbility implements TriggerCheckerProducer { @Override public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(value, "filter"); - String filter = FieldUtils.getString(value.get("filter"), "filter", "any"); + FieldUtils.validateAllowedFields(value, "filter", "memorize"); + String filter = FieldUtils.getString(value.get("filter"), "filter", "any"); final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment); + final String memorize = FieldUtils.getString(value.get("memorize"), "memorize"); return new TriggerChecker() { @Override public boolean isBefore() { @@ -24,7 +27,17 @@ public class UsesSpecialAbility implements TriggerCheckerProducer { @Override public boolean accepts(ActionContext actionContext) { - return TriggerConditions.activated(actionContext.getGame(), actionContext.getEffectResult(), filterableSource.getFilterable(actionContext)); + boolean activated = TriggerConditions.activated(actionContext.getGame(), actionContext.getEffectResult(), filterableSource.getFilterable(actionContext)); + + if (activated) { + ActivateCardResult activateCardResult = (ActivateCardResult) actionContext.getEffectResult(); + + if (memorize != null) { + PhysicalCard playedCard = activateCardResult.getSource(); + actionContext.setCardMemory(memorize, playedCard); + } + } + return activated; } }; }