From c525d6791704205158ef4023ac8b212fbc6e823d Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Thu, 20 Mar 2025 19:07:46 -0500 Subject: [PATCH] Fixed add/remove culture token triggers having the source and target filters reversed. Fixes V2 Now for Ruin failing to trigger when its tokens are reinforced. --- .../effect/trigger/AddsCultureToken.java | 2 +- .../effect/trigger/RemovesCultureToken.java | 2 +- .../lotro/logic/timing/TriggerConditions.java | 4 +-- .../pc/vsets/set_v02/Card_V2_052_Tests.java | 31 ++++++++++++------- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AddsCultureToken.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AddsCultureToken.java index d125a4d39..691bc5371 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AddsCultureToken.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AddsCultureToken.java @@ -24,7 +24,7 @@ public class AddsCultureToken implements TriggerCheckerProducer { public boolean accepts(ActionContext actionContext) { String playerId = playerSource != null ? playerSource.getPlayer(actionContext) : null; return TriggerConditions.addedCultureToken(actionContext.getGame(), playerId, actionContext.getEffectResult(), - onSourceFilter.getFilterable(actionContext), sourceFilter.getFilterable(actionContext)); + sourceFilter.getFilterable(actionContext), onSourceFilter.getFilterable(actionContext)); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RemovesCultureToken.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RemovesCultureToken.java index dd04565b4..6d15907e0 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RemovesCultureToken.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/RemovesCultureToken.java @@ -24,7 +24,7 @@ public class RemovesCultureToken implements TriggerCheckerProducer { public boolean accepts(ActionContext actionContext) { String playerId = playerSource != null ? playerSource.getPlayer(actionContext) : null; return TriggerConditions.removedCultureToken(actionContext.getGame(), playerId, actionContext.getEffectResult(), - onSourceFilter.getFilterable(actionContext), sourceFilter.getFilterable(actionContext)); + sourceFilter.getFilterable(actionContext), onSourceFilter.getFilterable(actionContext)); } @Override 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 b3e3ec17d..2d06f0363 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 @@ -71,7 +71,7 @@ public class TriggerConditions { if (playerId != null && !playerId.equals(tokenResult.getPerformingPlayer())) return false; return Filters.accepts(game, from, tokenResult.getSource()) - && Filters.and(targetFilters).accepts(game, tokenResult.getSource()); + && Filters.and(targetFilters).accepts(game, tokenResult.getTarget()); } return false; } @@ -82,7 +82,7 @@ public class TriggerConditions { if (playerId != null && !playerId.equals(tokenResult.getPerformingPlayer())) return false; return Filters.accepts(game, from, tokenResult.getSource()) - && Filters.and(targetFilters).accepts(game, tokenResult.getSource()); + && Filters.and(targetFilters).accepts(game, tokenResult.getTarget()); } return false; } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_052_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_052_Tests.java index 744894132..dd5b7f1b5 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_052_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_052_Tests.java @@ -3,7 +3,6 @@ package com.gempukku.lotro.cards.unofficial.pc.vsets.set_v02; import com.gempukku.lotro.cards.GenericCardTestHelper; import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.CardNotFoundException; -import com.gempukku.lotro.game.PhysicalCardImpl; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import org.junit.Test; @@ -18,8 +17,10 @@ public class Card_V2_052_Tests return new GenericCardTestHelper( new HashMap<>() {{ - put("card", "102_52"); - // put other cards in here as needed for the test case + put("ruin", "102_52"); + put("eowyn", "13_124"); + put("arrowslits", "5_80"); + }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -45,7 +46,7 @@ public class Card_V2_052_Tests var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsCard("ruin"); assertEquals("Now for Ruin", card.getBlueprint().getTitle()); assertNull(card.getBlueprint().getSubtitle()); @@ -57,18 +58,26 @@ public class Card_V2_052_Tests assertEquals(1, card.getBlueprint().getTwilightCost()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void NowforRuinTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void NowforRuinTriggersOnReinforceOfSecondToken() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var ruin = scn.GetFreepsCard("ruin"); + var arrowslits = scn.GetFreepsCard("arrowslits"); + scn.FreepsMoveCardToSupportArea(ruin); + scn.FreepsMoveCardToDiscard(arrowslits); + scn.FreepsMoveCharToTable("eowyn"); // On a regroup move, reinforces a Rohan token scn.StartGame(); - scn.FreepsPlayCard(card); + scn.AddTokensToCard(ruin, 2); + scn.SkipToMovementDecision(); - assertEquals(1, scn.GetTwilight()); + assertEquals(2, scn.GetCultureTokensOn(ruin)); + assertEquals(Zone.DISCARD, arrowslits.getZone()); + scn.FreepsChooseToMove(); + scn.FreepsAcceptOptionalTrigger(); //Eowyn's reinforcement + assertEquals(0, scn.GetCultureTokensOn(ruin)); + assertEquals(Zone.SUPPORT, arrowslits.getZone()); } }