Splitting the discard from play effect result for each card.
This commit is contained in:
@@ -136,6 +136,12 @@ public class TriggerConditions {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean forEachDiscardedFromPlay(LotroGame game, EffectResult effectResult, Filterable... filters) {
|
||||
if (effectResult.getType() == EffectResult.Type.FOR_EACH_DISCARDED_FROM_PLAY)
|
||||
return Filters.and(filters).accepts(game.getGameState(), game.getModifiersQuerying(), ((DiscardCardsFromPlayResult) effectResult).getDiscardedCard());
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean forEachWounded(LotroGame game, EffectResult effectResult, Filterable... filters) {
|
||||
if (effectResult.getType() == EffectResult.Type.FOR_EACH_WOUNDED)
|
||||
return Filters.and(filters).accepts(game.getGameState(), game.getModifiersQuerying(), ((WoundResult) effectResult).getWoundedCard());
|
||||
|
||||
@@ -69,8 +69,9 @@ public class LiberateASiteEffect extends AbstractEffect {
|
||||
|
||||
game.getGameState().loseControlOfCard(siteToLiberate, Zone.ADVENTURE_PATH);
|
||||
|
||||
if (discardedCards.size() > 0)
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCards));
|
||||
for (PhysicalCard discardedCard : discardedCards)
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard));
|
||||
|
||||
return new FullEffectResult(true, true);
|
||||
}
|
||||
return new FullEffectResult(false, false);
|
||||
|
||||
@@ -77,8 +77,10 @@ public class ReturnCardsToHandEffect extends AbstractEffect {
|
||||
|
||||
if (_source != null && cardsToReturnToHand.size() > 0)
|
||||
game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " returns " + getAppendedNames(cardsToReturnToHand) + " to hand");
|
||||
if (discardedFromPlay.size() > 0)
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedFromPlay));
|
||||
|
||||
for (PhysicalCard discardedCard : discardedFromPlay)
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard));
|
||||
|
||||
|
||||
return new FullEffectResult(true, true);
|
||||
}
|
||||
|
||||
@@ -66,8 +66,9 @@ public class StackCardFromPlayEffect extends AbstractEffect {
|
||||
game.getGameState().stackCard(game, _card, _stackOn);
|
||||
|
||||
// Send the result (attached cards get discarded)
|
||||
if (discardedCards.size() > 0)
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCards));
|
||||
for (PhysicalCard discardedCard : discardedCards)
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard));
|
||||
|
||||
return new FullEffectResult(true, true);
|
||||
}
|
||||
return new FullEffectResult(false, false);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.gempukku.lotro.cards.set1.moria;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractPermanent;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
@@ -9,11 +10,11 @@ import com.gempukku.lotro.common.Zone;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
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.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -33,20 +34,19 @@ public class Card1_193 extends AbstractPermanent {
|
||||
|
||||
@Override
|
||||
public List<? extends ActivateCardAction> getOptionalInPlayAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (effectResult.getType() == EffectResult.Type.DISCARD_FROM_PLAY) {
|
||||
if (TriggerConditions.forEachDiscardedFromPlay(game, effectResult, Culture.MORIA, Filters.weapon, Zone.DISCARD, Filters.playable(game, -1))) {
|
||||
DiscardCardsFromPlayResult discardResult = (DiscardCardsFromPlayResult) effectResult;
|
||||
Collection<PhysicalCard> discardedCards = discardResult.getDiscardedCards();
|
||||
if (Filters.filter(discardedCards, game.getGameState(), game.getModifiersQuerying(), Zone.DISCARD, Culture.MORIA, Filters.weapon, Filters.playable(game, -1)).size() > 0) {
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendEffect(
|
||||
new ChooseAndPlayCardFromDiscardEffect(playerId,
|
||||
game,
|
||||
-1, Filters.and(
|
||||
Culture.MORIA,
|
||||
Filters.weapon,
|
||||
Filters.in(discardedCards))));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
final PhysicalCard discardedCard = discardResult.getDiscardedCard();
|
||||
ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.setText("Play " + GameUtils.getCardLink(discardedCard));
|
||||
action.appendEffect(
|
||||
new ChooseAndPlayCardFromDiscardEffect(playerId,
|
||||
game,
|
||||
-1, Filters.and(
|
||||
Culture.MORIA,
|
||||
Filters.weapon,
|
||||
discardedCard)));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public class Card3_111 extends AbstractAlly {
|
||||
|
||||
@Override
|
||||
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (effectResult.getType() == EffectResult.Type.DISCARD_FROM_HAND) {
|
||||
if (effectResult.getType() == EffectResult.Type.FOR_EACH_DISCARDED_FROM_HAND) {
|
||||
DiscardCardFromHandResult discardCardsResult = (DiscardCardFromHandResult) effectResult;
|
||||
if (discardCardsResult.isForced()) {
|
||||
OptionalTriggerAction action = new OptionalTriggerAction(self);
|
||||
|
||||
@@ -86,6 +86,8 @@ public class DiscardCardsFromPlayEffect extends AbstractPreventableCardEffect {
|
||||
|
||||
if (_source != null && discardedCards.size() > 0)
|
||||
game.getGameState().sendMessage(_source.getOwner() + " discards " + getAppendedNames(discardedCards) + " from play using " + GameUtils.getCardLink(_source));
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCards));
|
||||
|
||||
for (PhysicalCard discardedCard : discardedCards)
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,13 +108,17 @@ public class KillEffect extends AbstractSuccessfulEffect {
|
||||
game.getActionsEnvironment().emitEffectResult(new KilledResult(killedCards, _cause));
|
||||
for (PhysicalCard killedCard : killedCards)
|
||||
game.getActionsEnvironment().emitEffectResult(new ForEachKilledResult(killedCard, _cause));
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCards));
|
||||
for (PhysicalCard discardedCard : discardedCards)
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard));
|
||||
|
||||
} else if (killedCards.size() > 0) {
|
||||
game.getActionsEnvironment().emitEffectResult(new KilledResult(killedCards, _cause));
|
||||
for (PhysicalCard killedCard : killedCards)
|
||||
game.getActionsEnvironment().emitEffectResult(new ForEachKilledResult(killedCard, _cause));
|
||||
} else if (discardedCards.size() > 0) {
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCards));
|
||||
for (PhysicalCard discardedCard : discardedCards)
|
||||
game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,13 +4,15 @@ public abstract class EffectResult {
|
||||
public enum Type {
|
||||
// Translated to new format
|
||||
ANY_NUMBER_KILLED, FOR_EACH_KILLED,
|
||||
FOR_EACH_WOUNDED, FOR_EACH_EXERTED,
|
||||
FOR_EACH_WOUNDED, FOR_EACH_EXERTED, FOR_EACH_DISCARDED_FROM_PLAY,
|
||||
|
||||
// Old format
|
||||
DISCARD_FROM_PLAY, DISCARD_FROM_HAND,
|
||||
FOR_EACH_DISCARDED_FROM_HAND,
|
||||
|
||||
FREE_PEOPLE_PLAYER_STARTS_ASSIGNING,
|
||||
|
||||
// Old format
|
||||
|
||||
|
||||
ASSIGNMENT, OVERWHELM_IN_SKIRMISH, RESOLVE_SKIRMISH,
|
||||
|
||||
START_OF_PHASE,
|
||||
|
||||
@@ -9,7 +9,7 @@ public class DiscardCardFromHandResult extends EffectResult {
|
||||
private boolean _forced;
|
||||
|
||||
public DiscardCardFromHandResult(PhysicalCard source, PhysicalCard card, boolean forced) {
|
||||
super(Type.DISCARD_FROM_HAND);
|
||||
super(Type.FOR_EACH_DISCARDED_FROM_HAND);
|
||||
_source = source;
|
||||
_card = card;
|
||||
_forced = forced;
|
||||
|
||||
@@ -3,17 +3,15 @@ package com.gempukku.lotro.logic.timing.results;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class DiscardCardsFromPlayResult extends EffectResult {
|
||||
private Set<PhysicalCard> _cards;
|
||||
private PhysicalCard _card;
|
||||
|
||||
public DiscardCardsFromPlayResult(Set<PhysicalCard> cards) {
|
||||
super(EffectResult.Type.DISCARD_FROM_PLAY);
|
||||
_cards = cards;
|
||||
public DiscardCardsFromPlayResult(PhysicalCard card) {
|
||||
super(EffectResult.Type.FOR_EACH_DISCARDED_FROM_PLAY);
|
||||
_card = card;
|
||||
}
|
||||
|
||||
public Set<PhysicalCard> getDiscardedCards() {
|
||||
return _cards;
|
||||
public PhysicalCard getDiscardedCard() {
|
||||
return _card;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,7 @@ import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class DiscardedCardRule {
|
||||
@@ -24,16 +23,12 @@ public class DiscardedCardRule {
|
||||
new AbstractActionProxy() {
|
||||
@Override
|
||||
public List<? extends RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) {
|
||||
if (effectResult.getType() == EffectResult.Type.DISCARD_FROM_PLAY) {
|
||||
if (effectResult.getType() == EffectResult.Type.FOR_EACH_DISCARDED_FROM_PLAY) {
|
||||
DiscardCardsFromPlayResult discardResult = (DiscardCardsFromPlayResult) effectResult;
|
||||
Collection<PhysicalCard> discardedCards = discardResult.getDiscardedCards();
|
||||
List<RequiredTriggerAction> actions = new LinkedList<RequiredTriggerAction>();
|
||||
for (PhysicalCard discardedCard : discardedCards) {
|
||||
RequiredTriggerAction trigger = discardedCard.getBlueprint().getDiscardedFromPlayRequiredTrigger(game, discardedCard);
|
||||
if (trigger != null)
|
||||
actions.add(trigger);
|
||||
}
|
||||
return actions;
|
||||
final PhysicalCard discardedCard = discardResult.getDiscardedCard();
|
||||
RequiredTriggerAction trigger = discardedCard.getBlueprint().getDiscardedFromPlayRequiredTrigger(game, discardedCard);
|
||||
if (trigger != null)
|
||||
return Collections.singletonList(trigger);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user