From 35ea56778af0ed3fad25738cd04a5c9dc5074050 Mon Sep 17 00:00:00 2001 From: Marcin Sciesinski Date: Fri, 18 Oct 2024 13:23:32 +0700 Subject: [PATCH 1/4] Fixed issue with cards creating assignments --- .../lotro/cards/set7/wraith/Card7_174.java | 4 +- .../cards/official/set01/set1-wraith.hjson | 1 + .../appender/AssignFpCharacterToSkirmish.java | 7 +- .../com/gempukku/lotro/filters/Filters.java | 16 +- .../lotro/logic/effects/AssignmentEffect.java | 2 +- ...hooseAndAssignCharacterToMinionEffect.java | 2 +- ...hooseAndAssignMinionToCompanionEffect.java | 2 +- .../choose/ChooseAndDoAssignmentEffect.java | 4 +- .../ai/AIPlayerAssignsMinionsGameProcess.java | 2 +- ...PeoplePlayerAssignsMinionsGameProcess.java | 4 +- ...dowPlayerAssignsHisMinionsGameProcess.java | 4 +- .../lotro/at/IndividualCardAtTest.java | 160 +++++++++++++++++- .../official/set01/Card_01_224_Tests.java | 5 +- 13 files changed, 185 insertions(+), 28 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java index 20608af36..dbace6db2 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java @@ -36,11 +36,11 @@ public class Card7_174 extends AbstractPermanent { action.appendCost( new RemoveThreatsEffect(self, 5)); action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul", Race.NAZGUL, Filters.assignableToSkirmishAgainst(Side.SHADOW, Filters.and(CardType.COMPANION, Filters.not(Filters.ringBearer)), false, false)) { + new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul", Race.NAZGUL, Filters.assignableToSkirmishAgainst(Side.SHADOW, Filters.and(CardType.COMPANION, Filters.not(Filters.ringBearer)), true, false, false)) { @Override protected void cardSelected(LotroGame game, final PhysicalCard nazgul) { action.insertEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a companion", CardType.COMPANION, Filters.not(Filters.ringBearer), Filters.assignableToSkirmishAgainst(Side.SHADOW, nazgul, false, false)) { + new ChooseActiveCardEffect(self, playerId, "Choose a companion", CardType.COMPANION, Filters.not(Filters.ringBearer), Filters.assignableToSkirmishAgainst(Side.SHADOW, nazgul)) { @Override protected void cardSelected(final LotroGame game, final PhysicalCard card) { action.appendEffect( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson index 53513a22d..c79556469 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson @@ -695,6 +695,7 @@ type: assignFpCharacterToSkirmish fpCharacter: choose(ring bearer) against: choose(nazgul) + ignoreFierce: true } { type: addTrigger diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java index 612d28c2f..db39a3d89 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java @@ -23,11 +23,12 @@ import java.util.List; public class AssignFpCharacterToSkirmish implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(effectObject, "player", "fpCharacter", "against"); + FieldUtils.validateAllowedFields(effectObject, "player", "fpCharacter", "against", "ignoreFierce"); final String player = FieldUtils.getString(effectObject.get("player"), "player", "you"); final String fpCharacter = FieldUtils.getString(effectObject.get("fpCharacter"), "fpCharacter"); final String against = FieldUtils.getString(effectObject.get("against"), "against"); + final boolean ignoreFierce = FieldUtils.getBoolean(effectObject.get("ignoreFierce"), "ignoreFierce", false); final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment); @@ -41,7 +42,7 @@ public class AssignFpCharacterToSkirmish implements EffectAppenderProducer { final String assigningPlayer = playerSource.getPlayer(actionContext); Side assigningSide = GameUtils.getSide(actionContext.getGame(), assigningPlayer); final Filterable filter = minionFilter.getFilterable(actionContext); - return Filters.assignableToSkirmishAgainst(assigningSide, filter); + return Filters.assignableToSkirmishAgainst(assigningSide, filter, ignoreFierce); }, "_tempFpCharacter", player, "Choose character to assign to skirmish", environment)); result.addEffectAppender( CardResolver.resolveCard(against, @@ -49,7 +50,7 @@ public class AssignFpCharacterToSkirmish implements EffectAppenderProducer { final String assigningPlayer = playerSource.getPlayer(actionContext); Side assigningSide = GameUtils.getSide(actionContext.getGame(), assigningPlayer); final Collection fpChar = actionContext.getCardsFromMemory("_tempFpCharacter"); - return Filters.assignableToSkirmishAgainst(assigningSide, Filters.in(fpChar)); + return Filters.assignableToSkirmishAgainst(assigningSide, Filters.in(fpChar), ignoreFierce); }, "_tempMinion", player, "Choose minion to assign to character", environment)); result.addEffectAppender( new DelayedAppender() { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java index 905b1d7b8..d7d76850e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java @@ -282,7 +282,11 @@ public class Filters { } public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter) { - return assignableToSkirmishAgainst(assignedBySide, againstFilter, false, false); + return assignableToSkirmishAgainst(assignedBySide, againstFilter, false); + } + + public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, boolean ignoreFierce) { + return assignableToSkirmishAgainst(assignedBySide, againstFilter, ignoreFierce, false, false); } public static Filter notPreventedByEffectToAssign(final Side assignedBySide, final PhysicalCard againstCard) { @@ -302,15 +306,15 @@ public class Filters { }; } - public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { + public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, final boolean ignoreFierce, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { return Filters.and( - assignableToSkirmish(assignedBySide, ignoreUnassigned, allowAllyToSkirmish), + assignableToSkirmish(assignedBySide, ignoreFierce, ignoreUnassigned, allowAllyToSkirmish), new Filter() { @Override public boolean accepts(LotroGame game, PhysicalCard physicalCard) { for (PhysicalCard card : Filters.filterActive(game, againstFilter)) { if (card.getBlueprint().getSide() != physicalCard.getBlueprint().getSide() - && Filters.assignableToSkirmish(assignedBySide, ignoreUnassigned, allowAllyToSkirmish).accepts(game, card)) { + && Filters.assignableToSkirmish(assignedBySide, ignoreFierce, ignoreUnassigned, allowAllyToSkirmish).accepts(game, card)) { Map> thisAssignment = new HashMap<>(); if (card.getBlueprint().getSide() == Side.FREE_PEOPLE) { if (thisAssignment.containsKey(card)) @@ -333,7 +337,7 @@ public class Filters { }); } - public static Filter assignableToSkirmish(final Side assignedBySide, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { + public static Filter assignableToSkirmish(final Side assignedBySide, final boolean ignoreFierce, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { Filter assignableFilter = Filters.or( Filters.and( CardType.ALLY, @@ -366,7 +370,7 @@ public class Filters { new Filter() { @Override public boolean accepts(LotroGame game, PhysicalCard physicalCard) { - return (!game.getGameState().isFierceSkirmishes()) || game.getModifiersQuerying().hasKeyword(game, physicalCard, Keyword.FIERCE); + return (ignoreFierce || !game.getGameState().isFierceSkirmishes()) || game.getModifiersQuerying().hasKeyword(game, physicalCard, Keyword.FIERCE); } })); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java index da0c31aab..8e7d16919 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java @@ -47,7 +47,7 @@ public class AssignmentEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { Side side = _playerId.equals(game.getGameState().getCurrentPlayerId()) ? Side.FREE_PEOPLE : Side.SHADOW; - return Filters.assignableToSkirmishAgainst(side, _fpChar, _ignoreSingleMinionRestriction, _skipAllyLocationCheck).accepts(game, _minion); + return Filters.assignableToSkirmishAgainst(side, _fpChar, false, _ignoreSingleMinionRestriction, _skipAllyLocationCheck).accepts(game, _minion); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java index 32e590e8c..23d7c5c17 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java @@ -33,7 +33,7 @@ public class ChooseAndAssignCharacterToMinionEffect extends ChooseActiveCardEffe @Override protected Filter getExtraFilterForPlaying(final LotroGame game) { final Side side = game.getGameState().getCurrentPlayerId().equals(_playerId) ? Side.FREE_PEOPLE : Side.SHADOW; - return Filters.assignableToSkirmishAgainst(side, _minion, false, _skipAllyLocationCheck); + return Filters.assignableToSkirmishAgainst(side, _minion, false, false, _skipAllyLocationCheck); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java index dc2f935fc..2d182218a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java @@ -27,7 +27,7 @@ public class ChooseAndAssignMinionToCompanionEffect extends ChooseActiveCardEffe @Override protected Filter getExtraFilterForPlaying(final LotroGame game) { final Side side = game.getGameState().getCurrentPlayerId().equals(_playerId) ? Side.FREE_PEOPLE : Side.SHADOW; - return Filters.assignableToSkirmishAgainst(side, _companion, false, false); + return Filters.assignableToSkirmishAgainst(side, _companion); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java index 4221e64b5..e3d029176 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java @@ -49,7 +49,7 @@ public class ChooseAndDoAssignmentEffect extends AbstractSubActionEffect { } private Collection getAssignableMinions(LotroGame game) { - return Filters.filterActive(game, CardType.MINION, _minionFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), _fpFilter, false, false)); + return Filters.filterActive(game, CardType.MINION, _minionFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), _fpFilter)); } @Override @@ -70,7 +70,7 @@ public class ChooseAndDoAssignmentEffect extends AbstractSubActionEffect { } private void minionSelected(final LotroGame game, final PhysicalCard minion) { - Collection assignableFpCharacters = Filters.filterActive(game, Filters.or(CardType.COMPANION, CardType.ALLY), _fpFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), minion, false, false)); + Collection assignableFpCharacters = Filters.filterActive(game, Filters.or(CardType.COMPANION, CardType.ALLY), _fpFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), minion)); if (assignableFpCharacters.size() == 1) assignmentSelected(game, assignableFpCharacters.iterator().next(), minion); else diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java index 06f769a88..6d88809da 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java @@ -30,7 +30,7 @@ public class AIPlayerAssignsMinionsGameProcess implements GameProcess { GameState gameState = game.getGameState(); Filter minionFilter = Filters.and(CardType.MINION, Filters.owner("AI"), Filters.in(_leftoverMinions)); - final Set minions = new HashSet<>(Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, true, false))); + final Set minions = new HashSet<>(Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, false, true, false))); if (minions.size() > 0) { final PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId()); Map> assignments = Collections.singletonMap(ringBearer, minions); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java index e5a6ad38e..b16a0be78 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java @@ -44,14 +44,14 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess { protected void doPlayEffect(final LotroGame game) { final GameState gameState = game.getGameState(); - final Collection minions = Filters.filterActive(game, CardType.MINION, Filters.assignableToSkirmish(Side.FREE_PEOPLE, true, false)); + final Collection minions = Filters.filterActive(game, CardType.MINION, Filters.assignableToSkirmish(Side.FREE_PEOPLE, false, true, false)); if (minions.size() > 0) { final Collection freePeopleTargets = Filters.filterActive(game, Filters.and( Filters.or( CardType.COMPANION, CardType.ALLY), - Filters.assignableToSkirmish(Side.FREE_PEOPLE, true, false))); + Filters.assignableToSkirmish(Side.FREE_PEOPLE, false, true, false))); game.getUserFeedback().sendAwaitingDecision(gameState.getCurrentPlayerId(), diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java index 188456da7..ff37c74f7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java @@ -36,14 +36,14 @@ public class ShadowPlayerAssignsHisMinionsGameProcess implements GameProcess { GameState gameState = game.getGameState(); Filter minionFilter = Filters.and(CardType.MINION, Filters.owner(_playerId), Filters.in(_leftoverMinions)); - final Collection minions = Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, true, false)); + final Collection minions = Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, false, true, false)); if (minions.size() > 0) { final Collection freePeopleTargets = Filters.filterActive(game, Filters.and( Filters.or( CardType.COMPANION, CardType.ALLY), - Filters.assignableToSkirmish(Side.SHADOW, true, false))); + Filters.assignableToSkirmish(Side.SHADOW, false, true, false))); game.getUserFeedback().sendAwaitingDecision(_playerId, new PlayerAssignMinionsDecision(1, "Assign minions to companions or allies at home", freePeopleTargets, minions) { diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java index 8801f3ccc..8e6e82ee1 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java @@ -14,10 +14,7 @@ import org.junit.Test; import java.util.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.*; public class IndividualCardAtTest extends AbstractAtTest { @@ -1203,4 +1200,159 @@ public class IndividualCardAtTest extends AbstractAtTest { assertEquals(Zone.DISCARD, morgulBlade.getZone()); assertEquals(Zone.ATTACHED, bladeTip.getZone()); } + + @Test + public void returnToItsMaster() throws DecisionResultInvalidException, CardNotFoundException { + LotroDeck p1Deck = createSimplestDeck(); + p1Deck.setRing("4_1"); + LotroDeck p2Deck = createSimplestDeck(); + + Map decks = new HashMap<>(); + decks.put(P1, p1Deck); + decks.put(P2, p2Deck); + + initializeGameWithDecks(decks); + + skipMulligans(); + + PhysicalCardImpl returnToItsMaster = new PhysicalCardImpl(102, "1_224", P2, _cardLibrary.getLotroCardBlueprint("1_224")); + _game.getGameState().addCardToZone(_game, returnToItsMaster, Zone.HAND); + + PhysicalCardImpl nelya = new PhysicalCardImpl(102, "1_233", P2, _cardLibrary.getLotroCardBlueprint("1_233")); + _game.getGameState().addCardToZone(_game, nelya, Zone.SHADOW_CHARACTERS); + + PhysicalCardImpl hobbitSword = new PhysicalCardImpl(102, "1_299", P1, _cardLibrary.getLotroCardBlueprint("1_299")); + _game.getGameState().attachCard(_game, hobbitSword, _game.getGameState().getRingBearer(P1)); + + // End fellowship + playerDecided(P1, ""); + + // End shadow + playerDecided(P2, ""); + + // End maneuvers phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End archery phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End assignment phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // Assign + playerDecided(P1, _game.getGameState().getRingBearer(P1).getCardId() + " " + nelya.getCardId()); + + // Choose skirmish to resolve + playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); + + // Skirmish phase + AwaitingDecision skirmishAction = _userFeedback.getAwaitingDecision(P1); + playerDecided(P1, getCardActionId(skirmishAction, "Use The One")); + + assertTrue(_game.getGameState().isWearingRing()); + + // End skirmish phase + playerDecided(P2, ""); + playerDecided(P1, ""); + + // Don't use Return to Its Master + playerDecided(P2, ""); + + // End assignment phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // Assign + playerDecided(P1, _game.getGameState().getRingBearer(P1).getCardId() + " " + nelya.getCardId()); + + // Choose skirmish to resolve + playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); + + // End fierce skirmish phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + AwaitingDecision playeReturnDecision = _userFeedback.getAwaitingDecision(P2); + playerDecided(P2, getCardActionId(playeReturnDecision, "Play Return")); + + // Choose skirmish to resolve + playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); + + assertEquals(_game.getGameState().getRingBearer(P1), _game.getGameState().getSkirmish().getFellowshipCharacter()); + assertEquals(1, _game.getGameState().getSkirmish().getShadowCharacters().size()); + assertEquals(nelya, _game.getGameState().getSkirmish().getShadowCharacters().iterator().next()); + } + + + @Test + public void returnToItsMasterNonFierceNazgul() throws DecisionResultInvalidException, CardNotFoundException { + LotroDeck p1Deck = createSimplestDeck(); + p1Deck.setRing("4_1"); + LotroDeck p2Deck = createSimplestDeck(); + + Map decks = new HashMap<>(); + decks.put(P1, p1Deck); + decks.put(P2, p2Deck); + + initializeGameWithDecks(decks); + + skipMulligans(); + + PhysicalCardImpl returnToItsMaster = new PhysicalCardImpl(102, "1_224", P2, _cardLibrary.getLotroCardBlueprint("1_224")); + _game.getGameState().addCardToZone(_game, returnToItsMaster, Zone.HAND); + + PhysicalCardImpl nonFierceNazgul = new PhysicalCardImpl(102, "2_83", P2, _cardLibrary.getLotroCardBlueprint("1_233")); + _game.getGameState().addCardToZone(_game, nonFierceNazgul, Zone.SHADOW_CHARACTERS); + + PhysicalCardImpl hobbitSword = new PhysicalCardImpl(102, "1_299", P1, _cardLibrary.getLotroCardBlueprint("1_299")); + _game.getGameState().attachCard(_game, hobbitSword, _game.getGameState().getRingBearer(P1)); + + // End fellowship + playerDecided(P1, ""); + + // End shadow + playerDecided(P2, ""); + + // End maneuvers phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End archery phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End assignment phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // Assign + playerDecided(P1, _game.getGameState().getRingBearer(P1).getCardId() + " " + nonFierceNazgul.getCardId()); + + // Choose skirmish to resolve + playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); + + // Skirmish phase + AwaitingDecision skirmishAction = _userFeedback.getAwaitingDecision(P1); + playerDecided(P1, getCardActionId(skirmishAction, "Use The One")); + + assertTrue(_game.getGameState().isWearingRing()); + + // End skirmish phase + playerDecided(P2, ""); + playerDecided(P1, ""); + + AwaitingDecision playeReturnDecision = _userFeedback.getAwaitingDecision(P2); + playerDecided(P2, getCardActionId(playeReturnDecision, "Play Return")); + + // Choose skirmish to resolve + playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); + + assertEquals(_game.getGameState().getRingBearer(P1), _game.getGameState().getSkirmish().getFellowshipCharacter()); + assertEquals(1, _game.getGameState().getSkirmish().getShadowCharacters().size()); + assertEquals(nonFierceNazgul, _game.getGameState().getSkirmish().getShadowCharacters().iterator().next()); + } + } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_224_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_224_Tests.java index 6f5fd1bfc..eb1787c1a 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_224_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_224_Tests.java @@ -106,9 +106,8 @@ public class Card_01_224_Tests //Can't quite get the rest - //assertEquals(2, scn.GetShadowCardChoiceCount()); // both enquea and TWK - //scn.ShadowChooseCard(enquea); - //We should now be asking freeps to choose the next skirmish to resolve and in a skirmish phase + assertEquals(2, scn.GetShadowCardChoiceCount()); // both enquea and TWK + scn.ShadowChooseCard(enquea); } From 010401554fc3360f637fdcfd2302327a32823e94 Mon Sep 17 00:00:00 2001 From: Marcin Sciesinski Date: Fri, 18 Oct 2024 13:28:54 +0700 Subject: [PATCH 2/4] Fixed issue with cards creating assignments --- .../lotro/cards/set7/wraith/Card7_174.java | 2 +- .../cards/official/set01/set1-wraith.hjson | 1 - .../appender/AssignFpCharacterToSkirmish.java | 7 +++---- .../java/com/gempukku/lotro/filters/Filters.java | 16 ++++++---------- .../lotro/logic/effects/AssignmentEffect.java | 2 +- .../ChooseAndAssignCharacterToMinionEffect.java | 2 +- .../ai/AIPlayerAssignsMinionsGameProcess.java | 2 +- ...reePeoplePlayerAssignsMinionsGameProcess.java | 4 ++-- ...ShadowPlayerAssignsHisMinionsGameProcess.java | 4 ++-- 9 files changed, 17 insertions(+), 23 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java index dbace6db2..3d37d7817 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java @@ -36,7 +36,7 @@ public class Card7_174 extends AbstractPermanent { action.appendCost( new RemoveThreatsEffect(self, 5)); action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul", Race.NAZGUL, Filters.assignableToSkirmishAgainst(Side.SHADOW, Filters.and(CardType.COMPANION, Filters.not(Filters.ringBearer)), true, false, false)) { + new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul", Race.NAZGUL, Filters.assignableToSkirmishAgainst(Side.SHADOW, Filters.and(CardType.COMPANION, Filters.not(Filters.ringBearer)), false, false)) { @Override protected void cardSelected(LotroGame game, final PhysicalCard nazgul) { action.insertEffect( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson index c79556469..53513a22d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson @@ -695,7 +695,6 @@ type: assignFpCharacterToSkirmish fpCharacter: choose(ring bearer) against: choose(nazgul) - ignoreFierce: true } { type: addTrigger diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java index db39a3d89..612d28c2f 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java @@ -23,12 +23,11 @@ import java.util.List; public class AssignFpCharacterToSkirmish implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(effectObject, "player", "fpCharacter", "against", "ignoreFierce"); + FieldUtils.validateAllowedFields(effectObject, "player", "fpCharacter", "against"); final String player = FieldUtils.getString(effectObject.get("player"), "player", "you"); final String fpCharacter = FieldUtils.getString(effectObject.get("fpCharacter"), "fpCharacter"); final String against = FieldUtils.getString(effectObject.get("against"), "against"); - final boolean ignoreFierce = FieldUtils.getBoolean(effectObject.get("ignoreFierce"), "ignoreFierce", false); final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment); @@ -42,7 +41,7 @@ public class AssignFpCharacterToSkirmish implements EffectAppenderProducer { final String assigningPlayer = playerSource.getPlayer(actionContext); Side assigningSide = GameUtils.getSide(actionContext.getGame(), assigningPlayer); final Filterable filter = minionFilter.getFilterable(actionContext); - return Filters.assignableToSkirmishAgainst(assigningSide, filter, ignoreFierce); + return Filters.assignableToSkirmishAgainst(assigningSide, filter); }, "_tempFpCharacter", player, "Choose character to assign to skirmish", environment)); result.addEffectAppender( CardResolver.resolveCard(against, @@ -50,7 +49,7 @@ public class AssignFpCharacterToSkirmish implements EffectAppenderProducer { final String assigningPlayer = playerSource.getPlayer(actionContext); Side assigningSide = GameUtils.getSide(actionContext.getGame(), assigningPlayer); final Collection fpChar = actionContext.getCardsFromMemory("_tempFpCharacter"); - return Filters.assignableToSkirmishAgainst(assigningSide, Filters.in(fpChar), ignoreFierce); + return Filters.assignableToSkirmishAgainst(assigningSide, Filters.in(fpChar)); }, "_tempMinion", player, "Choose minion to assign to character", environment)); result.addEffectAppender( new DelayedAppender() { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java index d7d76850e..14f161963 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java @@ -282,11 +282,7 @@ public class Filters { } public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter) { - return assignableToSkirmishAgainst(assignedBySide, againstFilter, false); - } - - public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, boolean ignoreFierce) { - return assignableToSkirmishAgainst(assignedBySide, againstFilter, ignoreFierce, false, false); + return assignableToSkirmishAgainst(assignedBySide, againstFilter, false, false); } public static Filter notPreventedByEffectToAssign(final Side assignedBySide, final PhysicalCard againstCard) { @@ -306,15 +302,15 @@ public class Filters { }; } - public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, final boolean ignoreFierce, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { + public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { return Filters.and( - assignableToSkirmish(assignedBySide, ignoreFierce, ignoreUnassigned, allowAllyToSkirmish), + assignableToSkirmish(assignedBySide, ignoreUnassigned, allowAllyToSkirmish), new Filter() { @Override public boolean accepts(LotroGame game, PhysicalCard physicalCard) { for (PhysicalCard card : Filters.filterActive(game, againstFilter)) { if (card.getBlueprint().getSide() != physicalCard.getBlueprint().getSide() - && Filters.assignableToSkirmish(assignedBySide, ignoreFierce, ignoreUnassigned, allowAllyToSkirmish).accepts(game, card)) { + && Filters.assignableToSkirmish(assignedBySide, ignoreUnassigned, allowAllyToSkirmish).accepts(game, card)) { Map> thisAssignment = new HashMap<>(); if (card.getBlueprint().getSide() == Side.FREE_PEOPLE) { if (thisAssignment.containsKey(card)) @@ -337,7 +333,7 @@ public class Filters { }); } - public static Filter assignableToSkirmish(final Side assignedBySide, final boolean ignoreFierce, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { + public static Filter assignableToSkirmish(final Side assignedBySide, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { Filter assignableFilter = Filters.or( Filters.and( CardType.ALLY, @@ -370,7 +366,7 @@ public class Filters { new Filter() { @Override public boolean accepts(LotroGame game, PhysicalCard physicalCard) { - return (ignoreFierce || !game.getGameState().isFierceSkirmishes()) || game.getModifiersQuerying().hasKeyword(game, physicalCard, Keyword.FIERCE); + return (game.getGameState().getCurrentPhase() != Phase.ASSIGNMENT || !game.getGameState().isFierceSkirmishes()) || game.getModifiersQuerying().hasKeyword(game, physicalCard, Keyword.FIERCE); } })); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java index 8e7d16919..da0c31aab 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java @@ -47,7 +47,7 @@ public class AssignmentEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { Side side = _playerId.equals(game.getGameState().getCurrentPlayerId()) ? Side.FREE_PEOPLE : Side.SHADOW; - return Filters.assignableToSkirmishAgainst(side, _fpChar, false, _ignoreSingleMinionRestriction, _skipAllyLocationCheck).accepts(game, _minion); + return Filters.assignableToSkirmishAgainst(side, _fpChar, _ignoreSingleMinionRestriction, _skipAllyLocationCheck).accepts(game, _minion); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java index 23d7c5c17..32e590e8c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java @@ -33,7 +33,7 @@ public class ChooseAndAssignCharacterToMinionEffect extends ChooseActiveCardEffe @Override protected Filter getExtraFilterForPlaying(final LotroGame game) { final Side side = game.getGameState().getCurrentPlayerId().equals(_playerId) ? Side.FREE_PEOPLE : Side.SHADOW; - return Filters.assignableToSkirmishAgainst(side, _minion, false, false, _skipAllyLocationCheck); + return Filters.assignableToSkirmishAgainst(side, _minion, false, _skipAllyLocationCheck); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java index 6d88809da..06f769a88 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java @@ -30,7 +30,7 @@ public class AIPlayerAssignsMinionsGameProcess implements GameProcess { GameState gameState = game.getGameState(); Filter minionFilter = Filters.and(CardType.MINION, Filters.owner("AI"), Filters.in(_leftoverMinions)); - final Set minions = new HashSet<>(Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, false, true, false))); + final Set minions = new HashSet<>(Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, true, false))); if (minions.size() > 0) { final PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId()); Map> assignments = Collections.singletonMap(ringBearer, minions); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java index b16a0be78..e5a6ad38e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java @@ -44,14 +44,14 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess { protected void doPlayEffect(final LotroGame game) { final GameState gameState = game.getGameState(); - final Collection minions = Filters.filterActive(game, CardType.MINION, Filters.assignableToSkirmish(Side.FREE_PEOPLE, false, true, false)); + final Collection minions = Filters.filterActive(game, CardType.MINION, Filters.assignableToSkirmish(Side.FREE_PEOPLE, true, false)); if (minions.size() > 0) { final Collection freePeopleTargets = Filters.filterActive(game, Filters.and( Filters.or( CardType.COMPANION, CardType.ALLY), - Filters.assignableToSkirmish(Side.FREE_PEOPLE, false, true, false))); + Filters.assignableToSkirmish(Side.FREE_PEOPLE, true, false))); game.getUserFeedback().sendAwaitingDecision(gameState.getCurrentPlayerId(), diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java index ff37c74f7..188456da7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java @@ -36,14 +36,14 @@ public class ShadowPlayerAssignsHisMinionsGameProcess implements GameProcess { GameState gameState = game.getGameState(); Filter minionFilter = Filters.and(CardType.MINION, Filters.owner(_playerId), Filters.in(_leftoverMinions)); - final Collection minions = Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, false, true, false)); + final Collection minions = Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, true, false)); if (minions.size() > 0) { final Collection freePeopleTargets = Filters.filterActive(game, Filters.and( Filters.or( CardType.COMPANION, CardType.ALLY), - Filters.assignableToSkirmish(Side.SHADOW, false, true, false))); + Filters.assignableToSkirmish(Side.SHADOW, true, false))); game.getUserFeedback().sendAwaitingDecision(_playerId, new PlayerAssignMinionsDecision(1, "Assign minions to companions or allies at home", freePeopleTargets, minions) { From 13fe76fcb9c9b0c7e4860f81753aee9623a57b1f Mon Sep 17 00:00:00 2001 From: Marcin Sciesinski Date: Fri, 18 Oct 2024 13:31:24 +0700 Subject: [PATCH 3/4] Fixed issue with cards creating assignments --- .../lotro/cards/set7/wraith/Card7_174.java | 2 +- ...hooseAndAssignMinionToCompanionEffect.java | 2 +- .../choose/ChooseAndDoAssignmentEffect.java | 4 +- .../lotro/at/IndividualCardAtTest.java | 155 ------------------ 4 files changed, 4 insertions(+), 159 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java index 3d37d7817..20608af36 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java @@ -40,7 +40,7 @@ public class Card7_174 extends AbstractPermanent { @Override protected void cardSelected(LotroGame game, final PhysicalCard nazgul) { action.insertEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a companion", CardType.COMPANION, Filters.not(Filters.ringBearer), Filters.assignableToSkirmishAgainst(Side.SHADOW, nazgul)) { + new ChooseActiveCardEffect(self, playerId, "Choose a companion", CardType.COMPANION, Filters.not(Filters.ringBearer), Filters.assignableToSkirmishAgainst(Side.SHADOW, nazgul, false, false)) { @Override protected void cardSelected(final LotroGame game, final PhysicalCard card) { action.appendEffect( diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java index 2d182218a..dc2f935fc 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java @@ -27,7 +27,7 @@ public class ChooseAndAssignMinionToCompanionEffect extends ChooseActiveCardEffe @Override protected Filter getExtraFilterForPlaying(final LotroGame game) { final Side side = game.getGameState().getCurrentPlayerId().equals(_playerId) ? Side.FREE_PEOPLE : Side.SHADOW; - return Filters.assignableToSkirmishAgainst(side, _companion); + return Filters.assignableToSkirmishAgainst(side, _companion, false, false); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java index e3d029176..4221e64b5 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java @@ -49,7 +49,7 @@ public class ChooseAndDoAssignmentEffect extends AbstractSubActionEffect { } private Collection getAssignableMinions(LotroGame game) { - return Filters.filterActive(game, CardType.MINION, _minionFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), _fpFilter)); + return Filters.filterActive(game, CardType.MINION, _minionFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), _fpFilter, false, false)); } @Override @@ -70,7 +70,7 @@ public class ChooseAndDoAssignmentEffect extends AbstractSubActionEffect { } private void minionSelected(final LotroGame game, final PhysicalCard minion) { - Collection assignableFpCharacters = Filters.filterActive(game, Filters.or(CardType.COMPANION, CardType.ALLY), _fpFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), minion)); + Collection assignableFpCharacters = Filters.filterActive(game, Filters.or(CardType.COMPANION, CardType.ALLY), _fpFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), minion, false, false)); if (assignableFpCharacters.size() == 1) assignmentSelected(game, assignableFpCharacters.iterator().next(), minion); else diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java index 8e6e82ee1..66424fca7 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java @@ -1200,159 +1200,4 @@ public class IndividualCardAtTest extends AbstractAtTest { assertEquals(Zone.DISCARD, morgulBlade.getZone()); assertEquals(Zone.ATTACHED, bladeTip.getZone()); } - - @Test - public void returnToItsMaster() throws DecisionResultInvalidException, CardNotFoundException { - LotroDeck p1Deck = createSimplestDeck(); - p1Deck.setRing("4_1"); - LotroDeck p2Deck = createSimplestDeck(); - - Map decks = new HashMap<>(); - decks.put(P1, p1Deck); - decks.put(P2, p2Deck); - - initializeGameWithDecks(decks); - - skipMulligans(); - - PhysicalCardImpl returnToItsMaster = new PhysicalCardImpl(102, "1_224", P2, _cardLibrary.getLotroCardBlueprint("1_224")); - _game.getGameState().addCardToZone(_game, returnToItsMaster, Zone.HAND); - - PhysicalCardImpl nelya = new PhysicalCardImpl(102, "1_233", P2, _cardLibrary.getLotroCardBlueprint("1_233")); - _game.getGameState().addCardToZone(_game, nelya, Zone.SHADOW_CHARACTERS); - - PhysicalCardImpl hobbitSword = new PhysicalCardImpl(102, "1_299", P1, _cardLibrary.getLotroCardBlueprint("1_299")); - _game.getGameState().attachCard(_game, hobbitSword, _game.getGameState().getRingBearer(P1)); - - // End fellowship - playerDecided(P1, ""); - - // End shadow - playerDecided(P2, ""); - - // End maneuvers phase - playerDecided(P1, ""); - playerDecided(P2, ""); - - // End archery phase - playerDecided(P1, ""); - playerDecided(P2, ""); - - // End assignment phase - playerDecided(P1, ""); - playerDecided(P2, ""); - - // Assign - playerDecided(P1, _game.getGameState().getRingBearer(P1).getCardId() + " " + nelya.getCardId()); - - // Choose skirmish to resolve - playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); - - // Skirmish phase - AwaitingDecision skirmishAction = _userFeedback.getAwaitingDecision(P1); - playerDecided(P1, getCardActionId(skirmishAction, "Use The One")); - - assertTrue(_game.getGameState().isWearingRing()); - - // End skirmish phase - playerDecided(P2, ""); - playerDecided(P1, ""); - - // Don't use Return to Its Master - playerDecided(P2, ""); - - // End assignment phase - playerDecided(P1, ""); - playerDecided(P2, ""); - - // Assign - playerDecided(P1, _game.getGameState().getRingBearer(P1).getCardId() + " " + nelya.getCardId()); - - // Choose skirmish to resolve - playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); - - // End fierce skirmish phase - playerDecided(P1, ""); - playerDecided(P2, ""); - - AwaitingDecision playeReturnDecision = _userFeedback.getAwaitingDecision(P2); - playerDecided(P2, getCardActionId(playeReturnDecision, "Play Return")); - - // Choose skirmish to resolve - playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); - - assertEquals(_game.getGameState().getRingBearer(P1), _game.getGameState().getSkirmish().getFellowshipCharacter()); - assertEquals(1, _game.getGameState().getSkirmish().getShadowCharacters().size()); - assertEquals(nelya, _game.getGameState().getSkirmish().getShadowCharacters().iterator().next()); - } - - - @Test - public void returnToItsMasterNonFierceNazgul() throws DecisionResultInvalidException, CardNotFoundException { - LotroDeck p1Deck = createSimplestDeck(); - p1Deck.setRing("4_1"); - LotroDeck p2Deck = createSimplestDeck(); - - Map decks = new HashMap<>(); - decks.put(P1, p1Deck); - decks.put(P2, p2Deck); - - initializeGameWithDecks(decks); - - skipMulligans(); - - PhysicalCardImpl returnToItsMaster = new PhysicalCardImpl(102, "1_224", P2, _cardLibrary.getLotroCardBlueprint("1_224")); - _game.getGameState().addCardToZone(_game, returnToItsMaster, Zone.HAND); - - PhysicalCardImpl nonFierceNazgul = new PhysicalCardImpl(102, "2_83", P2, _cardLibrary.getLotroCardBlueprint("1_233")); - _game.getGameState().addCardToZone(_game, nonFierceNazgul, Zone.SHADOW_CHARACTERS); - - PhysicalCardImpl hobbitSword = new PhysicalCardImpl(102, "1_299", P1, _cardLibrary.getLotroCardBlueprint("1_299")); - _game.getGameState().attachCard(_game, hobbitSword, _game.getGameState().getRingBearer(P1)); - - // End fellowship - playerDecided(P1, ""); - - // End shadow - playerDecided(P2, ""); - - // End maneuvers phase - playerDecided(P1, ""); - playerDecided(P2, ""); - - // End archery phase - playerDecided(P1, ""); - playerDecided(P2, ""); - - // End assignment phase - playerDecided(P1, ""); - playerDecided(P2, ""); - - // Assign - playerDecided(P1, _game.getGameState().getRingBearer(P1).getCardId() + " " + nonFierceNazgul.getCardId()); - - // Choose skirmish to resolve - playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); - - // Skirmish phase - AwaitingDecision skirmishAction = _userFeedback.getAwaitingDecision(P1); - playerDecided(P1, getCardActionId(skirmishAction, "Use The One")); - - assertTrue(_game.getGameState().isWearingRing()); - - // End skirmish phase - playerDecided(P2, ""); - playerDecided(P1, ""); - - AwaitingDecision playeReturnDecision = _userFeedback.getAwaitingDecision(P2); - playerDecided(P2, getCardActionId(playeReturnDecision, "Play Return")); - - // Choose skirmish to resolve - playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); - - assertEquals(_game.getGameState().getRingBearer(P1), _game.getGameState().getSkirmish().getFellowshipCharacter()); - assertEquals(1, _game.getGameState().getSkirmish().getShadowCharacters().size()); - assertEquals(nonFierceNazgul, _game.getGameState().getSkirmish().getShadowCharacters().iterator().next()); - } - } From f4ce01fc125de34046264b23326df939cc0b2339 Mon Sep 17 00:00:00 2001 From: Marcin Sciesinski Date: Fri, 18 Oct 2024 13:32:04 +0700 Subject: [PATCH 4/4] Fixed issue with cards creating assignments --- .../java/com/gempukku/lotro/at/IndividualCardAtTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java index 66424fca7..8801f3ccc 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java @@ -14,7 +14,10 @@ import org.junit.Test; import java.util.*; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; public class IndividualCardAtTest extends AbstractAtTest {