From 7c2570fc235fbddd897d2c3437d380067533500c Mon Sep 17 00:00:00 2001 From: "marcin.sciesinski" Date: Tue, 1 Oct 2019 17:58:31 -0700 Subject: [PATCH] Simplified check for playable cards, special abilities --- .../lotro/cards/set10/sauron/Card10_098.java | 13 +------ .../cards/set11/uruk_hai/Card11_186.java | 11 +++--- .../lotro/cards/set12/wraith/Card12_169.java | 6 +-- .../lotro/cards/set13/elven/Card13_013.java | 15 ++------ .../lotro/cards/set13/gondor/Card13_075.java | 20 ++++------ .../cards/set20/isengard/Card20_249.java | 4 +- .../lotro/cards/set3/site/Card3_117.java | 15 +------- .../lotro/cards/set4/gondor/Card4_117.java | 19 ++-------- .../lotro/cards/set4/isengard/Card4_147.java | 17 ++------- .../lotro/cards/set4/isengard/Card4_157.java | 13 +------ .../lotro/cards/set4/site/Card4_355.java | 13 +------ .../lotro/cards/set8/sauron/Card8_100.java | 15 +------- .../actions/DefaultActionsEnvironment.java | 2 + ...EventsOrPhaseSpecialAbilitiesModifier.java | 29 +++++++++++++++ ...sCantUsePhaseSpecialAbilitiesModifier.java | 3 +- ...onentsCantUseSpecialAbilitiesModifier.java | 3 +- .../PlayerCantPlayCardsModifier.java | 26 +++++++++++++ ...EventsOrPhaseSpecialAbilitiesModifier.java | 3 +- ...rCantUsePhaseSpecialAbilitiesModifier.java | 3 +- .../PlayersCantPlayPhaseEventsModifier.java | 27 ++++++++++++++ ...EventsOrPhaseSpecialAbilitiesModifier.java | 3 +- ...tUseCardPhaseSpecialAbilitiesModifier.java | 3 +- ...sCantUsePhaseSpecialAbilitiesModifier.java | 3 +- .../RemoveSpecialAbilitiesModifier.java | 29 --------------- .../cost/WoundExtraPlayCostModifier.java | 37 +++++++++++++++++++ 25 files changed, 173 insertions(+), 159 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantPlayCardsModifier.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantPlayPhaseEventsModifier.java delete mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/RemoveSpecialAbilitiesModifier.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/cost/WoundExtraPlayCostModifier.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/sauron/Card10_098.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/sauron/Card10_098.java index 58708dcc2..af75c4c25 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/sauron/Card10_098.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/sauron/Card10_098.java @@ -11,9 +11,7 @@ import com.gempukku.lotro.logic.actions.PlayEventAction; import com.gempukku.lotro.logic.cardtype.AbstractResponseEvent; import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect; import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.modifiers.PlayerCantPlayCardsModifier; import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.PlayConditions; import com.gempukku.lotro.logic.timing.TriggerConditions; @@ -45,14 +43,7 @@ public class Card10_098 extends AbstractResponseEvent { new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 1, Culture.SAURON, CardType.MINION)); action.appendEffect( new AddUntilEndOfPhaseModifierEffect( - new AbstractModifier(self, null, null, ModifierEffect.ACTION_MODIFIER) { - @Override - public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (action.getPerformingPlayer().equals(game.getGameState().getCurrentPlayerId()) && action.getType() == Action.Type.PLAY_CARD) - return false; - return true; - } - })); + new PlayerCantPlayCardsModifier(self, game.getGameState().getCurrentPlayerId()))); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/uruk_hai/Card11_186.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/uruk_hai/Card11_186.java index 42d2790fb..78be64b9b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/uruk_hai/Card11_186.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/uruk_hai/Card11_186.java @@ -6,7 +6,7 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.cardtype.AbstractMinion; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.RemoveSpecialAbilitiesModifier; +import com.gempukku.lotro.logic.modifiers.PlayersCantUseCardSpecialAbilitiesModifier; import com.gempukku.lotro.logic.modifiers.SpotCondition; import java.util.Collections; @@ -32,8 +32,9 @@ public class Card11_186 extends AbstractMinion { @Override public List getInPlayModifiers(LotroGame game, PhysicalCard self) { -return Collections.singletonList(new RemoveSpecialAbilitiesModifier(self, -new SpotCondition(self, Filters.assignedToSkirmish), -Filters.or(CardType.COMPANION, Filters.and(Side.FREE_PEOPLE, CardType.POSSESSION)))); -} + return Collections.singletonList( + new PlayersCantUseCardSpecialAbilitiesModifier(self, + new SpotCondition(self, Filters.assignedToSkirmish), + Filters.or(CardType.COMPANION, Filters.and(Side.FREE_PEOPLE, CardType.POSSESSION)))); + } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/wraith/Card12_169.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/wraith/Card12_169.java index 12f8381eb..82257d7f5 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/wraith/Card12_169.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/wraith/Card12_169.java @@ -8,7 +8,7 @@ import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.cardtype.AbstractPermanent; import com.gempukku.lotro.logic.effects.TransferPermanentEffect; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.RemoveSpecialAbilitiesModifier; +import com.gempukku.lotro.logic.modifiers.PlayersCantUseCardSpecialAbilitiesModifier; import com.gempukku.lotro.logic.timing.PlayConditions; import java.util.Collections; @@ -44,6 +44,6 @@ public class Card12_169 extends AbstractPermanent { @Override public List getInPlayModifiers(LotroGame game, PhysicalCard self) { -return Collections.singletonList(new RemoveSpecialAbilitiesModifier(self, Filters.hasAttached(self))); -} + return Collections.singletonList(new PlayersCantUseCardSpecialAbilitiesModifier(self, Filters.hasAttached(self))); + } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/elven/Card13_013.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/elven/Card13_013.java index eb92180c2..bc5e8b18e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/elven/Card13_013.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/elven/Card13_013.java @@ -13,9 +13,7 @@ import com.gempukku.lotro.logic.effects.AddUntilStartOfPhaseModifierEffect; import com.gempukku.lotro.logic.effects.AssignmentEffect; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.effects.SelfDiscardEffect; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.modifiers.PlayersCantUseCardPhaseSpecialAbilitiesModifier; import com.gempukku.lotro.logic.timing.PlayConditions; import java.util.Collections; @@ -53,15 +51,8 @@ public class Card13_013 extends AbstractPermanent { new AssignmentEffect(playerId, companion, minion)); action.appendEffect( new AddUntilStartOfPhaseModifierEffect( - new AbstractModifier(self, "Can't use skirmish special abilities", null, ModifierEffect.ACTION_MODIFIER) { - @Override - public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (action.getActionTimeword() == Phase.SKIRMISH && action.getType() == Action.Type.SPECIAL_ABILITY - && (action.getActionSource() == minion || action.getActionSource() == companion)) - return false; - return true; - } - }, Phase.REGROUP)); + new PlayersCantUseCardPhaseSpecialAbilitiesModifier( + self, Phase.SKIRMISH, Filters.or(minion, companion)), Phase.REGROUP)); } }); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gondor/Card13_075.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gondor/Card13_075.java index da55b1379..6492f358d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gondor/Card13_075.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gondor/Card13_075.java @@ -1,24 +1,20 @@ package com.gempukku.lotro.cards.set13.gondor; -import com.gempukku.lotro.logic.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.logic.effects.AddUntilStartOfPhaseModifierEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.modifiers.RemoveSpecialAbilitiesModifier; -import com.gempukku.lotro.common.CardType; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Phase; -import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.OptionalTriggerAction; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; +import com.gempukku.lotro.logic.cardtype.AbstractPermanent; +import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.logic.effects.AddUntilStartOfPhaseModifierEffect; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; import com.gempukku.lotro.logic.modifiers.KeywordModifier; +import com.gempukku.lotro.logic.modifiers.PlayersCantUseCardSpecialAbilitiesModifier; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.TriggerConditions; import com.gempukku.lotro.logic.timing.results.ExertResult; import java.util.Collections; @@ -68,7 +64,7 @@ public class Card13_075 extends AbstractPermanent { protected void cardSelected(LotroGame game, PhysicalCard card) { action.appendEffect( new AddUntilStartOfPhaseModifierEffect( - new RemoveSpecialAbilitiesModifier(self, card), Phase.REGROUP)); + new PlayersCantUseCardSpecialAbilitiesModifier(self, card), Phase.REGROUP)); } }); action.setText("Spot a minion to prevent it from using special abilities"); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/isengard/Card20_249.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/isengard/Card20_249.java index 3f592adf9..3d6c2e466 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/isengard/Card20_249.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/isengard/Card20_249.java @@ -8,7 +8,7 @@ import com.gempukku.lotro.logic.actions.PlayEventAction; import com.gempukku.lotro.logic.cardtype.AbstractEvent; import com.gempukku.lotro.logic.effects.AddUntilStartOfPhaseModifierEffect; import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.modifiers.RemoveSpecialAbilitiesModifier; +import com.gempukku.lotro.logic.modifiers.PlayersCantUseCardSpecialAbilitiesModifier; import com.gempukku.lotro.logic.timing.PlayConditions; /** @@ -40,7 +40,7 @@ public class Card20_249 extends AbstractEvent { protected void forEachCardExertedCallback(PhysicalCard character) { action.appendEffect( new AddUntilStartOfPhaseModifierEffect( - new RemoveSpecialAbilitiesModifier(self, character), Phase.REGROUP)); + new PlayersCantUseCardSpecialAbilitiesModifier(self, character), Phase.REGROUP)); } }); return action; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_117.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_117.java index 8af8c656d..04820c839 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_117.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_117.java @@ -1,16 +1,13 @@ package com.gempukku.lotro.cards.set3.site; -import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.SitesBlock; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.cardtype.AbstractSite; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.modifiers.PlayersCantPlayPhaseEventsModifier; import java.util.Collections; import java.util.List; @@ -31,14 +28,6 @@ public class Card3_117 extends AbstractSite { @Override public List getInPlayModifiers(LotroGame game, PhysicalCard self) { return Collections.singletonList( - new AbstractModifier(self, "Maneuver events may not be played", null, ModifierEffect.ACTION_MODIFIER) { - @Override - public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - PhysicalCard source = action.getActionSource(); - if (source != null && action.getActionTimeword() == Phase.MANEUVER && source.getBlueprint().getCardType() == CardType.EVENT) - return false; - return true; - } - }); + new PlayersCantPlayPhaseEventsModifier(self, Phase.MANEUVER)); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_117.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_117.java index 76c370a2e..a50c0cd64 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_117.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_117.java @@ -5,10 +5,9 @@ import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.cardtype.AbstractCompanion; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.modifiers.OpponentsCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier; +import com.gempukku.lotro.logic.modifiers.SpotCondition; import java.util.Collections; import java.util.List; @@ -36,17 +35,7 @@ public class Card4_117 extends AbstractCompanion { @Override public List getInPlayModifiers(LotroGame game, final PhysicalCard self) { return Collections.singletonList( - new AbstractModifier(self, "Can't play skimirhs events or skirmish special abilities", null, ModifierEffect.ACTION_MODIFIER) { - @Override - public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (!Filters.inSkirmish.accepts(game, self)) - return true; - if (performingPlayer != null && performingPlayer.equals(self.getOwner())) - return true; - if (action.getActionTimeword() == Phase.SKIRMISH) - return false; - return true; - } - }); + new OpponentsCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier(self, + new SpotCondition(self, Filters.inSkirmish), self.getOwner(), Phase.SKIRMISH)); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_147.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_147.java index 181e1d6c1..bf5059cf2 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_147.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_147.java @@ -6,10 +6,8 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.cardtype.AbstractPermanent; import com.gempukku.lotro.logic.effects.SelfDiscardEffect; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.modifiers.PlayerCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier; import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.PlayConditions; @@ -49,16 +47,7 @@ public class Card4_147 extends AbstractPermanent { @Override public List getInPlayModifiers(LotroGame game, PhysicalCard self) { return Collections.singletonList( - new AbstractModifier(self, null, null, ModifierEffect.ACTION_MODIFIER) { - @Override - public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (!performingPlayer.equals(game.getGameState().getCurrentPlayerId())) - return true; - if (action.getActionTimeword() == Phase.ARCHERY) - return false; - - return true; - } - }); + new PlayerCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier( + self, game.getGameState().getCurrentPlayerId(), Phase.ARCHERY)); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_157.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_157.java index 3c74acddc..52f65c16b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_157.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_157.java @@ -7,11 +7,9 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.cardtype.AbstractAttachable; import com.gempukku.lotro.logic.modifiers.AbstractExtraPlayCostModifier; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; +import com.gempukku.lotro.logic.modifiers.PlayersCantUseCardSpecialAbilitiesModifier; import com.gempukku.lotro.logic.modifiers.cost.ExertExtraPlayCostModifier; -import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.PlayConditions; import java.util.Collections; @@ -59,14 +57,7 @@ public class Card4_157 extends AbstractAttachable { public List getInPlayModifiers(LotroGame game, final PhysicalCard self) { List modifiers = new LinkedList(); modifiers.add( - new AbstractModifier(self, null, null, ModifierEffect.ACTION_MODIFIER) { - @Override - public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (action.getActionSource() == self.getAttachedTo()) - return false; - return true; - } - }); + new PlayersCantUseCardSpecialAbilitiesModifier(self, Filters.hasAttached(self))); return modifiers; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_355.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_355.java index e07609c31..e3152051b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_355.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/site/Card4_355.java @@ -6,10 +6,8 @@ import com.gempukku.lotro.common.SitesBlock; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.cardtype.AbstractSite; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.modifiers.PlayersCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier; import java.util.Collections; import java.util.List; @@ -30,13 +28,6 @@ public class Card4_355 extends AbstractSite { @Override public List getInPlayModifiers(LotroGame game, PhysicalCard self) { return Collections.singletonList( - new AbstractModifier(self, null, null, ModifierEffect.ACTION_MODIFIER) { - @Override - public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (action.getActionTimeword() == Phase.SKIRMISH) - return false; - return true; - } - }); + new PlayersCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier(self, Phase.SKIRMISH)); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/sauron/Card8_100.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/sauron/Card8_100.java index bb85c5efd..a299ab84d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/sauron/Card8_100.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/sauron/Card8_100.java @@ -7,10 +7,8 @@ import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.cardtype.AbstractMinion; import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect; import com.gempukku.lotro.logic.effects.ReturnCardsToHandEffect; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.ArcheryTotalModifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.modifiers.PlayerCantUsePhaseSpecialAbilitiesModifier; import com.gempukku.lotro.logic.timing.PlayConditions; import java.util.Collections; @@ -45,16 +43,7 @@ public class Card8_100 extends AbstractMinion { new ArcheryTotalModifier(self, Side.FREE_PEOPLE, -2))); action.appendEffect( new AddUntilEndOfPhaseModifierEffect( - new AbstractModifier(self, null, null, ModifierEffect.ACTION_MODIFIER) { - @Override - public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (performingPlayer.equals(game.getGameState().getCurrentPlayerId()) - && action.getType() == Action.Type.SPECIAL_ABILITY - && action.getActionTimeword() == Phase.ARCHERY) - return false; - return true; - } - })); + new PlayerCantUsePhaseSpecialAbilitiesModifier(self, game.getGameState().getCurrentPlayerId(), Phase.ARCHERY))); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java index f5223e0dc..5607e2e52 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java @@ -230,11 +230,13 @@ public class DefaultActionsEnvironment implements ActionsEnvironment { public List getPhaseActions(String playerId) { List result = new LinkedList(); + final Phase currentPhase = _lotroGame.getGameState().getCurrentPhase(); for (ActionProxy actionProxy : _actionProxies) { List actions = actionProxy.getPhaseActions(playerId, _lotroGame); if (actions != null) { for (Action action : actions) { action.setPerformingPlayer(playerId); + action.setActionTimeword(currentPhase); if (_lotroGame.getModifiersQuerying().canPlayAction(_lotroGame, playerId, action)) result.add(action); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java new file mode 100644 index 000000000..e4d35efaa --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java @@ -0,0 +1,29 @@ +package com.gempukku.lotro.logic.modifiers; + +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.timing.Action; + +public class OpponentsCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier extends AbstractModifier { + private String _playerId; + private Phase _phase; + + public OpponentsCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier(PhysicalCard source, String playerId, Phase phase) { + this(source, null, playerId, phase); + } + + public OpponentsCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier(PhysicalCard source, Condition condition, String playerId, Phase phase) { + super(source, null, null, condition, ModifierEffect.ACTION_MODIFIER); + _playerId = playerId; + _phase = phase; + } + + @Override + public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { + if ((action.getType() == Action.Type.PLAY_CARD || action.getType() == Action.Type.SPECIAL_ABILITY) + && !performingPlayer.equals(_playerId) && action.getActionTimeword() == _phase) + return false; + return true; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantUsePhaseSpecialAbilitiesModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantUsePhaseSpecialAbilitiesModifier.java index 35a86883a..6d49d77ca 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantUsePhaseSpecialAbilitiesModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantUsePhaseSpecialAbilitiesModifier.java @@ -21,7 +21,8 @@ public class OpponentsCantUsePhaseSpecialAbilitiesModifier extends AbstractModif @Override public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (!performingPlayer.equals(_playerId) && action.getActionTimeword() == _phase && action.getType() == Action.Type.SPECIAL_ABILITY) + if (action.getType() == Action.Type.SPECIAL_ABILITY + && !performingPlayer.equals(_playerId) && action.getActionTimeword() == _phase) return false; return true; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantUseSpecialAbilitiesModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantUseSpecialAbilitiesModifier.java index d01885b15..d6aa4e5cb 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantUseSpecialAbilitiesModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/OpponentsCantUseSpecialAbilitiesModifier.java @@ -18,7 +18,8 @@ public class OpponentsCantUseSpecialAbilitiesModifier extends AbstractModifier { @Override public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (!performingPlayer.equals(_playerId) && action.getType() == Action.Type.SPECIAL_ABILITY) + if (action.getType() == Action.Type.SPECIAL_ABILITY + && !performingPlayer.equals(_playerId)) return false; return true; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantPlayCardsModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantPlayCardsModifier.java new file mode 100644 index 000000000..d93843929 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantPlayCardsModifier.java @@ -0,0 +1,26 @@ +package com.gempukku.lotro.logic.modifiers; + +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.timing.Action; + +public class PlayerCantPlayCardsModifier extends AbstractModifier { + private String _playerId; + + public PlayerCantPlayCardsModifier(PhysicalCard source, String playerId) { + this(source, null, playerId); + } + + public PlayerCantPlayCardsModifier(PhysicalCard source, Condition condition, String playerId) { + super(source, null, null, condition, ModifierEffect.ACTION_MODIFIER); + _playerId = playerId; + } + + @Override + public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { + if (action.getType() == Action.Type.PLAY_CARD + && performingPlayer.equals(_playerId)) + return false; + return true; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java index 77ef599a2..1ca81d3ff 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java @@ -21,7 +21,8 @@ public class PlayerCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier extends Ab @Override public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (performingPlayer.equals(_playerId) && action.getActionTimeword() == _phase) + if ((action.getType() == Action.Type.PLAY_CARD || action.getType() == Action.Type.SPECIAL_ABILITY) + && performingPlayer.equals(_playerId) && action.getActionTimeword() == _phase) return false; return true; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantUsePhaseSpecialAbilitiesModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantUsePhaseSpecialAbilitiesModifier.java index 9d02e8bb4..1d348149e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantUsePhaseSpecialAbilitiesModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayerCantUsePhaseSpecialAbilitiesModifier.java @@ -21,7 +21,8 @@ public class PlayerCantUsePhaseSpecialAbilitiesModifier extends AbstractModifier @Override public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (performingPlayer.equals(_playerId) && action.getActionTimeword() == _phase && action.getType() == Action.Type.SPECIAL_ABILITY) + if (action.getType() == Action.Type.SPECIAL_ABILITY + && performingPlayer.equals(_playerId) && action.getActionTimeword() == _phase) return false; return true; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantPlayPhaseEventsModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantPlayPhaseEventsModifier.java new file mode 100644 index 000000000..748eb050b --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantPlayPhaseEventsModifier.java @@ -0,0 +1,27 @@ +package com.gempukku.lotro.logic.modifiers; + +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.timing.Action; + +public class PlayersCantPlayPhaseEventsModifier extends AbstractModifier { + private Phase _phase; + + public PlayersCantPlayPhaseEventsModifier(PhysicalCard source, Phase phase) { + this(source, null, phase); + } + + public PlayersCantPlayPhaseEventsModifier(PhysicalCard source, Condition condition, Phase phase) { + super(source, null, null, condition, ModifierEffect.ACTION_MODIFIER); + _phase = phase; + } + + @Override + public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { + if (action.getType() == Action.Type.PLAY_CARD + && action.getActionTimeword() == _phase) + return false; + return true; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java index 4b3758295..611539bf9 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier.java @@ -19,7 +19,8 @@ public class PlayersCantPlayPhaseEventsOrPhaseSpecialAbilitiesModifier extends A @Override public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (action.getActionTimeword() == _phase) + if ((action.getType() == Action.Type.PLAY_CARD || action.getType() == Action.Type.SPECIAL_ABILITY) + && action.getActionTimeword() == _phase) return false; return true; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantUseCardPhaseSpecialAbilitiesModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantUseCardPhaseSpecialAbilitiesModifier.java index e1c883544..a52dba44b 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantUseCardPhaseSpecialAbilitiesModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantUseCardPhaseSpecialAbilitiesModifier.java @@ -9,7 +9,6 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.timing.Action; public class PlayersCantUseCardPhaseSpecialAbilitiesModifier extends AbstractModifier { - private Phase _phase; private Filter _sourceFilters; @@ -18,7 +17,7 @@ public class PlayersCantUseCardPhaseSpecialAbilitiesModifier extends AbstractMod } public PlayersCantUseCardPhaseSpecialAbilitiesModifier(PhysicalCard source, Condition condition, Phase phase, Filterable... sourceFilters) { - super(source, null, null, condition, ModifierEffect.ACTION_MODIFIER); + super(source, "Can't use " + phase.getHumanReadable() + " special abilities", null, condition, ModifierEffect.ACTION_MODIFIER); _phase = phase; _sourceFilters = Filters.and(sourceFilters); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantUsePhaseSpecialAbilitiesModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantUsePhaseSpecialAbilitiesModifier.java index 7678e4971..5c11d1ad4 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantUsePhaseSpecialAbilitiesModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/PlayersCantUsePhaseSpecialAbilitiesModifier.java @@ -19,7 +19,8 @@ public class PlayersCantUsePhaseSpecialAbilitiesModifier extends AbstractModifie @Override public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (action.getActionTimeword() == _phase && action.getType() == Action.Type.SPECIAL_ABILITY) + if (action.getType() == Action.Type.SPECIAL_ABILITY + && action.getActionTimeword() == _phase && action.getType() == Action.Type.SPECIAL_ABILITY) return false; return true; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/RemoveSpecialAbilitiesModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/RemoveSpecialAbilitiesModifier.java deleted file mode 100644 index 00028773e..000000000 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/RemoveSpecialAbilitiesModifier.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.gempukku.lotro.logic.modifiers; - -import com.gempukku.lotro.common.Filterable; -import com.gempukku.lotro.filters.Filter; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.timing.Action; - -public class RemoveSpecialAbilitiesModifier extends AbstractModifier { - private Filter _affectFilter; - - public RemoveSpecialAbilitiesModifier(PhysicalCard source, Filterable affectFilter) { - this(source, null, affectFilter); - } - - public RemoveSpecialAbilitiesModifier(PhysicalCard source, Condition condition, Filterable affectFilter) { - super(source, "Removed special abilities", affectFilter, condition, ModifierEffect.ACTION_MODIFIER); - _affectFilter = Filters.and(affectFilter); - } - - @Override - public boolean canPlayAction(LotroGame game, String performingPlayer, Action action) { - if (action.getType() == Action.Type.SPECIAL_ABILITY - && action.getActionSource() != null && _affectFilter.accepts(game, action.getActionSource())) - return false; - return true; - } -} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/cost/WoundExtraPlayCostModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/cost/WoundExtraPlayCostModifier.java new file mode 100644 index 000000000..c57e3706f --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/cost/WoundExtraPlayCostModifier.java @@ -0,0 +1,37 @@ +package com.gempukku.lotro.logic.modifiers.cost; + +import com.gempukku.lotro.common.Filterable; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.CostToEffectAction; +import com.gempukku.lotro.logic.effects.ChooseAndWoundCharactersEffect; +import com.gempukku.lotro.logic.modifiers.AbstractExtraPlayCostModifier; +import com.gempukku.lotro.logic.modifiers.Condition; +import com.gempukku.lotro.logic.timing.PlayConditions; + +public class WoundExtraPlayCostModifier extends AbstractExtraPlayCostModifier { + private int count; + private Filterable[] wounding; + + public WoundExtraPlayCostModifier(PhysicalCard source, Filterable affects, Condition condition, Filterable... wounding) { + this(source, affects, condition, 1, wounding); + } + + public WoundExtraPlayCostModifier(PhysicalCard source, Filterable affects, Condition condition, int count, Filterable... wounding) { + super(source, "Wound to play", Filters.and(affects), condition); + this.count = count; + this.wounding = wounding; + } + + @Override + public boolean canPayExtraCostsToPlay(LotroGame game, PhysicalCard card) { + return PlayConditions.canWound(card, game, 1, count, wounding); + } + + @Override + public void appendExtraCosts(LotroGame game, CostToEffectAction action, PhysicalCard card) { + action.appendCost( + new ChooseAndWoundCharactersEffect(action, card.getOwner(), count, count, wounding)); + } +}