From a5c22d9e12522cf4c9fb3df4df31590b89f0dbc1 Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Sat, 7 Dec 2024 13:20:09 -0600 Subject: [PATCH] Fixed events with a phase effect + response never getting to use the phase effect (such as Eye of Barad-dur) --- .../com/gempukku/lotro/logic/PlayUtils.java | 17 ++++++------ .../official/set05/Card_05_096_Tests.java | 26 ++++++++++++------- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/PlayUtils.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/PlayUtils.java index ab1e19f7f..42456cf4a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/PlayUtils.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/PlayUtils.java @@ -93,7 +93,7 @@ public class PlayUtils { final LotroCardBlueprint blueprint = card.getBlueprint(); // Check if card's own play requirements are met - if (!card.getBlueprint().checkPlayRequirements(game, card)) + if (!blueprint.checkPlayRequirements(game, card)) return false; twilightModifier -= game.getModifiersQuerying().getPotentialDiscount(game, card); @@ -122,15 +122,16 @@ public class PlayUtils { && !(checkRuleOfNine(game, card) && checkPlayRingBearer(game, card))) return false; + final Timeword timeword = PhaseKeywordMap.get(game.getGameState().getCurrentPhase()); + if (blueprint.getCardType() == CardType.EVENT) { - if (card.getBlueprint().hasTimeword(Timeword.RESPONSE)) { - if (ignoreResponseEvents) - return false; - } else { - final Timeword timeword = PhaseKeywordMap.get(game.getGameState().getCurrentPhase()); - if (timeword != null && !card.getBlueprint().hasTimeword(timeword)) - return false; + //Some events are dual-timeword, such as Eye of Barad-dur, and so should not be automatically disqualified + if (ignoreResponseEvents && blueprint.hasTimeword(Timeword.RESPONSE) && !blueprint.hasTimeword(timeword)) { + return false; } + + if (!blueprint.hasTimeword(Timeword.RESPONSE) && timeword != null && !card.getBlueprint().hasTimeword(timeword)) + return false; } return (blueprint.getSide() != Side.SHADOW || canPayForShadowCard(game, card, finalTargetFilter, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty)); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set05/Card_05_096_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set05/Card_05_096_Tests.java index ad3cd07ac..f8a3d34cf 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set05/Card_05_096_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set05/Card_05_096_Tests.java @@ -20,8 +20,8 @@ public class Card_05_096_Tests return new GenericCardTestHelper( new HashMap<>() {{ - put("card", "5_96"); - // put other cards in here as needed for the test case + put("eye", "5_96"); + put("orc", "1_266"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -46,7 +46,7 @@ public class Card_05_096_Tests var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsCard("eye"); assertEquals("Eye of Barad-Dûr", card.getBlueprint().getTitle()); assertNull(card.getBlueprint().getSubtitle()); @@ -59,18 +59,24 @@ public class Card_05_096_Tests assertEquals(0, card.getBlueprint().getTwilightCost()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void EyeofBaradDurTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void EyeofBaradDurSkirmishAbility() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var eye = scn.GetShadowCard("eye"); + var orc = scn.GetShadowCard("orc"); + scn.ShadowMoveCardToHand(eye); + scn.ShadowMoveCharToTable(orc); + + var frodo = scn.GetRingBearer(); scn.StartGame(); - scn.FreepsPlayCard(card); + scn.SkipToAssignments(); + scn.FreepsAssignToMinions(frodo, orc); + scn.FreepsResolveSkirmish(frodo); + scn.FreepsPassCurrentPhaseAction(); - assertEquals(0, scn.GetTwilight()); + assertTrue(scn.ShadowPlayAvailable(eye)); } }