From 014acd0975defdc0e970c11e7e6354627d49f8b2 Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Wed, 13 Jul 2022 03:40:29 -0500 Subject: [PATCH] Adjustments to the healing revamp. Made the PlayerResolver more flexible --- .../src/main/web/cards/set17/set17-wraith.json | 2 +- .../effect/appender/resolver/PlayerResolver.java | 14 +++++++++----- .../cards/build/field/effect/trigger/Heals.java | 13 ++++++------- .../lotro/logic/timing/TriggerConditions.java | 8 ++++---- .../cards/official/set17/Card_17_140_Tests.java | 9 ++++----- 5 files changed, 24 insertions(+), 22 deletions(-) diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set17/set17-wraith.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set17/set17-wraith.json index e48bfc7a1..8c00a7608 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set17/set17-wraith.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set17/set17-wraith.json @@ -18,7 +18,7 @@ "trigger": { "type": "heals", "filter": "companion", - "side": "free people" + "player": "free peoples" }, "effect": { "type": "addburdens", diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/PlayerResolver.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/PlayerResolver.java index 05b242cf3..1f07b3ea3 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/PlayerResolver.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/resolver/PlayerResolver.java @@ -6,17 +6,21 @@ import com.gempukku.lotro.cards.build.PlayerSource; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.logic.GameUtils; +import java.util.Locale; + public class PlayerResolver { public static PlayerSource resolvePlayer(String type, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - if (type.equals("you")) + + if (type.equalsIgnoreCase("you")) return (actionContext) -> actionContext.getPerformingPlayer(); - if (type.equals("owner")) + if (type.equalsIgnoreCase("owner")) return (actionContext) -> actionContext.getSource().getOwner(); - else if (type.equals("shadowPlayer")) + else if (type.equalsIgnoreCase("shadowPlayer") || type.equalsIgnoreCase("shadow")) return (actionContext) -> GameUtils.getFirstShadowPlayer(actionContext.getGame()); - else if (type.equals("fp")) + else if (type.equalsIgnoreCase("fp") || type.equalsIgnoreCase("freeps") + || type.equalsIgnoreCase("free peoples") || type.equalsIgnoreCase("free people")) return ((actionContext) -> actionContext.getGame().getGameState().getCurrentPlayerId()); - else if (type.startsWith("ownerFromMemory(") && type.endsWith(")")) { + else if (type.toLowerCase(Locale.ROOT).startsWith("ownerfrommemory(") && type.endsWith(")")) { String memory = type.substring(type.indexOf("(") + 1, type.lastIndexOf(")")); return (actionContext) -> { final PhysicalCard cardFromMemory = actionContext.getCardFromMemory(memory); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Heals.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Heals.java index 54a775167..3e44b467a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Heals.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/Heals.java @@ -1,10 +1,8 @@ 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.*; import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver; import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.common.Side; import com.gempukku.lotro.game.PhysicalCard; @@ -15,11 +13,12 @@ import org.json.simple.JSONObject; public class Heals implements TriggerCheckerProducer { @Override public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(value, "filter", "side", "memorize"); + FieldUtils.validateAllowedFields(value, "filter", "player", "memorize"); final String filter = FieldUtils.getString(value.get("filter"), "filter", "any"); final String memorize = FieldUtils.getString(value.get("memorize"), "memorize"); - final Side side = FieldUtils.getEnum(Side.class, value.get("side"), "side"); + final String player = FieldUtils.getString(value.get("player"), "player", "you"); + final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment); final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment); @@ -32,7 +31,7 @@ public class Heals implements TriggerCheckerProducer { @Override public boolean accepts(ActionContext actionContext) { final Filterable filterable = filterableSource.getFilterable(actionContext); - final boolean result = TriggerConditions.forEachHealed(actionContext.getGame(), actionContext.getEffectResult(), side, filterable); + final boolean result = TriggerConditions.forEachHealed(actionContext.getGame(), actionContext.getEffectResult(), playerSource.getPlayer(actionContext), filterable); if (result && memorize != null) { final PhysicalCard healedCard = ((HealResult) actionContext.getEffectResult()).getHealedCard(); actionContext.setCardMemory(memorize, healedCard); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TriggerConditions.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TriggerConditions.java index 29614286f..44a5122c2 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TriggerConditions.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TriggerConditions.java @@ -1,5 +1,7 @@ package com.gempukku.lotro.logic.timing; +import com.gempukku.lotro.cards.build.PlayerSource; +import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver; import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Side; @@ -219,14 +221,12 @@ public class TriggerConditions { return false; } - public static boolean forEachHealed(LotroGame game, EffectResult effectResult, Side side, Filterable... filters) { + public static boolean forEachHealed(LotroGame game, EffectResult effectResult, String player, Filterable... filters) { if (effectResult.getType() != EffectResult.Type.FOR_EACH_HEALED) return false; HealResult healResult = (HealResult)effectResult; - String fpPlayer = game.getGameState().getCurrentPlayerId(); - if (side == null ||(side == Side.FREE_PEOPLE && fpPlayer.equals(healResult.getPerformingPlayer())) - || (side == Side.SHADOW && !fpPlayer.equals(healResult.getPerformingPlayer()))) + if (player.equals(healResult.getPerformingPlayer())) return Filters.and(filters).accepts(game, ((HealResult) effectResult).getHealedCard()); else return false; diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set17/Card_17_140_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set17/Card_17_140_Tests.java index f9af2a588..b07c174ca 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set17/Card_17_140_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set17/Card_17_140_Tests.java @@ -171,7 +171,7 @@ public class Card_17_140_Tests } @Test - public void EndOfTheGameDoesNotTriggerEnquea() throws DecisionResultInvalidException, CardNotFoundException { + public void EndOfTheGameTriggersEnquea() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); @@ -209,10 +209,9 @@ public class Card_17_140_Tests scn.FreepsChooseMultipleChoiceOption("Heal"); assertEquals(2, scn.GetWoundsOn(aragorn)); - //We should have no Enquea triggers - assertFalse(scn.ShadowHasOptionalTriggerAvailable()); - //We should see no burdens added from Enquea as DT is a shadow card. - assertEquals(0, scn.GetBurdens()); + //As a Freeps healing source, we should have the Enquea trigger + assertTrue(scn.ShadowHasOptionalTriggerAvailable()); + }