Fixed Terribla as the Dawn errata (and any other card that triggers on special abilities) triggering on discard-to-heal.
This commit is contained in:
@@ -9,6 +9,7 @@ import com.gempukku.lotro.common.Timeword;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.logic.timing.TriggerConditions;
|
||||
import com.gempukku.lotro.logic.timing.results.ActivateCardResult;
|
||||
import com.gempukku.lotro.logic.timing.results.DiscardToHealResult;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class UsesSpecialAbility implements TriggerCheckerProducer {
|
||||
@@ -33,6 +34,9 @@ public class UsesSpecialAbility implements TriggerCheckerProducer {
|
||||
|
||||
if (activated) {
|
||||
ActivateCardResult activateCardResult = (ActivateCardResult) actionContext.getEffectResult();
|
||||
if(activateCardResult instanceof DiscardToHealResult)
|
||||
return false;
|
||||
|
||||
if (timeword != null) {
|
||||
if (activateCardResult.getActionTimeword() != timeword)
|
||||
return false;
|
||||
|
||||
@@ -7,16 +7,16 @@ import com.gempukku.lotro.logic.effects.ActivateCardEffect;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
|
||||
public class ActivateCardAction extends AbstractCostToEffectAction {
|
||||
private final PhysicalCard _physicalCard;
|
||||
protected final PhysicalCard _physicalCard;
|
||||
|
||||
private ActivateCardEffect _activateCardEffect;
|
||||
protected ActivateCardEffect _activateCardEffect;
|
||||
|
||||
private final String _message;
|
||||
protected final String _message;
|
||||
|
||||
private boolean _sentMessage;
|
||||
private boolean _activated;
|
||||
protected boolean _sentMessage;
|
||||
protected boolean _activated;
|
||||
|
||||
private boolean _prevented;
|
||||
protected boolean _prevented;
|
||||
|
||||
public ActivateCardAction(PhysicalCard physicalCard) {
|
||||
_physicalCard = physicalCard;
|
||||
@@ -60,7 +60,7 @@ public class ActivateCardAction extends AbstractCostToEffectAction {
|
||||
|
||||
if (!_activated) {
|
||||
_activated = true;
|
||||
_activateCardEffect = new ActivateCardEffect(_physicalCard, getActionTimeword());
|
||||
generateCardEffect();
|
||||
return _activateCardEffect;
|
||||
}
|
||||
|
||||
@@ -72,4 +72,8 @@ public class ActivateCardAction extends AbstractCostToEffectAction {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void generateCardEffect() {
|
||||
_activateCardEffect = new ActivateCardEffect(_physicalCard, getActionTimeword());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.gempukku.lotro.logic.actions;
|
||||
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.logic.effects.DiscardToHealEffect;
|
||||
|
||||
public class DiscardToHealAction extends ActivateCardAction {
|
||||
public DiscardToHealAction(PhysicalCard physicalCard) {
|
||||
super(physicalCard);
|
||||
setText("Heal by discarding");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return Type.OTHER;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void generateCardEffect() {
|
||||
_activateCardEffect = new DiscardToHealEffect(_physicalCard, getActionTimeword());
|
||||
}
|
||||
}
|
||||
@@ -9,10 +9,10 @@ import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.results.ActivateCardResult;
|
||||
|
||||
public class ActivateCardEffect extends AbstractEffect {
|
||||
private final PhysicalCard _source;
|
||||
private final Timeword _actionTimeword;
|
||||
protected final PhysicalCard _source;
|
||||
protected final Timeword _actionTimeword;
|
||||
|
||||
private final ActivateCardResult _activateCardResult;
|
||||
protected ActivateCardResult _activateCardResult;
|
||||
|
||||
public ActivateCardEffect(PhysicalCard source, Timeword actionTimeword) {
|
||||
_source = source;
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.gempukku.lotro.logic.effects;
|
||||
|
||||
import com.gempukku.lotro.common.Timeword;
|
||||
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.results.DiscardToHealResult;
|
||||
|
||||
public class DiscardToHealEffect extends ActivateCardEffect {
|
||||
public DiscardToHealEffect(PhysicalCard source, Timeword actionTimeword) {
|
||||
super(source, actionTimeword);
|
||||
_activateCardResult = new DiscardToHealResult(_source, _actionTimeword);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(LotroGame game) {
|
||||
return "Discarded " + GameUtils.getCardLink(_source) + " to heal.";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.gempukku.lotro.logic.timing.results;
|
||||
|
||||
import com.gempukku.lotro.common.Timeword;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
|
||||
public class DiscardToHealResult extends ActivateCardResult {
|
||||
public DiscardToHealResult(PhysicalCard source, Timeword actionTimeword) {
|
||||
super(source, actionTimeword);
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.game.state.actions.DefaultActionsEnvironment;
|
||||
import com.gempukku.lotro.logic.GameUtils;
|
||||
import com.gempukku.lotro.logic.actions.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.actions.DiscardToHealAction;
|
||||
import com.gempukku.lotro.logic.effects.DiscardCardsFromHandEffect;
|
||||
import com.gempukku.lotro.logic.effects.HealCharactersEffect;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
@@ -36,8 +36,7 @@ public class HealByDiscardRule {
|
||||
for (PhysicalCard card : Filters.filter(game, game.getGameState().getHand(playerId), Filters.or(CardType.COMPANION, CardType.ALLY), Filters.unique)) {
|
||||
PhysicalCard active = Filters.findFirstActive(game, Filters.name(card.getBlueprint().getTitle()));
|
||||
if (active != null && game.getGameState().getWounds(active) > 0) {
|
||||
ActivateCardAction action = new ActivateCardAction(card);
|
||||
action.setText("Heal by discarding");
|
||||
var action = new DiscardToHealAction(card);
|
||||
action.appendCost(new DiscardCardsFromHandEffect(null, card.getOwner(), Collections.singleton(card), false));
|
||||
action.appendCost(
|
||||
new UnrespondableEffect() {
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package com.gempukku.lotro.cards.unofficial.pc.errata.set03;
|
||||
|
||||
import com.gempukku.lotro.cards.GenericCardTestHelper;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
import com.gempukku.lotro.common.Timeword;
|
||||
import com.gempukku.lotro.game.CardNotFoundException;
|
||||
import com.gempukku.lotro.game.PhysicalCardImpl;
|
||||
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -18,8 +20,10 @@ public class Card_03_103_ErrataTests
|
||||
return new GenericCardTestHelper(
|
||||
new HashMap<>()
|
||||
{{
|
||||
put("card", "53_103");
|
||||
// put other cards in here as needed for the test case
|
||||
put("dawn", "53_103");
|
||||
put("ithil", "9_47");
|
||||
|
||||
put("otherfrodo", "1_290");
|
||||
}},
|
||||
GenericCardTestHelper.FellowshipSites,
|
||||
GenericCardTestHelper.FOTRFrodo,
|
||||
@@ -44,7 +48,7 @@ public class Card_03_103_ErrataTests
|
||||
|
||||
var scn = GetScenario();
|
||||
|
||||
var card = scn.GetFreepsCard("card");
|
||||
var card = scn.GetFreepsCard("dawn");
|
||||
|
||||
assertEquals("Terrible as the Dawn", card.getBlueprint().getTitle());
|
||||
assertNull(card.getBlueprint().getSubtitle());
|
||||
@@ -56,18 +60,25 @@ public class Card_03_103_ErrataTests
|
||||
assertEquals(0, card.getBlueprint().getTwilightCost());
|
||||
}
|
||||
|
||||
// Uncomment any @Test markers below once this is ready to be used
|
||||
//@Test
|
||||
public void TerribleastheDawnTest1() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
@Test
|
||||
public void TerribleastheDawnDoesNotTriggerOnDiscardToHeal() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
var scn = GetScenario();
|
||||
|
||||
var card = scn.GetFreepsCard("card");
|
||||
scn.FreepsMoveCardToHand(card);
|
||||
var dawn = scn.GetShadowCard("dawn");
|
||||
scn.ShadowMoveCardToHand(dawn);
|
||||
scn.ShadowMoveCardToSupportArea("ithil"); //For spot requirement
|
||||
|
||||
var frodo = scn.GetRingBearer();
|
||||
var otherfrodo = scn.GetFreepsCard("otherfrodo");
|
||||
scn.FreepsMoveCardToHand(otherfrodo);
|
||||
|
||||
scn.AddWoundsToChar(frodo, 1);
|
||||
scn.StartGame();
|
||||
scn.FreepsPlayCard(card);
|
||||
|
||||
assertEquals(0, scn.GetTwilight());
|
||||
assertTrue(scn.FreepsActionAvailable("heal by discard"));
|
||||
scn.FreepsPlayCard(otherfrodo);
|
||||
|
||||
assertFalse(scn.ShadowHasOptionalTriggerAvailable());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user