diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/SkirmishPhaseAction.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/SkirmishPhaseAction.java index 6547d8ce6..0224218aa 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/SkirmishPhaseAction.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/SkirmishPhaseAction.java @@ -52,7 +52,7 @@ public class SkirmishPhaseAction extends SystemQueueAction { } }); appendEffect( - new TriggeringResultEffect(null, new SkirmishAboutToEndResult(shadowCharacters), "Skirmish about to end")); + new TriggeringResultEffect(null, new SkirmishAboutToEndResult(fellowshipCharacter, shadowCharacters), "Skirmish about to end")); appendEffect( new TriggeringResultEffect(null, new EndOfPhaseResult(Phase.SKIRMISH), "End of skirmish phase")); appendEffect( 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 83bc452c8..b3e3ec17d 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 @@ -271,10 +271,10 @@ public class TriggerConditions { return false; } - public static boolean isSkirmishAboutToEnd(EffectResult effectResult, LotroGame game, Filterable... minionsInvolving) { + public static boolean isSkirmishAboutToEnd(EffectResult effectResult, LotroGame game, Filterable... charactersInvolving) { if (effectResult.getType() == EffectResult.Type.SKIRMISH_ABOUT_TO_END) { SkirmishAboutToEndResult skirmishAboutToEnd = (SkirmishAboutToEndResult) effectResult; - return Filters.acceptsAny(game, skirmishAboutToEnd.getMinionsInvolved(), minionsInvolving); + return Filters.acceptsAny(game, skirmishAboutToEnd.getAllInvolved(), charactersInvolving); } return false; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishAboutToEndResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishAboutToEndResult.java index 62feb5816..68c214e00 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishAboutToEndResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishAboutToEndResult.java @@ -3,17 +3,31 @@ package com.gempukku.lotro.logic.timing.results; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.logic.timing.EffectResult; +import java.util.HashSet; +import java.util.Objects; import java.util.Set; public class SkirmishAboutToEndResult extends EffectResult { private final Set _minionsInvolved; + private final PhysicalCard _freepsInvolved; - public SkirmishAboutToEndResult(Set minionsInvolved) { + public SkirmishAboutToEndResult(PhysicalCard freepsInvolved, Set minionsInvolved) { super(EffectResult.Type.SKIRMISH_ABOUT_TO_END); - _minionsInvolved = minionsInvolved; + _freepsInvolved = freepsInvolved; + _minionsInvolved = Objects.requireNonNullElseGet(minionsInvolved, HashSet::new); } public Set getMinionsInvolved() { return _minionsInvolved; } + + public PhysicalCard getFreepsInvolved() { + return _freepsInvolved; + } + + public Set getAllInvolved() { + var everyone = new HashSet<>(_minionsInvolved); + everyone.add(_freepsInvolved); + return everyone; + } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set08/Card_08_113_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set08/Card_08_113_Tests.java index d124602d7..c8c2e72af 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set08/Card_08_113_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set08/Card_08_113_Tests.java @@ -3,7 +3,6 @@ package com.gempukku.lotro.cards.official.set08; 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,8 @@ public class Card_08_113_Tests return new GenericCardTestHelper( new HashMap<>() {{ - put("card", "8_113"); - // put other cards in here as needed for the test case + put("sting", "8_113"); + put("shelob", "8_25"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -40,12 +39,14 @@ public class Card_08_113_Tests * Type: Possession * Subtype: Hand weapon * Strength: 2 - * Game Text: Bearer must be Frodo or Sam.
Response: If a fierce skirmish involving bearer is about to end, add a threat to discard a minion involved in that skirmish. + * Game Text: Bearer must be Frodo or Sam. + * Response: If a fierce skirmish involving bearer is about to end, add a threat to discard a minion + * involved in that skirmish. */ var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsCard("sting"); assertEquals("Sting", card.getBlueprint().getTitle()); assertEquals("Bane of the Eight Legs", card.getBlueprint().getSubtitle()); @@ -58,18 +59,39 @@ public class Card_08_113_Tests assertEquals(2, card.getBlueprint().getStrength()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void StingTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void StingTriggersAfterFierceButNotRegularSkirmish() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var frodo = scn.GetRingBearer(); + var sting = scn.GetFreepsCard("sting"); + scn.FreepsAttachCardsTo(frodo, sting); + + var shelob = scn.GetShadowCard("shelob"); + scn.ShadowMoveCharToTable(shelob); scn.StartGame(); - scn.FreepsPlayCard(card); + scn.SkipToAssignments(); + scn.FreepsAssignToMinions(frodo, shelob); + scn.FreepsResolveSkirmish(frodo); + scn.PassCurrentPhaseActions(); + scn.FreepsDeclineOptionalTrigger(); //Ring converting burdens + assertFalse(scn.FreepsDecisionAvailable("Sting")); - assertEquals(1, scn.GetTwilight()); + //Fierce assignment + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(frodo, shelob); + scn.FreepsResolveSkirmish(frodo); + scn.PassCurrentPhaseActions(); + + scn.FreepsDeclineOptionalTrigger(); //Ring converting burdens + assertTrue(scn.FreepsHasOptionalTriggerAvailable()); + + assertEquals(0, scn.GetThreats()); + assertEquals(Zone.SHADOW_CHARACTERS, shelob.getZone()); + scn.FreepsAcceptOptionalTrigger(); + assertEquals(1, scn.GetThreats()); + assertEquals(Zone.DISCARD, shelob.getZone()); } }