From e716d36aec7e8a9c18cb427175301b0b9c8d216e Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Mon, 24 Oct 2011 10:24:48 +0000 Subject: [PATCH] Can't take more than X wounds... effect. --- .../modifiers/CantExertWithCardModifier.java | 6 +-- .../CantTakeMoreThanXWoundsModifier.java | 38 +++++++++++++++++++ .../modifiers/CantTakeWoundsModifier.java | 2 +- .../lotro/cards/set1/dwarven/Card1_015.java | 35 +++-------------- .../lotro/cards/set1/gondor/Card1_092.java | 21 +++------- .../lotro/cards/set1/gondor/Card1_118.java | 28 ++------------ .../lotro/cards/set4/gondor/Card4_120.java | 34 ++++------------- .../lotro/cards/set4/rohan/Card4_284.java | 26 ++++--------- .../lotro/cards/set4/shire/Card4_321.java | 28 ++------------ .../lotro/cards/set5/elven/Card5_010.java | 20 +++------- .../lotro/cards/set6/elven/Card6_023.java | 23 ++--------- .../logic/effects/WoundCharactersEffect.java | 1 + .../logic/modifiers/AbstractModifier.java | 6 +-- .../lotro/logic/modifiers/Modifier.java | 4 +- .../logic/modifiers/ModifiersEnvironment.java | 2 + .../lotro/logic/modifiers/ModifiersLogic.java | 24 ++++++++++-- 16 files changed, 109 insertions(+), 189 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantTakeMoreThanXWoundsModifier.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantExertWithCardModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantExertWithCardModifier.java index 42c683c30..65e581c74 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantExertWithCardModifier.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantExertWithCardModifier.java @@ -5,7 +5,7 @@ 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.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersLogic; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; public class CantExertWithCardModifier extends AbstractModifier { private Filter _preventExertWithFilter; @@ -16,8 +16,8 @@ public class CantExertWithCardModifier extends AbstractModifier { } @Override - public boolean canBeExerted(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard source, PhysicalCard card, boolean result) { - if (_preventExertWithFilter.accepts(gameState, modifiersLogic, source)) + public boolean canBeExerted(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard source, PhysicalCard card, boolean result) { + if (_preventExertWithFilter.accepts(gameState, modifiersQuerying, source)) return false; return result; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantTakeMoreThanXWoundsModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantTakeMoreThanXWoundsModifier.java new file mode 100644 index 000000000..192479dc5 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantTakeMoreThanXWoundsModifier.java @@ -0,0 +1,38 @@ +package com.gempukku.lotro.cards.modifiers; + +import com.gempukku.lotro.common.Filterable; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.filters.Filters; +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 CantTakeMoreThanXWoundsModifier extends AbstractModifier { + private Phase _phase; + private int _count; + + public CantTakeMoreThanXWoundsModifier(PhysicalCard source, Phase phase, int count, Filterable... affectFilters) { + this(source, phase, count, null, affectFilters); + } + + public CantTakeMoreThanXWoundsModifier(PhysicalCard source, final Phase phase, int count, Condition condition, Filterable... affectFilters) { + super(source, "Can't take more than " + count + " wound(s)", Filters.and(affectFilters, + new Filter() { + @Override + public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return phase == null || gameState.getCurrentPhase() == phase; + } + }), condition, new ModifierEffect[]{ModifierEffect.WOUND_MODIFIER}); + _phase = phase; + _count = count; + } + + @Override + public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int woundsAlreadyTaken) { + return woundsAlreadyTaken < _count; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantTakeWoundsModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantTakeWoundsModifier.java index 4b4fdb475..68bcf976d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantTakeWoundsModifier.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantTakeWoundsModifier.java @@ -18,7 +18,7 @@ public class CantTakeWoundsModifier extends AbstractModifier { } @Override - public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, boolean result) { + public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int woundsAlreadyTaken) { return false; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_015.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_015.java index 0443889b8..32e153c07 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_015.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_015.java @@ -1,9 +1,7 @@ package com.gempukku.lotro.cards.set1.dwarven; import com.gempukku.lotro.cards.AbstractAttachableFPPossession; -import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; +import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.PossessionClass; @@ -11,11 +9,7 @@ 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.actions.ActivateCardAction; -import com.gempukku.lotro.logic.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; -import com.gempukku.lotro.logic.timing.Action; -import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.modifiers.Modifier; import java.util.Collections; import java.util.List; @@ -40,27 +34,8 @@ public class Card1_015 extends AbstractAttachableFPPossession { } @Override - protected List getExtraInPlayPhaseActions(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.SKIRMISH, self)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost(new DiscardCardsFromPlayEffect(self, self)); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.sameCard(self.getAttachedTo())), Phase.SKIRMISH)); - return Collections.singletonList(action); - } - return null; - } - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (PlayConditions.isWounded(effectResult, self.getAttachedTo())) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.sameCard(self.getAttachedTo())), Phase.SKIRMISH)); - return Collections.singletonList(action); - } - return null; + protected List getNonBasicStatsModifiers(PhysicalCard self) { + return Collections.singletonList( + new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, Filters.hasAttached(self))); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_092.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_092.java index 8e38c226c..c14535dde 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_092.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_092.java @@ -1,9 +1,7 @@ package com.gempukku.lotro.cards.set1.gondor; import com.gempukku.lotro.cards.AbstractAttachableFPPossession; -import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; +import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.PossessionClass; @@ -12,8 +10,7 @@ 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.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.modifiers.Modifier; import java.util.Collections; import java.util.List; @@ -37,16 +34,8 @@ public class Card1_092 extends AbstractAttachableFPPossession { } @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (PlayConditions.isWounded(effectResult, self.getAttachedTo()) - && game.getGameState().getCurrentPhase() == Phase.SKIRMISH) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.sameCard(self.getAttachedTo())), Phase.SKIRMISH)); - return Collections.singletonList(action); - } - return null; + protected List getNonBasicStatsModifiers(PhysicalCard self) { + return Collections.singletonList( + new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, Filters.hasAttached(self))); } - } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_118.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_118.java index c1dcc6424..77bc930f0 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_118.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_118.java @@ -1,28 +1,18 @@ package com.gempukku.lotro.cards.set1.gondor; import com.gempukku.lotro.cards.AbstractOldEvent; -import com.gempukku.lotro.cards.PlayConditions; 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.AddUntilStartOfPhaseModifierEffect; -import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; +import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier; 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.filters.Filters; -import com.gempukku.lotro.game.AbstractActionProxy; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.modifiers.KeywordModifier; -import com.gempukku.lotro.logic.timing.Action; -import com.gempukku.lotro.logic.timing.EffectResult; - -import java.util.Collections; -import java.util.List; /** * Set: The Fellowship of the Ring @@ -49,20 +39,8 @@ public class Card1_118 extends AbstractOldEvent { new AddUntilStartOfPhaseModifierEffect( new KeywordModifier(self, Filters.sameCard(card), Keyword.DEFENDER), Phase.REGROUP)); action.appendEffect( - new AddUntilStartOfPhaseActionProxyEffect( - new AbstractActionProxy() { - @Override - public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) { - if (PlayConditions.isWounded(effectResult, card)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.sameCard(card)), Phase.SKIRMISH)); - return Collections.singletonList(action); - } - return null; - } - }, Phase.REGROUP)); + new AddUntilStartOfPhaseModifierEffect( + new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, card), Phase.REGROUP)); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_120.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_120.java index d735884e9..3435ebf2d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_120.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_120.java @@ -2,24 +2,20 @@ package com.gempukku.lotro.cards.set4.gondor; import com.gempukku.lotro.cards.AbstractPermanent; import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; +import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier; +import com.gempukku.lotro.cards.modifiers.conditions.LocationCondition; 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.ActivateCardAction; -import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.effects.AddTwilightEffect; import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect; import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; +import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.timing.Action; -import com.gempukku.lotro.logic.timing.EffectResult; -import com.gempukku.lotro.logic.timing.results.WoundResult; -import java.util.Collection; import java.util.Collections; -import java.util.LinkedList; import java.util.List; /** @@ -37,25 +33,11 @@ public class Card4_120 extends AbstractPermanent { } @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (effectResult.getType() == EffectResult.Type.WOUND - && game.getGameState().getCurrentPhase() == Phase.SKIRMISH - && game.getGameState().getCurrentSiteNumber() == 6 - && game.getGameState().getCurrentSiteBlock() == Block.TWO_TOWERS) { - WoundResult woundResult = (WoundResult) effectResult; - Collection woundedRingBounds = Filters.filter(woundResult.getWoundedCards(), game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.MAN), Filters.keyword(Keyword.RING_BOUND)); - - List actions = new LinkedList(); - for (PhysicalCard woundedRingBound : woundedRingBounds) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.sameCard(woundedRingBound)), Phase.SKIRMISH)); - actions.add(action); - } - return actions; - } - return null; + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + return Collections.singletonList( + new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, + new LocationCondition(Filters.siteNumber(6), Filters.siteBlock(Block.TWO_TOWERS)), + Race.MAN, Keyword.RING_BOUND)); } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_284.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_284.java index 0bdb40a7c..c61e4e5ef 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_284.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_284.java @@ -1,8 +1,7 @@ package com.gempukku.lotro.cards.set4.rohan; import com.gempukku.lotro.cards.AbstractAttachableFPPossession; -import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier; import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Phase; @@ -12,11 +11,9 @@ 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.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.timing.EffectResult; -import java.util.Collections; +import java.util.LinkedList; import java.util.List; /** @@ -40,25 +37,16 @@ public class Card4_284 extends AbstractAttachableFPPossession { @Override protected List getNonBasicStatsModifiers(PhysicalCard self) { - return Collections.singletonList( + List modifiers = new LinkedList(); + modifiers.add( new CantTakeWoundsModifier(self, Filters.and( Filters.hasAttached(self), Filters.name("Theoden"), Filters.not(Filters.inSkirmish) ))); - } - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (PlayConditions.isWounded(effectResult, self.getAttachedTo()) - && game.getGameState().getCurrentPhase() == Phase.SKIRMISH) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.sameCard(self.getAttachedTo())), Phase.SKIRMISH)); - return Collections.singletonList(action); - } - return null; + modifiers.add( + new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, Filters.hasAttached(self))); + return modifiers; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/shire/Card4_321.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/shire/Card4_321.java index 0c867f374..4d2a23439 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/shire/Card4_321.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/shire/Card4_321.java @@ -1,24 +1,14 @@ package com.gempukku.lotro.cards.set4.shire; import com.gempukku.lotro.cards.AbstractEvent; -import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.actions.PlayEventAction; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseActionProxyEffect; import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; import com.gempukku.lotro.cards.effects.CancelSkirmishEffect; -import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; +import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier; import com.gempukku.lotro.common.*; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.AbstractActionProxy; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.timing.Action; -import com.gempukku.lotro.logic.timing.EffectResult; - -import java.util.Collections; -import java.util.List; /** * Set: The Two Towers @@ -48,20 +38,8 @@ public class Card4_321 extends AbstractEvent { @Override protected void cardSelected(LotroGame game, final PhysicalCard hobbit) { action.insertEffect( - new AddUntilEndOfPhaseActionProxyEffect( - new AbstractActionProxy() { - @Override - public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResults) { - if (PlayConditions.isWounded(effectResults, hobbit)) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.sameCard(hobbit)), Phase.SKIRMISH)); - return Collections.singletonList(action); - } - return null; - } - }, Phase.SKIRMISH)); + new AddUntilEndOfPhaseModifierEffect( + new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, hobbit), Phase.SKIRMISH)); } }); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/elven/Card5_010.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/elven/Card5_010.java index 3e0d8481a..028827911 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/elven/Card5_010.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/elven/Card5_010.java @@ -2,8 +2,7 @@ package com.gempukku.lotro.cards.set5.elven; import com.gempukku.lotro.cards.AbstractCompanion; import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; +import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Phase; @@ -11,9 +10,7 @@ import com.gempukku.lotro.common.Race; 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.RequiredTriggerAction; -import com.gempukku.lotro.logic.modifiers.SpotCondition; -import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.modifiers.Modifier; import java.util.Collections; import java.util.List; @@ -42,15 +39,8 @@ public class Card5_010 extends AbstractCompanion { } @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (PlayConditions.isWounded(effectResult, self) - && game.getGameState().getCurrentPhase() == Phase.SKIRMISH) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, new SpotCondition(CardType.MINION, Filters.wounded, Filters.inSkirmishAgainst(Filters.sameCard(self))), Filters.sameCard(self.getAttachedTo())), Phase.SKIRMISH)); - return Collections.singletonList(action); - } - return null; + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + return Collections.singletonList( + new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, self, Filters.inSkirmishAgainst(CardType.MINION, Filters.wounded))); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/elven/Card6_023.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/elven/Card6_023.java index a20edf923..9b45dde95 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/elven/Card6_023.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/elven/Card6_023.java @@ -2,21 +2,17 @@ package com.gempukku.lotro.cards.set6.elven; import com.gempukku.lotro.cards.AbstractCompanion; import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; +import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier; import com.gempukku.lotro.cards.modifiers.DoesNotAddToArcheryTotalModifier; import com.gempukku.lotro.common.*; 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.Condition; import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; -import com.gempukku.lotro.logic.timing.EffectResult; -import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -54,21 +50,8 @@ public class Card6_023 extends AbstractCompanion { return Filters.countActive(gameState, modifiersQuerying, Filters.sameCard(self), Filters.hasAttached(Filters.possessionClass(PossessionClass.RANGED_WEAPON))) > 0; } })); + modifiers.add( + new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, self, Filters.hasAttached(PossessionClass.RANGED_WEAPON))); return modifiers; } - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) { - if (PlayConditions.isWounded(effectResult, self) - && game.getGameState().getCurrentPhase() == Phase.SKIRMISH) { - if (Filters.hasAttached(PossessionClass.RANGED_WEAPON).accepts(game.getGameState(), game.getModifiersQuerying(), self)) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.and(self, Filters.hasAttached(PossessionClass.RANGED_WEAPON))), Phase.SKIRMISH)); - return Collections.singletonList(action); - } - } - return null; - } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/WoundCharactersEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/WoundCharactersEffect.java index e275532dc..50abe50f5 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/WoundCharactersEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/WoundCharactersEffect.java @@ -69,6 +69,7 @@ public class WoundCharactersEffect extends AbstractPreventableCardEffect { for (PhysicalCard woundedCard : cards) { game.getGameState().addWound(woundedCard); + game.getModifiersEnvironment().addedWound(woundedCard); } return Collections.singleton(new WoundResult(cards)); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java index 398c88002..f31f890f4 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java @@ -113,12 +113,12 @@ public abstract class AbstractModifier implements Modifier { } @Override - public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, boolean result) { - return result; + public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int woundsAlreadyTaken) { + return true; } @Override - public boolean canBeExerted(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard exertionSource, PhysicalCard card, boolean result) { + public boolean canBeExerted(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard exertionSource, PhysicalCard card, boolean result) { return result; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java index ce8616f5b..d5585300e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java @@ -46,9 +46,9 @@ public interface Modifier { public boolean isOverwhelmedByStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int strength, int opposingStrength, boolean result); - public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, boolean result); + public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int woundsAlreadyTakenInPhase); - public boolean canBeExerted(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard source, PhysicalCard card, boolean result); + public boolean canBeExerted(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard source, PhysicalCard card, boolean result); public boolean isAllyParticipateInArcheryFire(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java index 823c54137..342cabbd7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersEnvironment.java @@ -13,4 +13,6 @@ public interface ModifiersEnvironment { public void addUntilEndOfPhaseModifier(Modifier modifier, Phase phase); public void addUntilEndOfTurnModifier(Modifier modifier); + + public void addedWound(PhysicalCard card); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index 9313d51d0..0d83d7d2c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -22,6 +22,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { private Map> _counters = new HashMap>(); private int _drawnThisPhaseCount = 0; + private Map _woundsPerPhaseMap = new HashMap(); @Override public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase) { @@ -38,6 +39,16 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { return limitCounter; } + @Override + public void addedWound(PhysicalCard card) { + final int cardId = card.getCardId(); + final Integer previousWounds = _woundsPerPhaseMap.get(cardId); + if (previousWounds == null) + _woundsPerPhaseMap.put(cardId, 1); + else + _woundsPerPhaseMap.put(cardId, previousWounds + 1); + } + private List getEffectModifiers(ModifierEffect modifierEffect) { List modifiers = _modifiers.get(modifierEffect); if (modifiers == null) { @@ -88,6 +99,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { counterMap.clear(); _drawnThisPhaseCount = 0; + _woundsPerPhaseMap.clear(); } public void removeStartOfPhase(Phase phase) { @@ -310,12 +322,16 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { @Override public boolean canTakeWound(GameState gameState, PhysicalCard card) { - boolean result = true; for (Modifier modifier : getModifiers(ModifierEffect.WOUND_MODIFIER)) { - if (affectsCardWithSkipSet(gameState, card, modifier)) - result = modifier.canTakeWound(gameState, this, card, result); + if (affectsCardWithSkipSet(gameState, card, modifier)) { + Integer woundsTaken = _woundsPerPhaseMap.get(card.getCardId()); + if (woundsTaken == null) + woundsTaken = 0; + if (!modifier.canTakeWound(gameState, this, card, woundsTaken)) + return false; + } } - return result; + return true; } @Override