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 {
|
else {
|
||||||
LinkedList<Modifier> liveModifiers = new LinkedList<>();
|
LinkedList<Modifier> liveModifiers = new LinkedList<>();
|
||||||
for (Modifier modifier : modifiers) {
|
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)) {
|
if (!_skipSet.contains(modifier)) {
|
||||||
_skipSet.add(modifier);
|
_skipSet.add(modifier);
|
||||||
Condition condition = modifier.getCondition();
|
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.AwaitingDecision;
|
||||||
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
|
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
|
||||||
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
|
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.modifiers.Modifier;
|
||||||
|
import com.gempukku.lotro.logic.timing.Effect;
|
||||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||||
import com.gempukku.lotro.logic.timing.PlayConditions;
|
import com.gempukku.lotro.logic.timing.PlayConditions;
|
||||||
import com.gempukku.lotro.logic.timing.RuleUtils;
|
import com.gempukku.lotro.logic.timing.RuleUtils;
|
||||||
@@ -23,6 +25,8 @@ import org.junit.Assert;
|
|||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
public class GenericCardTestHelper extends AbstractAtTest {
|
public class GenericCardTestHelper extends AbstractAtTest {
|
||||||
|
|
||||||
private final int LastCardID = 100;
|
private final int LastCardID = 100;
|
||||||
@@ -1089,6 +1093,17 @@ public class GenericCardTestHelper extends AbstractAtTest {
|
|||||||
_game.getActionsEnvironment().addUntilEndOfTurnActionProxy(action);
|
_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 choice) throws DecisionResultInvalidException { playerDecided(P1, choice); }
|
||||||
public void FreepsChoose(String...choices) throws DecisionResultInvalidException { playerDecided(P1, String.join(",", choices)); }
|
public void FreepsChoose(String...choices) throws DecisionResultInvalidException { playerDecided(P1, String.join(",", choices)); }
|
||||||
public void ShadowChoose(String choice) throws DecisionResultInvalidException { playerDecided(P2, choice); }
|
public void ShadowChoose(String choice) throws DecisionResultInvalidException { playerDecided(P2, choice); }
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ public class Card_07_275_Tests
|
|||||||
return new GenericCardTestHelper(
|
return new GenericCardTestHelper(
|
||||||
new HashMap<>()
|
new HashMap<>()
|
||||||
{{
|
{{
|
||||||
put("card", "7_275");
|
put("pillager", "7_275");
|
||||||
// put other cards in here as needed for the test case
|
put("troop", "7_279");
|
||||||
}},
|
}},
|
||||||
GenericCardTestHelper.FellowshipSites,
|
GenericCardTestHelper.FellowshipSites,
|
||||||
GenericCardTestHelper.FOTRFrodo,
|
GenericCardTestHelper.FOTRFrodo,
|
||||||
@@ -46,7 +46,7 @@ public class Card_07_275_Tests
|
|||||||
|
|
||||||
var scn = GetScenario();
|
var scn = GetScenario();
|
||||||
|
|
||||||
var card = scn.GetFreepsCard("card");
|
var card = scn.GetFreepsCard("pillager");
|
||||||
|
|
||||||
assertEquals("Gorgoroth Pillager", card.getBlueprint().getTitle());
|
assertEquals("Gorgoroth Pillager", card.getBlueprint().getTitle());
|
||||||
assertNull(card.getBlueprint().getSubtitle());
|
assertNull(card.getBlueprint().getSubtitle());
|
||||||
@@ -62,18 +62,28 @@ public class Card_07_275_Tests
|
|||||||
assertEquals(5, card.getBlueprint().getSiteNumber());
|
assertEquals(5, card.getBlueprint().getSiteNumber());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uncomment any @Test markers below once this is ready to be used
|
@Test
|
||||||
//@Test
|
public void GorgorothPillagerMakesBesiegersFierceWhenStackedOnSiteYouControl() throws DecisionResultInvalidException, CardNotFoundException {
|
||||||
public void GorgorothPillagerTest1() throws DecisionResultInvalidException, CardNotFoundException {
|
|
||||||
//Pre-game setup
|
//Pre-game setup
|
||||||
var scn = GetScenario();
|
var scn = GetScenario();
|
||||||
|
|
||||||
var card = scn.GetFreepsCard("card");
|
var site1 = scn.GetFreepsSite(1);
|
||||||
scn.FreepsMoveCardToHand(card);
|
|
||||||
|
var pillager = scn.GetShadowCard("pillager");
|
||||||
|
var troop = scn.GetShadowCard("troop");
|
||||||
|
scn.ShadowMoveCardToDiscard(pillager, troop);
|
||||||
|
|
||||||
scn.StartGame();
|
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