- "Return to Its Master" now creates an additional Skirmish Phase.
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package com.gempukku.lotro.cards.effects;
|
||||
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.game.state.Skirmish;
|
||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||
import com.gempukku.lotro.logic.timing.actions.SkirmishPhaseAction;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class AdditionalSkirmishPhaseEffect extends UnrespondableEffect {
|
||||
private PhysicalCard _fpCard;
|
||||
private Set<PhysicalCard> _shadowCards;
|
||||
|
||||
public AdditionalSkirmishPhaseEffect(PhysicalCard fpCard, Set<PhysicalCard> shadowCards) {
|
||||
_fpCard = fpCard;
|
||||
_shadowCards = shadowCards;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doPlayEffect(LotroGame game) {
|
||||
final Phase currentPhase = game.getGameState().getCurrentPhase();
|
||||
final Skirmish skirmish = game.getGameState().getSkirmish();
|
||||
final boolean fierce = game.getGameState().isFierceSkirmishes();
|
||||
final boolean extra = game.getGameState().isExtraSkirmishes();
|
||||
|
||||
if (skirmish != null)
|
||||
game.getGameState().finishSkirmish();
|
||||
|
||||
final SkirmishPhaseAction skirmishPhaseAction = new SkirmishPhaseAction(_fpCard, _shadowCards);
|
||||
// We have to reset the phase, to whatever it was before
|
||||
skirmishPhaseAction.appendEffect(
|
||||
new UnrespondableEffect() {
|
||||
@Override
|
||||
protected void doPlayEffect(LotroGame game) {
|
||||
// We might have to restart an existing skirmish
|
||||
if (skirmish != null)
|
||||
game.getGameState().restartSkirmish(skirmish);
|
||||
game.getGameState().setCurrentPhase(currentPhase);
|
||||
game.getGameState().setFierceSkirmishes(fierce);
|
||||
game.getGameState().setExtraSkirmishes(extra);
|
||||
}
|
||||
});
|
||||
|
||||
game.getGameState().setFierceSkirmishes(false);
|
||||
game.getGameState().setExtraSkirmishes(true);
|
||||
game.getActionsEnvironment().addActionToStack(
|
||||
skirmishPhaseAction);
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.actions.PlayEventAction;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseActionProxyEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndAssignMinionToCompanionEffect;
|
||||
import com.gempukku.lotro.cards.effects.AdditionalSkirmishPhaseEffect;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.common.Race;
|
||||
@@ -53,17 +53,12 @@ public class Card1_224 extends AbstractResponseOldEvent {
|
||||
List<Assignment> assignments = new LinkedList<Assignment>(game.getGameState().getAssignments());
|
||||
for (Assignment assignment : assignments)
|
||||
game.getGameState().removeAssignment(assignment);
|
||||
game.getGameState().finishSkirmish();
|
||||
|
||||
PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId());
|
||||
|
||||
final PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId());
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul to skirmish the Ring-Bearer", Race.NAZGUL, Filters.assignableToSkirmishAgainst(Side.SHADOW, ringBearer)) {
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul to skirmish the Ring-Bearer", Race.NAZGUL, Filters.notPreventedByEffectToAssign(Side.SHADOW, ringBearer)) {
|
||||
@Override
|
||||
protected void cardSelected(LotroGame game, PhysicalCard nazgul) {
|
||||
PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId());
|
||||
action.appendEffect(
|
||||
new ChooseAndAssignMinionToCompanionEffect(action, playerId, ringBearer, Race.NAZGUL));
|
||||
action.appendEffect(
|
||||
new AddUntilStartOfPhaseActionProxyEffect(
|
||||
new AbstractActionProxy() {
|
||||
@@ -79,6 +74,8 @@ public class Card1_224 extends AbstractResponseOldEvent {
|
||||
return null;
|
||||
}
|
||||
}, Phase.SKIRMISH));
|
||||
action.appendEffect(
|
||||
new AdditionalSkirmishPhaseEffect(ringBearer, Collections.singleton(nazgul)));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -4,21 +4,18 @@ import com.gempukku.lotro.cards.AbstractResponseEvent;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.actions.PlayEventAction;
|
||||
import com.gempukku.lotro.cards.effects.AdditionalSkirmishPhaseEffect;
|
||||
import com.gempukku.lotro.cards.effects.ChoiceEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromHandEffect;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.game.state.Skirmish;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||
import com.gempukku.lotro.logic.timing.actions.SkirmishPhaseAction;
|
||||
import com.gempukku.lotro.logic.timing.results.PlayCardResult;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -49,20 +46,22 @@ public class Card10_019 extends AbstractResponseEvent {
|
||||
if (playResult.getPlayedCard().getOwner().equals(game.getGameState().getCurrentPlayerId())) {
|
||||
final PhysicalCard playedOn = playResult.getAttachedTo();
|
||||
if (playedOn != null && playedOn.getBlueprint().getCardType() == CardType.COMPANION) {
|
||||
PlayEventAction action = new PlayEventAction(self);
|
||||
final PlayEventAction action = new PlayEventAction(self);
|
||||
List<Effect> possibleEffects = new LinkedList<Effect>();
|
||||
possibleEffects.add(
|
||||
new ChooseAndPlayCardFromDiscardEffect(playerId, game, -2, Filters.gollum) {
|
||||
@Override
|
||||
protected void afterCardPlayed(PhysicalCard cardPlayed) {
|
||||
gollumPlayed(game, playedOn, cardPlayed);
|
||||
action.appendEffect(
|
||||
new AdditionalSkirmishPhaseEffect(playedOn, Collections.singleton(cardPlayed)));
|
||||
}
|
||||
});
|
||||
possibleEffects.add(
|
||||
new ChooseAndPlayCardFromHandEffect(playerId, game, -2, Filters.gollum) {
|
||||
@Override
|
||||
protected void afterCardPlayed(PhysicalCard cardPlayed) {
|
||||
gollumPlayed(game, playedOn, cardPlayed);
|
||||
action.appendEffect(
|
||||
new AdditionalSkirmishPhaseEffect(playedOn, Collections.singleton(cardPlayed)));
|
||||
}
|
||||
});
|
||||
action.appendEffect(
|
||||
@@ -73,34 +72,4 @@ public class Card10_019 extends AbstractResponseEvent {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void gollumPlayed(LotroGame game, PhysicalCard character, PhysicalCard gollum) {
|
||||
final Phase currentPhase = game.getGameState().getCurrentPhase();
|
||||
final Skirmish skirmish = game.getGameState().getSkirmish();
|
||||
if (skirmish != null)
|
||||
game.getGameState().finishSkirmish();
|
||||
|
||||
final SkirmishPhaseAction skirmishPhaseAction = new SkirmishPhaseAction(character, Collections.singleton(gollum));
|
||||
// We might have to restart the skirmish, if the possession was played during it
|
||||
if (skirmish != null) {
|
||||
skirmishPhaseAction.appendEffect(
|
||||
new UnrespondableEffect() {
|
||||
@Override
|
||||
protected void doPlayEffect(LotroGame game) {
|
||||
game.getGameState().restartSkirmish(skirmish);
|
||||
}
|
||||
});
|
||||
}
|
||||
// We have to reset the phase, to whatever it was before
|
||||
skirmishPhaseAction.appendEffect(
|
||||
new UnrespondableEffect() {
|
||||
@Override
|
||||
protected void doPlayEffect(LotroGame game) {
|
||||
game.getGameState().setCurrentPhase(currentPhase);
|
||||
}
|
||||
});
|
||||
|
||||
game.getActionsEnvironment().addActionToStack(
|
||||
skirmishPhaseAction);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -251,6 +251,23 @@ public class Filters {
|
||||
return assignableToSkirmishAgainst(assignedBySide, againstFilter, false, false);
|
||||
}
|
||||
|
||||
public static Filter notPreventedByEffectToAssign(final Side assignedBySide, final PhysicalCard againstCard) {
|
||||
return new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
if (againstCard.getBlueprint().getSide() == Side.FREE_PEOPLE) {
|
||||
Map<PhysicalCard, Set<PhysicalCard>> assignment = new HashMap<PhysicalCard, Set<PhysicalCard>>();
|
||||
assignment.put(againstCard, Collections.singleton(physicalCard));
|
||||
return modifiersQuerying.isValidAssignments(gameState, assignedBySide, assignment);
|
||||
} else {
|
||||
Map<PhysicalCard, Set<PhysicalCard>> assignment = new HashMap<PhysicalCard, Set<PhysicalCard>>();
|
||||
assignment.put(physicalCard, Collections.singleton(againstCard));
|
||||
return modifiersQuerying.isValidAssignments(gameState, assignedBySide, assignment);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) {
|
||||
return Filters.and(
|
||||
assignableToSkirmish(assignedBySide, ignoreUnassigned, allowAllyToSkirmish),
|
||||
|
||||
@@ -704,9 +704,6 @@ public class IndividualCardAtTest extends AbstractAtTest {
|
||||
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());
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
<pre style="font-size:80%">
|
||||
<b>9 Nov. 2012</b>
|
||||
- "Return to Its Master" now creates an additional Skirmish Phase.
|
||||
|
||||
<b>7 Nov. 2012</b>
|
||||
- "King's Board" now correctly allows to exert the named characters for the effect, if you do not control Eomer.
|
||||
- Another change to Muster. Now to USE Muster, you have to click the card shadow showing above the panel used to drive
|
||||
|
||||
Reference in New Issue
Block a user