diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TurnProcedure.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TurnProcedure.java index c460460bc..d49161312 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TurnProcedure.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/TurnProcedure.java @@ -171,8 +171,20 @@ public class TurnProcedure { for (EffectResult effectResult : _effectResults) { if (effectResult.getType() == EffectResult.Type.ANY_NUMBER_KILLED) { KilledResult killResult = (KilledResult) effectResult; + if (Filters.acceptsAny(_game, killResult.getKilledCards(), Filters.ringBearer)) return true; + + //TODO: Make a better filter that keys off of "can become ring-bearer" rather than + // assuming that will always be Sam. + //If Sam is killed as a response to triggering *his* response, then the game flounders + // and never properly evaluates the ring-bearer as dying. So as a hack, we will check + // for *Sam's* death and see if the Ring-bearer is dead at that time as well. + if (Filters.acceptsAny(_game, killResult.getKilledCards(), Filters.sam)) { + var ringBearer = _game.getGameState().getRingBearer( _game.getGameState().getCurrentPlayerId()); + if (ringBearer.getZone() == null || !ringBearer.getZone().isInPlay()) + return true; + } } if (effectResult.getType() == EffectResult.Type.FOR_EACH_RETURNED_TO_HAND) { ReturnCardsToHandResult returnResult = (ReturnCardsToHandResult) effectResult; diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java index 10fb90870..2a919d53d 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java @@ -1104,6 +1104,10 @@ public class GenericCardTestHelper extends AbstractAtTest { playerDecided(playerID, option); } + public boolean GameIsFinished() { + return _game.isFinished(); + } + public void FreepsResolveRuleFirst() throws DecisionResultInvalidException { FreepsResolveActionOrder(null); } public void FreepsResolveActionOrder(String option) throws DecisionResultInvalidException { ChooseAction(P1, "actionText", option); } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set01/Card_01_311_ErrataTests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set01/Card_01_311_ErrataTests.java index 714e4a4cc..58cde2afc 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set01/Card_01_311_ErrataTests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set01/Card_01_311_ErrataTests.java @@ -165,5 +165,6 @@ public class Card_01_311_ErrataTests assertTrue(scn.FreepsHasOptionalTriggerAvailable()); scn.FreepsAcceptOptionalTrigger(); assertSame(scn.GetRingBearer(), sam); + assertFalse(scn.GameIsFinished()); } }