diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PreventAllWoundsActionProxy.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PreventAllWoundsActionProxy.java new file mode 100644 index 000000000..db462913d --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PreventAllWoundsActionProxy.java @@ -0,0 +1,39 @@ +package com.gempukku.lotro.cards.effects; + +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.common.Filterable; +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.WoundCharactersEffect; +import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.timing.Effect; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class PreventAllWoundsActionProxy extends AbstractActionProxy { + private PhysicalCard _source; + private Filterable[] _filters; + + public PreventAllWoundsActionProxy(PhysicalCard source, Filterable... filters) { + _source = source; + this._filters = filters; + } + + @Override + public List getRequiredBeforeTriggers(LotroGame game, Effect effect) { + if (PlayConditions.isGettingWounded(effect, game, _filters)) { + WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect; + Collection toPreventOn = Filters.filter(woundEffect.getAffectedCardsMinusPrevented(game), game.getGameState(), game.getModifiersQuerying(), _filters); + RequiredTriggerAction action = new RequiredTriggerAction(_source); + action.appendEffect( + new PreventCardEffect(woundEffect, toPreventOn)); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PreventCardEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PreventCardEffect.java index 5491a44b0..7543f9fbc 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PreventCardEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PreventCardEffect.java @@ -5,17 +5,25 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.effects.AbstractPreventableCardEffect; import com.gempukku.lotro.logic.timing.UnrespondableEffect; +import java.util.Collection; +import java.util.Collections; + public class PreventCardEffect extends UnrespondableEffect { private AbstractPreventableCardEffect _effect; - private PhysicalCard _card; + private Collection _cards; public PreventCardEffect(AbstractPreventableCardEffect effect, PhysicalCard card) { + this(effect, Collections.singleton(card)); + } + + public PreventCardEffect(AbstractPreventableCardEffect effect, Collection cards) { _effect = effect; - _card = card; + _cards = cards; } @Override protected void doPlayEffect(LotroGame game) { - _effect.preventEffect(_card); + for (PhysicalCard card : _cards) + _effect.preventEffect(card); } } 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 32e153c07..4db76a29a 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,6 +1,9 @@ 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.AddUntilEndOfPhaseActionProxyEffect; +import com.gempukku.lotro.cards.effects.PreventAllWoundsActionProxy; import com.gempukku.lotro.cards.modifiers.CantTakeMoreThanXWoundsModifier; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Phase; @@ -9,7 +12,10 @@ 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.effects.DiscardCardsFromPlayEffect; import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.timing.Action; import java.util.Collections; import java.util.List; @@ -38,4 +44,19 @@ public class Card1_015 extends AbstractAttachableFPPossession { return Collections.singletonList( new CantTakeMoreThanXWoundsModifier(self, Phase.SKIRMISH, 1, Filters.hasAttached(self))); } + + @Override + protected List getExtraInPlayPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.SKIRMISH, self) + && PlayConditions.canSelfDiscard(self, game)) { + ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new DiscardCardsFromPlayEffect(self, self)); + action.appendEffect( + new AddUntilEndOfPhaseActionProxyEffect( + new PreventAllWoundsActionProxy(self, self.getAttachedTo()), Phase.SKIRMISH)); + return Collections.singletonList(action); + } + return null; + } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_047.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_047.java index 8691f92f3..716b17a20 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_047.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_047.java @@ -2,11 +2,11 @@ package com.gempukku.lotro.cards.set4.dwarven; import com.gempukku.lotro.cards.AbstractPermanent; import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseActionProxyEffect; +import com.gempukku.lotro.cards.effects.PreventAllWoundsActionProxy; import com.gempukku.lotro.cards.effects.StackCardFromHandEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; import com.gempukku.lotro.cards.effects.choose.ChooseCardsFromHandEffect; -import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; @@ -56,8 +56,8 @@ public class Card4_047 extends AbstractPermanent { } }); action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.sameCard(character)), Phase.SKIRMISH)); + new AddUntilEndOfPhaseActionProxyEffect( + new PreventAllWoundsActionProxy(self, character), Phase.SKIRMISH)); } }); return Collections.singletonList(action); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_096.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_096.java index 925907f82..612fa422a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_096.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_096.java @@ -2,8 +2,8 @@ package com.gempukku.lotro.cards.set4.gandalf; import com.gempukku.lotro.cards.AbstractOldEvent; import com.gempukku.lotro.cards.actions.PlayEventAction; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; -import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; +import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseActionProxyEffect; +import com.gempukku.lotro.cards.effects.PreventAllWoundsActionProxy; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; @@ -39,8 +39,8 @@ public class Card4_096 extends AbstractOldEvent { @Override protected void cardSelected(LotroGame game, PhysicalCard card) { action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.sameCard(card)), Phase.SKIRMISH)); + new AddUntilEndOfPhaseActionProxyEffect( + new PreventAllWoundsActionProxy(self, card), Phase.SKIRMISH)); } }); return action; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_097.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_097.java index af5e5b1b9..01a642482 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_097.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gandalf/Card4_097.java @@ -2,9 +2,9 @@ package com.gempukku.lotro.cards.set4.gandalf; import com.gempukku.lotro.cards.AbstractOldEvent; import com.gempukku.lotro.cards.actions.PlayEventAction; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseActionProxyEffect; +import com.gempukku.lotro.cards.effects.PreventAllWoundsActionProxy; import com.gempukku.lotro.cards.effects.PreventableEffect; -import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; @@ -40,8 +40,8 @@ public class Card4_097 extends AbstractOldEvent { PlayEventAction action = new PlayEventAction(self); action.appendEffect( new PreventableEffect(action, - new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Filters.name("Gandalf")), Phase.SKIRMISH) { + new AddUntilEndOfPhaseActionProxyEffect( + new PreventAllWoundsActionProxy(self, Filters.name("Gandalf")), Phase.SKIRMISH) { @Override public String getText(LotroGame game) { return "Prevent all wounds to Gandalf"; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/isengard/Card6_060.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/isengard/Card6_060.java index 9682cac49..456032ac7 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/isengard/Card6_060.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/isengard/Card6_060.java @@ -2,10 +2,10 @@ package com.gempukku.lotro.cards.set6.isengard; import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect; +import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseActionProxyEffect; import com.gempukku.lotro.cards.effects.ExertCharactersEffect; +import com.gempukku.lotro.cards.effects.PreventAllWoundsActionProxy; import com.gempukku.lotro.cards.effects.choose.ChooseAndRemoveTokensFromCardEffect; -import com.gempukku.lotro.cards.modifiers.CantTakeWoundsModifier; import com.gempukku.lotro.cards.modifiers.StrengthModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; @@ -69,8 +69,8 @@ public class Card6_060 extends AbstractMinion { action.appendCost( new ExertCharactersEffect(self, self)); action.appendEffect( - new AddUntilStartOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, Race.URUK_HAI), Phase.ASSIGNMENT)); + new AddUntilStartOfPhaseActionProxyEffect( + new PreventAllWoundsActionProxy(self, Race.URUK_HAI), Phase.ASSIGNMENT)); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/AbstractActionProxy.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/AbstractActionProxy.java index 8ab9e952a..ee3328886 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/AbstractActionProxy.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/AbstractActionProxy.java @@ -9,17 +9,17 @@ import java.util.List; public abstract class AbstractActionProxy implements ActionProxy { @Override - public List getRequiredBeforeTriggers(LotroGame lotroGame, Effect effect) { + public List getRequiredBeforeTriggers(LotroGame game, Effect effect) { return null; } @Override - public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) { + public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) { return null; } @Override - public List getOptionalAfterTriggers(String playerId, LotroGame lotroGame, EffectResult effectResult) { + public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult) { return null; } } diff --git a/gemp-lotr/todo.txt b/gemp-lotr/todo.txt index 221b0a752..10cf47014 100644 --- a/gemp-lotr/todo.txt +++ b/gemp-lotr/todo.txt @@ -1,7 +1,5 @@ TO DO: Critical: -- If a card prevents all wounds, the wounds can still be assiged to the card, but take no effect, which is different -from "can't take wounds". - Fix "Final Cry" Next priority: