diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ChoiceEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ChoiceEffect.java index eb5770046..35923cee4 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ChoiceEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ChoiceEffect.java @@ -3,14 +3,16 @@ package com.gempukku.lotro.cards.effects; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.SubAction; import com.gempukku.lotro.logic.decisions.MultipleChoiceAwaitingDecision; -import com.gempukku.lotro.logic.timing.AbstractEffect; +import com.gempukku.lotro.logic.timing.AbstractSubActionEffect; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.EffectResult; +import java.util.Collection; import java.util.LinkedList; import java.util.List; -public class ChoiceEffect extends AbstractEffect { +public class ChoiceEffect extends AbstractSubActionEffect { private Action _action; private String _choicePlayerId; private List _possibleEffects; @@ -41,7 +43,7 @@ public class ChoiceEffect extends AbstractEffect { } @Override - protected FullEffectResult playEffectReturningResult(final LotroGame game) { + public Collection playEffect(final LotroGame game) { final List possibleEffects = new LinkedList(); for (Effect effect : _possibleEffects) { if (effect.isPlayableInFull(game)) @@ -51,20 +53,19 @@ public class ChoiceEffect extends AbstractEffect { if (possibleEffects.size() == 1) { SubAction subAction = new SubAction(_action); subAction.appendEffect(possibleEffects.get(0)); - game.getActionsEnvironment().addActionToStack(subAction); - } else { + processSubAction(game, subAction); + } else if (possibleEffects.size() > 0) { game.getUserFeedback().sendAwaitingDecision(_choicePlayerId, new MultipleChoiceAwaitingDecision(1, "Choose effect to use", getEffectsText(possibleEffects, game)) { @Override protected void validDecisionMade(int index, String result) { SubAction subAction = new SubAction(_action); subAction.appendEffect(possibleEffects.get(index)); - game.getActionsEnvironment().addActionToStack(subAction); + processSubAction(game, subAction); } }); } - - return new FullEffectResult(null, possibleEffects.size() > 0, possibleEffects.size() > 0); + return null; } private String[] getEffectsText(List possibleEffects, LotroGame game) { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ExhaustCharacterEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ExhaustCharacterEffect.java index 90b610546..21c80fdd6 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ExhaustCharacterEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ExhaustCharacterEffect.java @@ -6,14 +6,14 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.GameUtils; import com.gempukku.lotro.logic.actions.SubAction; -import com.gempukku.lotro.logic.timing.AbstractEffect; +import com.gempukku.lotro.logic.timing.AbstractSubActionEffect; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; import java.util.Collection; -public class ExhaustCharacterEffect extends AbstractEffect { +public class ExhaustCharacterEffect extends AbstractSubActionEffect { private PhysicalCard _source; private Action _action; private Filterable[] _filters; @@ -35,7 +35,7 @@ public class ExhaustCharacterEffect extends AbstractEffect { @Override public String getText(LotroGame game) { - return "Exhaust " + getAppendedNames(Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), _filters)); + return "Exhaust " + GameUtils.getAppendedNames(Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), _filters)); } @Override @@ -44,15 +44,15 @@ public class ExhaustCharacterEffect extends AbstractEffect { } @Override - protected FullEffectResult playEffectReturningResult(LotroGame game) { + public Collection playEffect(LotroGame game) { SubAction subAction = new SubAction(_action); subAction.appendEffect(new InfiniteExertionEffect(_source, subAction, _filters)); - game.getActionsEnvironment().addActionToStack(subAction); + processSubAction(game, subAction); final Collection cards = Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), _filters); if (cards.size() > 0) - game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " exhausts " + getAppendedNames(cards)); + game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " exhausts " + GameUtils.getAppendedNames(cards)); - return new FullEffectResult(null, false, false); + return null; } private class InfiniteExertionEffect extends ExertCharactersEffect { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PreventableEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PreventableEffect.java index a238e9c33..a2eba5198 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PreventableEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PreventableEffect.java @@ -4,15 +4,13 @@ import com.gempukku.lotro.cards.actions.PreventSubAction; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.actions.SubAction; -import com.gempukku.lotro.logic.timing.AbstractEffect; +import com.gempukku.lotro.logic.timing.AbstractSubActionEffect; import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.EffectResult; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; +import java.util.*; -public class PreventableEffect extends AbstractEffect { +public class PreventableEffect extends AbstractSubActionEffect { private CostToEffectAction _action; private Effect _effectToExecute; private Iterator _choicePlayers; @@ -49,9 +47,10 @@ public class PreventableEffect extends AbstractEffect { } @Override - protected FullEffectResult playEffectReturningResult(LotroGame game) { - game.getActionsEnvironment().addActionToStack(new PreventSubAction(_action, _effectToExecute, _choicePlayers, _preventionCost)); - return new FullEffectResult(null, true, true); + public Collection playEffect(LotroGame game) { + final PreventSubAction subAction = new PreventSubAction(_action, _effectToExecute, _choicePlayers, _preventionCost); + processSubAction(game, subAction); + return null; } public static interface PreventionCost { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java index 41eb1fc0d..fd8f434ef 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java @@ -7,15 +7,16 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.SubAction; import com.gempukku.lotro.logic.decisions.ArbitraryCardsSelectionDecision; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; -import com.gempukku.lotro.logic.timing.AbstractEffect; +import com.gempukku.lotro.logic.timing.AbstractSubActionEffect; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.EffectResult; import java.util.Collection; import java.util.LinkedList; import java.util.List; -public abstract class RevealAndChooseCardsFromOpponentHandEffect extends AbstractEffect { +public abstract class RevealAndChooseCardsFromOpponentHandEffect extends AbstractSubActionEffect { private Action _action; private String _playerId; private String _opponentId; @@ -43,14 +44,14 @@ public abstract class RevealAndChooseCardsFromOpponentHandEffect extends Abstrac } @Override - protected FullEffectResult playEffectReturningResult(LotroGame game) { + public Collection playEffect(LotroGame game) { if (game.getModifiersQuerying().canLookOrRevealCardsInHand(game.getGameState(), _opponentId)) { List opponentHand = new LinkedList(game.getGameState().getHand(_opponentId)); SubAction subAction = new SubAction(_action); subAction.appendEffect( new RevealCardsFromHandEffect(_source, _opponentId, opponentHand)); - game.getActionsEnvironment().addActionToStack(subAction); + processSubAction(game, subAction); Collection selectable = Filters.filter(opponentHand, game.getGameState(), game.getModifiersQuerying(), _selectionFilter); @@ -62,9 +63,8 @@ public abstract class RevealAndChooseCardsFromOpponentHandEffect extends Abstrac cardsSelected(selectedCards); } }); - return new FullEffectResult(null, true, true); } - return new FullEffectResult(null, false, false); + return null; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndAddUntilEOPStrengthBonusEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndAddUntilEOPStrengthBonusEffect.java index 5012856bf..75005b19d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndAddUntilEOPStrengthBonusEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndAddUntilEOPStrengthBonusEffect.java @@ -1,12 +1,10 @@ package com.gempukku.lotro.cards.effects.choose; -import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; import com.gempukku.lotro.common.Filterable; -import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.common.Phase; 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.actions.SubAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.modifiers.StrengthModifier; import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator; @@ -30,10 +28,10 @@ public class ChooseAndAddUntilEOPStrengthBonusEffect extends ChooseActiveCardEff @Override protected void cardSelected(LotroGame game, PhysicalCard card) { - SubAction action = new SubAction(_action); - action.appendEffect( - new AddUntilEndOfPhaseModifierEffect( - new StrengthModifier(_source, Filters.sameCard(card), null, _bonusEvaluator.evaluateExpression(game.getGameState(), game.getModifiersQuerying(), card)), game.getGameState().getCurrentPhase())); - game.getActionsEnvironment().addActionToStack(action); + final int bonus = _bonusEvaluator.evaluateExpression(game.getGameState(), game.getModifiersQuerying(), card); + final StrengthModifier modifier = new StrengthModifier(_source, card, null, bonus); + final Phase phase = game.getGameState().getCurrentPhase(); + + game.getModifiersEnvironment().addUntilEndOfPhaseModifier(modifier, phase); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDeadPileEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDeadPileEffect.java index f9be91253..c4a75ff4b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDeadPileEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDeadPileEffect.java @@ -7,16 +7,19 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.decisions.ArbitraryCardsSelectionDecision; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; -import com.gempukku.lotro.logic.timing.AbstractEffect; +import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.EffectResult; import java.util.Collection; import java.util.LinkedList; import java.util.List; -public class ChooseAndPlayCardFromDeadPileEffect extends AbstractEffect { +public class ChooseAndPlayCardFromDeadPileEffect implements Effect { private String _playerId; private Filter _filter; private int _twilightModifier; + private Action _playCardAction; public ChooseAndPlayCardFromDeadPileEffect(String playerId, List cardsInDeadPileAtStart, Filterable... filter) { this(playerId, cardsInDeadPileAtStart, 0, filter); @@ -44,8 +47,12 @@ public class ChooseAndPlayCardFromDeadPileEffect extends AbstractEffect { return null; } + private Collection getPlayableInDeadPile(LotroGame game) { + return Filters.filter(game.getGameState().getDiscard(_playerId), game.getGameState(), game.getModifiersQuerying(), _filter, Filters.playable(game, _twilightModifier)); + } + @Override - protected FullEffectResult playEffectReturningResult(final LotroGame game) { + public Collection playEffect(final LotroGame game) { Collection deadPile = getPlayableInDeadPile(game); if (deadPile.size() > 0) { game.getUserFeedback().sendAwaitingDecision(_playerId, @@ -55,16 +62,22 @@ public class ChooseAndPlayCardFromDeadPileEffect extends AbstractEffect { List selectedCards = getSelectedCardsByResponse(result); if (selectedCards.size() > 0) { PhysicalCard selectedCard = selectedCards.get(0); - game.getActionsEnvironment().addActionToStack(selectedCard.getBlueprint().getPlayCardAction(_playerId, game, selectedCard, _twilightModifier)); + _playCardAction = selectedCard.getBlueprint().getPlayCardAction(_playerId, game, selectedCard, _twilightModifier); + game.getActionsEnvironment().addActionToStack(_playCardAction); } } }); - return new FullEffectResult(null, true, true); } - return new FullEffectResult(null, false, false); + return null; } - private Collection getPlayableInDeadPile(LotroGame game) { - return Filters.filter(game.getGameState().getDiscard(_playerId), game.getGameState(), game.getModifiersQuerying(), _filter, Filters.playable(game, _twilightModifier)); + @Override + public boolean wasSuccessful() { + return _playCardAction != null && _playCardAction.wasSuccessful(); + } + + @Override + public boolean wasCarriedOut() { + return _playCardAction != null && _playCardAction.wasCarriedOut(); } } \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDeckEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDeckEffect.java index de9e31637..d1cd98d1b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDeckEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDeckEffect.java @@ -6,17 +6,19 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.decisions.ArbitraryCardsSelectionDecision; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; -import com.gempukku.lotro.logic.timing.AbstractEffect; +import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.EffectResult; import java.util.Collection; import java.util.LinkedList; import java.util.List; -public class ChooseAndPlayCardFromDeckEffect extends AbstractEffect { +public class ChooseAndPlayCardFromDeckEffect implements Effect { private String _playerId; private Filterable[] _filter; private int _twilightModifier; + private Action _playCardAction; public ChooseAndPlayCardFromDeckEffect(String playerId, Filterable... filter) { this(playerId, 0, filter); @@ -44,7 +46,7 @@ public class ChooseAndPlayCardFromDeckEffect extends AbstractEffect { } @Override - protected FullEffectResult playEffectReturningResult(final LotroGame game) { + public Collection playEffect(final LotroGame game) { Collection deck = Filters.filter(game.getGameState().getDeck(_playerId), game.getGameState(), game.getModifiersQuerying(), Filters.and(_filter, Filters.playable(game, _twilightModifier))); game.getUserFeedback().sendAwaitingDecision(_playerId, new ArbitraryCardsSelectionDecision(1, "Choose a card to play", new LinkedList(deck), 0, 1) { @@ -53,10 +55,21 @@ public class ChooseAndPlayCardFromDeckEffect extends AbstractEffect { List selectedCards = getSelectedCardsByResponse(result); if (selectedCards.size() > 0) { PhysicalCard selectedCard = selectedCards.get(0); - game.getActionsEnvironment().addActionToStack(selectedCard.getBlueprint().getPlayCardAction(_playerId, game, selectedCard, _twilightModifier)); + _playCardAction = selectedCard.getBlueprint().getPlayCardAction(_playerId, game, selectedCard, _twilightModifier); + game.getActionsEnvironment().addActionToStack(_playCardAction); } } }); - return new FullEffectResult(null, true, true); + return null; + } + + @Override + public boolean wasSuccessful() { + return _playCardAction != null && _playCardAction.wasSuccessful(); + } + + @Override + public boolean wasCarriedOut() { + return _playCardAction != null && _playCardAction.wasCarriedOut(); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDiscardEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDiscardEffect.java index 47f94d50b..1d209eb44 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDiscardEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromDiscardEffect.java @@ -7,17 +7,19 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.decisions.ArbitraryCardsSelectionDecision; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; -import com.gempukku.lotro.logic.timing.AbstractEffect; +import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.EffectResult; import java.util.Collection; import java.util.LinkedList; import java.util.List; -public class ChooseAndPlayCardFromDiscardEffect extends AbstractEffect { +public class ChooseAndPlayCardFromDiscardEffect implements Effect { private String _playerId; private Filter _filter; private int _twilightModifier; + private Action _playCardAction; public ChooseAndPlayCardFromDiscardEffect(String playerId, List cardsInDiscardAtStart, Filterable... filter) { this(playerId, cardsInDiscardAtStart, 0, filter); @@ -45,8 +47,12 @@ public class ChooseAndPlayCardFromDiscardEffect extends AbstractEffect { return null; } + private Collection getPlayableInDiscard(LotroGame game) { + return Filters.filter(game.getGameState().getDiscard(_playerId), game.getGameState(), game.getModifiersQuerying(), _filter, Filters.playable(game, _twilightModifier)); + } + @Override - protected FullEffectResult playEffectReturningResult(final LotroGame game) { + public Collection playEffect(final LotroGame game) { Collection discard = getPlayableInDiscard(game); if (discard.size() > 0) { game.getUserFeedback().sendAwaitingDecision(_playerId, @@ -56,16 +62,22 @@ public class ChooseAndPlayCardFromDiscardEffect extends AbstractEffect { List selectedCards = getSelectedCardsByResponse(result); if (selectedCards.size() > 0) { PhysicalCard selectedCard = selectedCards.get(0); - game.getActionsEnvironment().addActionToStack(selectedCard.getBlueprint().getPlayCardAction(_playerId, game, selectedCard, _twilightModifier)); + _playCardAction = selectedCard.getBlueprint().getPlayCardAction(_playerId, game, selectedCard, _twilightModifier); + game.getActionsEnvironment().addActionToStack(_playCardAction); } } }); - return new FullEffectResult(null, true, true); } - return new FullEffectResult(null, false, false); + return null; } - private Collection getPlayableInDiscard(LotroGame game) { - return Filters.filter(game.getGameState().getDiscard(_playerId), game.getGameState(), game.getModifiersQuerying(), _filter, Filters.playable(game, _twilightModifier)); + @Override + public boolean wasSuccessful() { + return _playCardAction != null && _playCardAction.wasSuccessful(); + } + + @Override + public boolean wasCarriedOut() { + return _playCardAction != null && _playCardAction.wasCarriedOut(); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromHandEffect.java index 4852a310f..0143f656f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/choose/ChooseAndPlayCardFromHandEffect.java @@ -7,17 +7,19 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.decisions.CardsSelectionDecision; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; -import com.gempukku.lotro.logic.timing.AbstractEffect; +import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.EffectResult; import java.util.Collection; import java.util.LinkedList; import java.util.List; -public class ChooseAndPlayCardFromHandEffect extends AbstractEffect { +public class ChooseAndPlayCardFromHandEffect implements Effect { private String _playerId; private Filter _filter; private int _twilightModifier; + private Action _playCardAction; public ChooseAndPlayCardFromHandEffect(String playerId, List cardsInHandAtStart, Filterable... filter) { this(playerId, cardsInHandAtStart, 0, filter); @@ -49,8 +51,11 @@ public class ChooseAndPlayCardFromHandEffect extends AbstractEffect { return null; } + protected void cardChosenCallback(PhysicalCard cardChosenToPlay) { + } + @Override - protected FullEffectResult playEffectReturningResult(final LotroGame game) { + public Collection playEffect(final LotroGame game) { Collection playableInHand = getPlayableInHandCards(game); if (playableInHand.size() > 0) { game.getUserFeedback().sendAwaitingDecision(_playerId, @@ -58,15 +63,22 @@ public class ChooseAndPlayCardFromHandEffect extends AbstractEffect { @Override public void decisionMade(String result) throws DecisionResultInvalidException { final PhysicalCard selectedCard = getSelectedCardsByResponse(result).iterator().next(); - game.getActionsEnvironment().addActionToStack(selectedCard.getBlueprint().getPlayCardAction(_playerId, game, selectedCard, _twilightModifier)); + _playCardAction = selectedCard.getBlueprint().getPlayCardAction(_playerId, game, selectedCard, _twilightModifier); + game.getActionsEnvironment().addActionToStack(_playCardAction); cardChosenCallback(selectedCard); } }); - return new FullEffectResult(null, true, true); } - return new FullEffectResult(null, false, false); + return null; } - protected void cardChosenCallback(PhysicalCard cardChosenToPlay) { + @Override + public boolean wasSuccessful() { + return _playCardAction != null && _playCardAction.wasSuccessful(); + } + + @Override + public boolean wasCarriedOut() { + return _playCardAction != null && _playCardAction.wasCarriedOut(); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_073.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_073.java index 47d4b34af..b6aa911e3 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_073.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_073.java @@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.ChoiceEffect; import com.gempukku.lotro.cards.effects.StackCardFromHandEffect; import com.gempukku.lotro.cards.effects.choose.ChooseArbitraryCardsEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseCardsFromHandEffect; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; @@ -42,15 +43,11 @@ public class Card1_073 extends AbstractPermanent { List possibleChoices = new LinkedList(); possibleChoices.add( - new ChooseArbitraryCardsEffect(playerId, "Choose Free Peoples artifact or possession", game.getGameState().getHand(playerId), Filters.and(Filters.side(Side.FREE_PEOPLE), Filters.or(Filters.type(CardType.ARTIFACT), Filters.type(CardType.POSSESSION))), 1, 1) { - @Override - public String getText(LotroGame game) { - return "Stack a Free Peoples artifact or possession"; - } - + new ChooseCardsFromHandEffect(playerId, 1, 1, Side.FREE_PEOPLE, Filters.or(CardType.ARTIFACT, CardType.POSSESSION)) { @Override protected void cardsSelected(LotroGame game, Collection selectedCards) { - action.appendEffect(new StackCardFromHandEffect(selectedCards.iterator().next(), self)); + for (PhysicalCard card : selectedCards) + action.appendEffect(new StackCardFromHandEffect(card, self)); } }); possibleChoices.add( diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java index 2a7a64e54..8f4b43f2d 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/GameUtils.java @@ -38,4 +38,26 @@ public class GameUtils { public static String getCardLink(PhysicalCard card) { return "
" + card.getBlueprint().getName() + "
"; } + + public static String getAppendedTextNames(Collection cards) { + StringBuilder sb = new StringBuilder(); + for (PhysicalCard card : cards) + sb.append(card.getBlueprint().getName() + ", "); + + if (sb.length() == 0) + return "none"; + else + return sb.substring(0, sb.length() - 2); + } + + public static final String getAppendedNames(Collection cards) { + StringBuilder sb = new StringBuilder(); + for (PhysicalCard card : cards) + sb.append(GameUtils.getCardLink(card) + ", "); + + if (sb.length() == 0) + return "none"; + else + return sb.substring(0, sb.length() - 2); + } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/AbstractEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/AbstractEffect.java index 582a3e48c..f0237df51 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/AbstractEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/AbstractEffect.java @@ -38,25 +38,11 @@ public abstract class AbstractEffect implements Effect { } protected final String getAppendedTextNames(Collection cards) { - StringBuilder sb = new StringBuilder(); - for (PhysicalCard card : cards) - sb.append(card.getBlueprint().getName() + ", "); - - if (sb.length() == 0) - return "none"; - else - return sb.substring(0, sb.length() - 2); + return GameUtils.getAppendedTextNames(cards); } protected final String getAppendedNames(Collection cards) { - StringBuilder sb = new StringBuilder(); - for (PhysicalCard card : cards) - sb.append(GameUtils.getCardLink(card) + ", "); - - if (sb.length() == 0) - return "none"; - else - return sb.substring(0, sb.length() - 2); + return GameUtils.getAppendedNames(cards); } protected static class FullEffectResult { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/AbstractSubActionEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/AbstractSubActionEffect.java new file mode 100644 index 000000000..9eb4071ee --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/AbstractSubActionEffect.java @@ -0,0 +1,23 @@ +package com.gempukku.lotro.logic.timing; + +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.SubAction; + +public abstract class AbstractSubActionEffect implements Effect { + private SubAction _subAction; + + protected void processSubAction(LotroGame game, SubAction subAction) { + _subAction = subAction; + game.getActionsEnvironment().addActionToStack(_subAction); + } + + @Override + public boolean wasSuccessful() { + return _subAction != null && _subAction.wasSuccessful(); + } + + @Override + public boolean wasCarriedOut() { + return _subAction != null && _subAction.wasCarriedOut(); + } +}