From 80571d645f73720609e17df01026b7f7e194bbdf Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 10 Nov 2011 15:40:57 +0000 Subject: [PATCH] Fixing the minions that require a cost to be able to assign them to skirmish. --- ...lePlayerMayNotAssignCharacterModifier.java | 15 +++- .../lotro/cards/set7/wraith/Card7_197.java | 75 +++++++++++-------- .../lotro/cards/set7/wraith/Card7_200.java | 70 +++++++++-------- .../lotro/cards/set7/wraith/Card7_201.java | 70 +++++++++-------- 4 files changed, 137 insertions(+), 93 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/FreePeoplePlayerMayNotAssignCharacterModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/FreePeoplePlayerMayNotAssignCharacterModifier.java index ad3b0b3e3..e7ccda803 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/FreePeoplePlayerMayNotAssignCharacterModifier.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/FreePeoplePlayerMayNotAssignCharacterModifier.java @@ -1,21 +1,30 @@ package com.gempukku.lotro.cards.modifiers; +import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.common.Side; -import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.Condition; import com.gempukku.lotro.logic.modifiers.ModifierEffect; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; public class FreePeoplePlayerMayNotAssignCharacterModifier extends AbstractModifier { - public FreePeoplePlayerMayNotAssignCharacterModifier(PhysicalCard source, Filter affectFilter) { + private Condition _condition; + + public FreePeoplePlayerMayNotAssignCharacterModifier(PhysicalCard source, Filterable affectFilter) { + this(source, null, affectFilter); + } + + public FreePeoplePlayerMayNotAssignCharacterModifier(PhysicalCard source, Condition condition, Filterable affectFilter) { super(source, "Free people player may not assign character to skirmish", affectFilter, null, ModifierEffect.ASSIGNMENT_MODIFIER); + _condition = condition; } @Override public boolean canBeAssignedToSkirmish(GameState gameState, Side sidePlayer, ModifiersQuerying modifiersQuerying, PhysicalCard card) { - if (sidePlayer == Side.FREE_PEOPLE) + if (sidePlayer == Side.FREE_PEOPLE + && (_condition == null || _condition.isFullfilled(gameState, modifiersQuerying))) return false; return true; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_197.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_197.java index 72482cd96..c12ddd812 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_197.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_197.java @@ -5,23 +5,30 @@ import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.ExertCharactersEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.common.*; +import com.gempukku.lotro.cards.modifiers.FreePeoplePlayerMayNotAssignCharacterModifier; +import com.gempukku.lotro.cards.modifiers.conditions.AndCondition; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Race; import com.gempukku.lotro.filters.Filters; 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.actions.ActivateCardAction; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.decisions.MultipleChoiceAwaitingDecision; +import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect; +import com.gempukku.lotro.logic.modifiers.Condition; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.SpotCondition; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; import java.util.Collections; import java.util.List; -import java.util.Map; /** * Set: The Return of the King @@ -43,40 +50,48 @@ public class Card7_197 extends AbstractMinion { @Override public List getAlwaysOnModifiers(LotroGame game, final PhysicalCard self) { return Collections.singletonList( - new AbstractModifier(self, null, null, ModifierEffect.ASSIGNMENT_MODIFIER) { - @Override - public boolean isValidAssignments(GameState gameState, Side side, ModifiersQuerying modifiersQuerying, Map> assignments) { - if (side == Side.FREE_PEOPLE) { - if (isGettingAssigned(assignments, self)) { - return Filters.countActive(gameState, modifiersQuerying, CardType.COMPANION, Filters.canExert(self)) >= Filters.countActive(gameState, modifiersQuerying, Race.NAZGUL); - } - } - - return true; - } - }); + new FreePeoplePlayerMayNotAssignCharacterModifier(self, + new AndCondition( + new SpotCondition(Race.NAZGUL), + new Condition() { + @Override + public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { + return self.getData() == null; + } + }), self)); } @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (PlayConditions.assigned(game, effectResult, Side.FREE_PEOPLE, Filters.any, self)) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - int count = Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Race.NAZGUL); - action.appendEffect( - new ChooseAndExertCharactersEffect(action, game.getGameState().getCurrentPlayerId(), count, count, CardType.COMPANION)); + public List getRequiredAfterTriggers(final LotroGame game, EffectResult effectResult, final PhysicalCard self) { + if (effectResult.getType() == EffectResult.Type.FREE_PEOPLE_PLAYER_STARTS_ASSIGNING + && PlayConditions.canSpot(game, Race.NAZGUL)) { + final RequiredTriggerAction action = new RequiredTriggerAction(self); + final int count = Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Race.NAZGUL); + action.appendCost( + new PlayoutDecisionEffect(game.getUserFeedback(), game.getGameState().getCurrentPlayerId(), + new MultipleChoiceAwaitingDecision(1, "Do you wish to exert " + count + " companions to be able to assign this minion?", new String[]{"Yes", "No"}) { + @Override + protected void validDecisionMade(int index, String result) { + if (index == 0) { + action.appendCost( + new ChooseAndExertCharactersEffect(action, game.getGameState().getCurrentPlayerId(), count, count, CardType.COMPANION)); + action.appendEffect( + new UnrespondableEffect() { + @Override + protected void doPlayEffect(LotroGame game) { + self.storeData(new Object()); + } + }); + } + } + })); return Collections.singletonList(action); } + if (PlayConditions.endOfPhase(game, effectResult, Phase.ASSIGNMENT)) + self.removeData(); return null; } - private boolean isGettingAssigned(Map> assignments, PhysicalCard self) { - for (List physicalCards : assignments.values()) { - if (physicalCards.contains(self)) - return true; - } - return false; - } - @Override protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_200.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_200.java index 282df2ed4..b04576425 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_200.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_200.java @@ -3,24 +3,27 @@ package com.gempukku.lotro.cards.set7.wraith; import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; +import com.gempukku.lotro.cards.modifiers.FreePeoplePlayerMayNotAssignCharacterModifier; +import com.gempukku.lotro.cards.modifiers.conditions.AndCondition; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.common.Side; -import com.gempukku.lotro.filters.Filters; 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.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.decisions.MultipleChoiceAwaitingDecision; +import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect; +import com.gempukku.lotro.logic.modifiers.Condition; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.SpotCondition; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; import java.util.Collections; import java.util.List; -import java.util.Map; /** * Set: The Return of the King @@ -42,37 +45,44 @@ public class Card7_200 extends AbstractMinion { @Override public List getAlwaysOnModifiers(LotroGame game, final PhysicalCard self) { return Collections.singletonList( - new AbstractModifier(self, null, null, ModifierEffect.ASSIGNMENT_MODIFIER) { - @Override - public boolean isValidAssignments(GameState gameState, Side side, ModifiersQuerying modifiersQuerying, Map> assignments) { - if (side == Side.FREE_PEOPLE) { - if (isGettingAssigned(assignments, self) && Filters.countSpottable(gameState, modifiersQuerying, Race.NAZGUL) > 0) { - return Filters.countActive(gameState, modifiersQuerying, CardType.COMPANION, Filters.canExert(self)) >= 1; - } - } - - return true; - } - }); + new FreePeoplePlayerMayNotAssignCharacterModifier(self, + new AndCondition( + new SpotCondition(Race.NAZGUL), + new Condition() { + @Override + public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { + return self.getData() == null; + } + }), self)); } @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (PlayConditions.assigned(game, effectResult, Side.FREE_PEOPLE, Filters.any, self) + public List getRequiredAfterTriggers(final LotroGame game, EffectResult effectResult, final PhysicalCard self) { + if (effectResult.getType() == EffectResult.Type.FREE_PEOPLE_PLAYER_STARTS_ASSIGNING && PlayConditions.canSpot(game, Race.NAZGUL)) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new ChooseAndExertCharactersEffect(action, game.getGameState().getCurrentPlayerId(), 1, 1, CardType.COMPANION)); + final RequiredTriggerAction action = new RequiredTriggerAction(self); + action.appendCost( + new PlayoutDecisionEffect(game.getUserFeedback(), game.getGameState().getCurrentPlayerId(), + new MultipleChoiceAwaitingDecision(1, "Do you wish to exert a companion to be able to assign this minion?", new String[]{"Yes", "No"}) { + @Override + protected void validDecisionMade(int index, String result) { + if (index == 0) { + action.appendCost( + new ChooseAndExertCharactersEffect(action, game.getGameState().getCurrentPlayerId(), 1, 1, CardType.COMPANION)); + action.appendEffect( + new UnrespondableEffect() { + @Override + protected void doPlayEffect(LotroGame game) { + self.storeData(new Object()); + } + }); + } + } + })); return Collections.singletonList(action); } + if (PlayConditions.endOfPhase(game, effectResult, Phase.ASSIGNMENT)) + self.removeData(); return null; } - - private boolean isGettingAssigned(Map> assignments, PhysicalCard self) { - for (List physicalCards : assignments.values()) { - if (physicalCards.contains(self)) - return true; - } - return false; - } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_201.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_201.java index 14d628059..5c3461986 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_201.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_201.java @@ -3,24 +3,27 @@ package com.gempukku.lotro.cards.set7.wraith; import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; +import com.gempukku.lotro.cards.modifiers.FreePeoplePlayerMayNotAssignCharacterModifier; +import com.gempukku.lotro.cards.modifiers.conditions.AndCondition; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.common.Side; -import com.gempukku.lotro.filters.Filters; 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.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.decisions.MultipleChoiceAwaitingDecision; +import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect; +import com.gempukku.lotro.logic.modifiers.Condition; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.SpotCondition; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; import java.util.Collections; import java.util.List; -import java.util.Map; /** * Set: The Return of the King @@ -42,37 +45,44 @@ public class Card7_201 extends AbstractMinion { @Override public List getAlwaysOnModifiers(LotroGame game, final PhysicalCard self) { return Collections.singletonList( - new AbstractModifier(self, null, null, ModifierEffect.ASSIGNMENT_MODIFIER) { - @Override - public boolean isValidAssignments(GameState gameState, Side side, ModifiersQuerying modifiersQuerying, Map> assignments) { - if (side == Side.FREE_PEOPLE) { - if (isGettingAssigned(assignments, self) && Filters.countSpottable(gameState, modifiersQuerying, Race.NAZGUL) > 0) { - return Filters.countActive(gameState, modifiersQuerying, CardType.COMPANION, Filters.canExert(self)) >= 1; - } - } - - return true; - } - }); + new FreePeoplePlayerMayNotAssignCharacterModifier(self, + new AndCondition( + new SpotCondition(Race.NAZGUL), + new Condition() { + @Override + public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { + return self.getData() == null; + } + }), self)); } @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (PlayConditions.assigned(game, effectResult, Side.FREE_PEOPLE, Filters.any, self) + public List getRequiredAfterTriggers(final LotroGame game, EffectResult effectResult, final PhysicalCard self) { + if (effectResult.getType() == EffectResult.Type.FREE_PEOPLE_PLAYER_STARTS_ASSIGNING && PlayConditions.canSpot(game, Race.NAZGUL)) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new ChooseAndExertCharactersEffect(action, game.getGameState().getCurrentPlayerId(), 1, 1, CardType.COMPANION)); + final RequiredTriggerAction action = new RequiredTriggerAction(self); + action.appendCost( + new PlayoutDecisionEffect(game.getUserFeedback(), game.getGameState().getCurrentPlayerId(), + new MultipleChoiceAwaitingDecision(1, "Do you wish to exert a companion to be able to assign this minion?", new String[]{"Yes", "No"}) { + @Override + protected void validDecisionMade(int index, String result) { + if (index == 0) { + action.appendCost( + new ChooseAndExertCharactersEffect(action, game.getGameState().getCurrentPlayerId(), 1, 1, CardType.COMPANION)); + action.appendEffect( + new UnrespondableEffect() { + @Override + protected void doPlayEffect(LotroGame game) { + self.storeData(new Object()); + } + }); + } + } + })); return Collections.singletonList(action); } + if (PlayConditions.endOfPhase(game, effectResult, Phase.ASSIGNMENT)) + self.removeData(); return null; } - - private boolean isGettingAssigned(Map> assignments, PhysicalCard self) { - for (List physicalCards : assignments.values()) { - if (physicalCards.contains(self)) - return true; - } - return false; - } }