diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/ActivateCardAction.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/ActivateCardAction.java index 62fc64f3d..07480d1e6 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/ActivateCardAction.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/ActivateCardAction.java @@ -3,6 +3,8 @@ package com.gempukku.lotro.logic.actions; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.GameUtils; +import com.gempukku.lotro.logic.effects.ActivateCardEffect; import com.gempukku.lotro.logic.effects.SendMessageEffect; import com.gempukku.lotro.logic.timing.Effect; @@ -10,11 +12,16 @@ public class ActivateCardAction extends AbstractCostToEffectAction { private PhysicalCard _physicalCard; private Keyword _type; + private ActivateCardEffect _activateCardEffect; + private boolean _sentMessage; + private boolean _activated; public ActivateCardAction(PhysicalCard physicalCard, Keyword type) { _physicalCard = physicalCard; _type = type; + + _activateCardEffect = new ActivateCardEffect(physicalCard); } @Override @@ -44,14 +51,21 @@ public class ActivateCardAction extends AbstractCostToEffectAction { if (cost != null) return cost; - Effect effect = getNextEffect(); - if (effect != null) - return effect; + if (!_activated) { + _activated = true; + return _activateCardEffect; + } + + if (!_activateCardEffect.isCancelled()) { + Effect effect = getNextEffect(); + if (effect != null) + return effect; + } } return null; } - protected String getMessage() { - return "
" + _physicalCard.getBlueprint().getName() + "
is used"; + private String getMessage() { + return GameUtils.getCardLink(_physicalCard) + " is used"; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/OptionalTriggerAction.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/OptionalTriggerAction.java index 28d104fe4..fb1882831 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/OptionalTriggerAction.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/OptionalTriggerAction.java @@ -1,17 +1,56 @@ package com.gempukku.lotro.logic.actions; +import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.GameUtils; +import com.gempukku.lotro.logic.effects.SendMessageEffect; +import com.gempukku.lotro.logic.timing.Effect; -public class OptionalTriggerAction extends ActivateCardAction { +public class OptionalTriggerAction extends AbstractCostToEffectAction { private PhysicalCard _physicalCard; + private boolean _sentMessage; + public OptionalTriggerAction(PhysicalCard physicalCard) { - super(physicalCard, null); _physicalCard = physicalCard; } @Override - protected String getMessage() { - return "
" + _physicalCard.getBlueprint().getName() + "
optional triggered effect is used"; + public Keyword getType() { + return null; + } + + @Override + public PhysicalCard getActionSource() { + return _physicalCard; + } + + @Override + public String getText(LotroGame game) { + return null; + } + + @Override + public Effect nextEffect() { + if (!_sentMessage && _physicalCard != null) { + _sentMessage = true; + return new SendMessageEffect(getMessage()); + } + + if (!isCostFailed()) { + Effect cost = getNextCost(); + if (cost != null) + return cost; + + Effect effect = getNextEffect(); + if (effect != null) + return effect; + } + return null; + } + + private String getMessage() { + return GameUtils.getCardLink(_physicalCard) + " optional triggered effect is used"; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/RequiredTriggerAction.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/RequiredTriggerAction.java index 37152b95c..ee98caad3 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/RequiredTriggerAction.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/RequiredTriggerAction.java @@ -1,17 +1,56 @@ package com.gempukku.lotro.logic.actions; +import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.GameUtils; +import com.gempukku.lotro.logic.effects.SendMessageEffect; +import com.gempukku.lotro.logic.timing.Effect; -public class RequiredTriggerAction extends ActivateCardAction { +public class RequiredTriggerAction extends AbstractCostToEffectAction { private PhysicalCard _physicalCard; + private boolean _sentMessage; + public RequiredTriggerAction(PhysicalCard physicalCard) { - super(physicalCard, null); _physicalCard = physicalCard; } @Override - protected String getMessage() { - return "
" + _physicalCard.getBlueprint().getName() + "
required triggered effect is used"; + public Keyword getType() { + return null; + } + + @Override + public PhysicalCard getActionSource() { + return _physicalCard; + } + + @Override + public String getText(LotroGame game) { + return null; + } + + @Override + public Effect nextEffect() { + if (!_sentMessage && _physicalCard != null) { + _sentMessage = true; + return new SendMessageEffect(getMessage()); + } + + if (!isCostFailed()) { + Effect cost = getNextCost(); + if (cost != null) + return cost; + + Effect effect = getNextEffect(); + if (effect != null) + return effect; + } + return null; + } + + private String getMessage() { + return GameUtils.getCardLink(_physicalCard) + " required triggered effect is used"; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ActivateCardEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ActivateCardEffect.java new file mode 100644 index 000000000..c18243b42 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ActivateCardEffect.java @@ -0,0 +1,49 @@ +package com.gempukku.lotro.logic.effects; + +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.GameUtils; +import com.gempukku.lotro.logic.timing.AbstractEffect; +import com.gempukku.lotro.logic.timing.EffectResult; + +public class ActivateCardEffect extends AbstractEffect { + private PhysicalCard _source; + + private boolean _cancelled; + + public ActivateCardEffect(PhysicalCard source) { + _source = source; + } + + @Override + public EffectResult.Type getType() { + return EffectResult.Type.ACTIVATE; + } + + @Override + public String getText(LotroGame game) { + return "Activated " + GameUtils.getCardLink(_source); + } + + public PhysicalCard getSource() { + return _source; + } + + @Override + public boolean isPlayableInFull(LotroGame game) { + return true; + } + + public boolean isCancelled() { + return _cancelled; + } + + public void cancel() { + _cancelled = true; + } + + @Override + protected FullEffectResult playEffectReturningResult(LotroGame game) { + return new FullEffectResult(null, true, true); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java index 9809d31a0..a1d43d625 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java @@ -14,7 +14,7 @@ public abstract class EffectResult { START_OF_TURN, END_OF_TURN, - PLAY, DRAW_CARD_OR_PUT_INTO_HAND, + PLAY, ACTIVATE, DRAW_CARD_OR_PUT_INTO_HAND, PUT_ON_THE_ONE_RING, REMOVE_BURDEN, ADD_BURDEN,