Fixed certain stacked cards causing a crash when stacked, such as Gorgoroth Pillager.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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); }
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user