Fixed issue with cards creating assignments

This commit is contained in:
Marcin Sciesinski
2024-10-18 13:28:54 +07:00
parent 35ea56778a
commit 010401554f
9 changed files with 17 additions and 23 deletions

View File

@@ -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(

View File

@@ -695,7 +695,6 @@
type: assignFpCharacterToSkirmish
fpCharacter: choose(ring bearer)
against: choose(nazgul)
ignoreFierce: true
}
{
type: addTrigger

View File

@@ -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<? extends PhysicalCard> 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() {

View File

@@ -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<PhysicalCard, Set<PhysicalCard>> 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);
}
}));

View File

@@ -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

View File

@@ -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

View File

@@ -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<PhysicalCard> minions = new HashSet<>(Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, false, true, false)));
final Set<PhysicalCard> 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<PhysicalCard, Set<PhysicalCard>> assignments = Collections.singletonMap(ringBearer, minions);

View File

@@ -44,14 +44,14 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess {
protected void doPlayEffect(final LotroGame game) {
final GameState gameState = game.getGameState();
final Collection<PhysicalCard> minions = Filters.filterActive(game, CardType.MINION, Filters.assignableToSkirmish(Side.FREE_PEOPLE, false, true, false));
final Collection<PhysicalCard> minions = Filters.filterActive(game, CardType.MINION, Filters.assignableToSkirmish(Side.FREE_PEOPLE, true, false));
if (minions.size() > 0) {
final Collection<PhysicalCard> 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(),

View File

@@ -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<PhysicalCard> minions = Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, false, true, false));
final Collection<PhysicalCard> minions = Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, true, false));
if (minions.size() > 0) {
final Collection<PhysicalCard> 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) {