- If a minion assigned by normal FP assignments becomes unassigned before Shadow player(s) assigns minions, that minion no longer can be assigned by the Shadow player, as it's not a "leftover unassigned minion".

This commit is contained in:
marcins78@gmail.com
2012-03-14 19:37:29 +00:00
parent add6dca524
commit 7ee3fe1438
5 changed files with 29 additions and 16 deletions

View File

@@ -6,7 +6,6 @@ import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.timing.processes.GameProcess;
import com.gempukku.lotro.logic.timing.processes.turn.assign.FreePeoplePlayerAssignsMinionsGameProcess;
import com.gempukku.lotro.logic.timing.processes.turn.assign.ShadowPlayersAssignTheirMinionsGameProcess;
import com.gempukku.lotro.logic.timing.processes.turn.general.EndOfPhaseGameProcess;
import com.gempukku.lotro.logic.timing.processes.turn.general.PlayersPlayPhaseActionsInOrderGameProcess;
import com.gempukku.lotro.logic.timing.processes.turn.general.StartOfPhaseGameProcess;
@@ -23,10 +22,9 @@ public class AssignmentGameProcess implements GameProcess {
else
_followingGameProcess = new StartOfPhaseGameProcess(Phase.ASSIGNMENT,
new PlayersPlayPhaseActionsInOrderGameProcess(game.getGameState().getPlayerOrder().getCounterClockwisePlayOrder(game.getGameState().getCurrentPlayerId(), true), 0,
new FreePeoplePlayerAssignsMinionsGameProcess(game,
new ShadowPlayersAssignTheirMinionsGameProcess(
new EndOfPhaseGameProcess(Phase.ASSIGNMENT,
new PlayoutSkirmishesGameProcess())))));
new FreePeoplePlayerAssignsMinionsGameProcess(
new EndOfPhaseGameProcess(Phase.ASSIGNMENT,
new PlayoutSkirmishesGameProcess()))));
}
@Override

View File

@@ -17,13 +17,17 @@ import com.gempukku.lotro.logic.timing.UnrespondableEffect;
import com.gempukku.lotro.logic.timing.processes.GameProcess;
import com.gempukku.lotro.logic.timing.results.FreePlayerStartsAssigningResult;
import java.util.*;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess {
private GameProcess _followingGameProcess;
private Set<PhysicalCard> _leftoverMinions;
private GameProcess _followingAssignments;
public FreePeoplePlayerAssignsMinionsGameProcess(LotroGame game, GameProcess followingGameProcess) {
_followingGameProcess = followingGameProcess;
public FreePeoplePlayerAssignsMinionsGameProcess(GameProcess followingAssignments) {
_followingAssignments = followingAssignments;
}
@Override
@@ -53,7 +57,7 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess {
public void decisionMade(String result) throws DecisionResultInvalidException {
Map<PhysicalCard, Set<PhysicalCard>> assignments = getAssignmentsBasedOnResponse(result);
List<PhysicalCard> unassignedMinions = new LinkedList<PhysicalCard>(minions);
Set<PhysicalCard> unassignedMinions = new HashSet<PhysicalCard>(minions);
// Validate minion count (Defender)
for (PhysicalCard freeCard : assignments.keySet()) {
Set<PhysicalCard> minionsAssigned = assignments.get(freeCard);
@@ -65,6 +69,8 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess {
if (!game.getModifiersQuerying().isValidAssignments(game.getGameState(), Side.FREE_PEOPLE, assignments))
throw new DecisionResultInvalidException("Assignments are not valid for the effects affecting the cards");
_leftoverMinions = unassignedMinions;
action.appendEffect(
new AssignmentPhaseEffect(gameState.getCurrentPlayerId(), assignments, "Free People player assignments"));
}
@@ -86,6 +92,6 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess {
@Override
public GameProcess getNextProcess() {
return _followingGameProcess;
return new ShadowPlayersAssignTheirMinionsGameProcess(_followingAssignments, _leftoverMinions);
}
}

View File

@@ -21,18 +21,20 @@ import java.util.Set;
public class ShadowPlayerAssignsHisMinionsGameProcess implements GameProcess {
private PlayOrder _shadowOrder;
private String _playerId;
private Set<PhysicalCard> _leftoverMinions;
private GameProcess _followingGameProcess;
public ShadowPlayerAssignsHisMinionsGameProcess(PlayOrder shadowOrder, String playerId, GameProcess followingGameProcess) {
public ShadowPlayerAssignsHisMinionsGameProcess(PlayOrder shadowOrder, String playerId, Set<PhysicalCard> leftoverMinions, GameProcess followingGameProcess) {
_shadowOrder = shadowOrder;
_playerId = playerId;
_leftoverMinions = leftoverMinions;
_followingGameProcess = followingGameProcess;
}
@Override
public void process(final LotroGame game) {
GameState gameState = game.getGameState();
Filter minionFilter = Filters.and(CardType.MINION, Filters.owner(_playerId));
Filter minionFilter = Filters.and(CardType.MINION, Filters.owner(_playerId), Filters.in(_leftoverMinions));
final Collection<PhysicalCard> minions = Filters.filterActive(gameState, game.getModifiersQuerying(), minionFilter, Filters.assignableToSkirmish(Side.SHADOW, true, false));
if (minions.size() > 0) {
@@ -66,7 +68,7 @@ public class ShadowPlayerAssignsHisMinionsGameProcess implements GameProcess {
public GameProcess getNextProcess() {
String nextPlayerId = _shadowOrder.getNextPlayer();
if (nextPlayerId != null)
return new ShadowPlayerAssignsHisMinionsGameProcess(_shadowOrder, nextPlayerId, _followingGameProcess);
return new ShadowPlayerAssignsHisMinionsGameProcess(_shadowOrder, nextPlayerId, _leftoverMinions, _followingGameProcess);
else
return _followingGameProcess;
}

View File

@@ -1,17 +1,22 @@
package com.gempukku.lotro.logic.timing.processes.turn.assign;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.PlayOrder;
import com.gempukku.lotro.logic.timing.processes.GameProcess;
import java.util.Set;
public class ShadowPlayersAssignTheirMinionsGameProcess implements GameProcess {
private GameProcess _followingProcess;
private Set<PhysicalCard> _leftoverMinions;
private PlayOrder _shadowOrder;
private String _firstShadowPlayer;
public ShadowPlayersAssignTheirMinionsGameProcess(GameProcess followingProcess) {
public ShadowPlayersAssignTheirMinionsGameProcess(GameProcess followingProcess, Set<PhysicalCard> leftoverMinions) {
_followingProcess = followingProcess;
_leftoverMinions = leftoverMinions;
}
@Override
@@ -25,6 +30,6 @@ public class ShadowPlayersAssignTheirMinionsGameProcess implements GameProcess {
@Override
public GameProcess getNextProcess() {
return new ShadowPlayerAssignsHisMinionsGameProcess(_shadowOrder, _firstShadowPlayer, _followingProcess);
return new ShadowPlayerAssignsHisMinionsGameProcess(_shadowOrder, _firstShadowPlayer, _leftoverMinions, _followingProcess);
}
}

View File

@@ -2,6 +2,8 @@
<b>14 Mar. 2012</b>
- "White Hand Destroyer" no longer has "Hunter 0" when you control no sites.
- "Into the Caves" now can be used only when card is in play.
- If a minion assigned by normal FP assignments becomes unassigned before Shadow player(s) assigns minions, that minion
no longer can be assigned by the Shadow player, as it's not a "leftover unassigned minion".
<b>12 Mar. 2012</b>
- "Dark Fell About Him" now correctly exerts your Nazgul twice.