Fixed certain stacked cards causing a crash when stacked, such as Gorgoroth Pillager.

This commit is contained in:
Christian 'ketura' McCarty
2025-01-03 01:30:54 -06:00
parent 486f0c78e7
commit 79b719a603
3 changed files with 47 additions and 11 deletions

View File

@@ -137,7 +137,18 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
else {
LinkedList<Modifier> liveModifiers = new LinkedList<>();
for (Modifier modifier : modifiers) {
if (keyword == null || ((KeywordAffectingModifier) modifier).getKeyword() == keyword || ((KeywordAffectingModifier) modifier).getKeyword() == null) {
boolean keywordMatches = false;
if(modifier instanceof KeywordAffectingModifier keyModifier) {
keywordMatches = keyModifier.getKeyword() == null || keyModifier.getKeyword() == keyword;
}
else if(modifier instanceof DelegateModifier delegateModifier) {
if(delegateModifier.delegate instanceof KeywordAffectingModifier keyModifier) {
keywordMatches = keyModifier.getKeyword() == null || keyModifier.getKeyword() == keyword;
}
}
if (keyword == null || keywordMatches) {
if (!_skipSet.contains(modifier)) {
_skipSet.add(modifier);
Condition condition = modifier.getCondition();

View File

@@ -14,7 +14,9 @@ import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.decisions.AwaitingDecision;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.effects.TakeControlOfASiteEffect;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.RuleUtils;
@@ -23,6 +25,8 @@ import org.junit.Assert;
import java.util.*;
import static org.junit.Assert.assertTrue;
public class GenericCardTestHelper extends AbstractAtTest {
private final int LastCardID = 100;
@@ -1089,6 +1093,17 @@ public class GenericCardTestHelper extends AbstractAtTest {
_game.getActionsEnvironment().addUntilEndOfTurnActionProxy(action);
}
public void ShadowTakeControlOfSite() throws DecisionResultInvalidException {
ShadowExecuteAdHocEffect(new TakeControlOfASiteEffect(null, P2));
}
public void FreepsExecuteAdHocEffect(Effect effect) throws DecisionResultInvalidException { ExecuteAdHocEffect(P1, effect); }
public void ShadowExecuteAdHocEffect(Effect effect) throws DecisionResultInvalidException { ExecuteAdHocEffect(P2, effect); }
public void ExecuteAdHocEffect(String playerId, Effect effect) throws DecisionResultInvalidException {
carryOutEffectInPhaseActionByPlayer(playerId, effect);
assertTrue(effect.wasCarriedOut());
}
public void FreepsChoose(String choice) throws DecisionResultInvalidException { playerDecided(P1, choice); }
public void FreepsChoose(String...choices) throws DecisionResultInvalidException { playerDecided(P1, String.join(",", choices)); }
public void ShadowChoose(String choice) throws DecisionResultInvalidException { playerDecided(P2, choice); }

View File

@@ -17,8 +17,8 @@ public class Card_07_275_Tests
return new GenericCardTestHelper(
new HashMap<>()
{{
put("card", "7_275");
// put other cards in here as needed for the test case
put("pillager", "7_275");
put("troop", "7_279");
}},
GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo,
@@ -46,7 +46,7 @@ public class Card_07_275_Tests
var scn = GetScenario();
var card = scn.GetFreepsCard("card");
var card = scn.GetFreepsCard("pillager");
assertEquals("Gorgoroth Pillager", card.getBlueprint().getTitle());
assertNull(card.getBlueprint().getSubtitle());
@@ -62,18 +62,28 @@ public class Card_07_275_Tests
assertEquals(5, card.getBlueprint().getSiteNumber());
}
// Uncomment any @Test markers below once this is ready to be used
//@Test
public void GorgorothPillagerTest1() throws DecisionResultInvalidException, CardNotFoundException {
@Test
public void GorgorothPillagerMakesBesiegersFierceWhenStackedOnSiteYouControl() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
var scn = GetScenario();
var card = scn.GetFreepsCard("card");
scn.FreepsMoveCardToHand(card);
var site1 = scn.GetFreepsSite(1);
var pillager = scn.GetShadowCard("pillager");
var troop = scn.GetShadowCard("troop");
scn.ShadowMoveCardToDiscard(pillager, troop);
scn.StartGame();
scn.FreepsPlayCard(card);
assertEquals(4, scn.GetTwilight());
scn.SkipToSite(2);
scn.FreepsPassCurrentPhaseAction();
scn.ShadowTakeControlOfSite();
assertTrue(scn.IsSiteControlled(site1));
scn.ShadowMoveCharToTable(troop);
scn.StackCardsOn(site1, pillager);
assertTrue(scn.hasKeyword(troop, Keyword.FIERCE));
}
}