"Plundered Armories"

This commit is contained in:
marcins78@gmail.com
2011-09-08 22:39:12 +00:00
parent e4943e92e6
commit 131cdd7c6e
7 changed files with 158 additions and 6 deletions

View File

@@ -0,0 +1,75 @@
package com.gempukku.lotro.cards.set1.moria;
import com.gempukku.lotro.cards.AbstractLotroCardBlueprint;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayPermanentAction;
import com.gempukku.lotro.cards.effects.ChooseAndPlayCardFromDiscardEffect;
import com.gempukku.lotro.common.*;
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.DefaultCostToEffectAction;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Shadow
* Culture: Moria
* Twilight Cost: 2
* Type: Condition
* Game Text: Plays to your support area. Response: If your [MORIA] weapon is discarded, play it from your discard pile
* (that weapon's twilight cost is -1).
*/
public class Card1_193 extends AbstractLotroCardBlueprint {
public Card1_193() {
super(Side.SHADOW, CardType.CONDITION, Culture.MORIA, "Plundered Armories");
}
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) {
return PlayConditions.canPayForShadowCard(game, self, twilightModifier);
}
@Override
public Action getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) {
return new PlayPermanentAction(self, Zone.SHADOW_SUPPORT);
}
@Override
public int getTwilightCost() {
return 2;
}
@Override
public List<? extends Action> getPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canPlayCardDuringPhase(game, Phase.SHADOW, self)
&& checkPlayRequirements(playerId, game, self, 0))
return Collections.singletonList(getPlayCardAction(playerId, game, self, 0));
return null;
}
@Override
public List<? extends Action> getOptionalAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (effectResult.getType() == EffectResult.Type.DISCARD_FROM_PLAY) {
DiscardCardsFromPlayResult discardResult = (DiscardCardsFromPlayResult) effectResult;
List<PhysicalCard> discardedCards = discardResult.getDiscardedCards();
if (Filters.filter(discardedCards, game.getGameState(), game.getModifiersQuerying(), Filters.zone(Zone.DISCARD), Filters.culture(Culture.MORIA), Filters.or(Filters.keyword(Keyword.HAND_WEAPON), Filters.keyword(Keyword.RANGED_WEAPON)), Filters.playable(game, -1)).size() > 0) {
DefaultCostToEffectAction action = new DefaultCostToEffectAction(self, null, "Play your discarded weapon from your discard pile (twilight cost -1).");
action.addEffect(
new ChooseAndPlayCardFromDiscardEffect(playerId,
Filters.and(
Filters.culture(Culture.MORIA),
Filters.or(Filters.keyword(Keyword.HAND_WEAPON), Filters.keyword(Keyword.RANGED_WEAPON)),
Filters.in(discardedCards)), -1));
return Collections.singletonList(action);
}
}
return null;
}
}

View File

@@ -0,0 +1,12 @@
package com.gempukku.lotro.logic.actions;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.logic.effects.DiscardCardFromPlayEffect;
public class DiscardMinionFromPlayAction extends DefaultCostToEffectAction {
public DiscardMinionFromPlayAction(PhysicalCard card) {
super(null, null, "Discard the minion");
addEffect(new DiscardCardFromPlayEffect(null, card));
}
}

View File

@@ -4,19 +4,34 @@ import com.gempukku.lotro.common.Zone;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
import com.gempukku.lotro.logic.timing.AbstractEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult;
import java.util.LinkedList;
import java.util.List;
public class DiscardCardFromPlayEffect extends UnrespondableEffect {
public class DiscardCardFromPlayEffect extends AbstractEffect {
private PhysicalCard _source;
private PhysicalCard _card;
private List<PhysicalCard> _discardedCards;
public DiscardCardFromPlayEffect(PhysicalCard source, PhysicalCard card) {
_source = source;
_card = card;
}
@Override
public EffectResult getRespondableResult() {
return new DiscardCardsFromPlayResult(_discardedCards);
}
@Override
public String getText() {
return "Discard " + _card.getBlueprint().getName() + " from play";
}
@Override
public boolean canPlayEffect(LotroGame game) {
Zone zone = _card.getZone();
@@ -25,7 +40,11 @@ public class DiscardCardFromPlayEffect extends UnrespondableEffect {
@Override
public void playEffect(LotroGame game) {
_discardedCards = new LinkedList<PhysicalCard>();
if (game.getModifiersQuerying().canBeDiscardedFromPlay(game.getGameState(), _card, _source)) {
_discardedCards.add(_card);
GameState gameState = game.getGameState();
gameState.stopAffecting(_card);
gameState.removeCardFromZone(_card);
@@ -33,6 +52,8 @@ public class DiscardCardFromPlayEffect extends UnrespondableEffect {
List<PhysicalCard> attachedCards = gameState.getAttachedCards(_card);
for (PhysicalCard attachedCard : attachedCards) {
_discardedCards.add(attachedCard);
gameState.stopAffecting(attachedCard);
gameState.removeCardFromZone(attachedCard);
gameState.addCardToZone(attachedCard, Zone.DISCARD);

View File

@@ -6,19 +6,33 @@ import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
import com.gempukku.lotro.logic.timing.AbstractEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult;
import java.util.LinkedList;
import java.util.List;
public class DiscardCardsFromPlayEffect extends UnrespondableEffect {
public class DiscardCardsFromPlayEffect extends AbstractEffect {
private PhysicalCard _source;
private Filter _filter;
private List<PhysicalCard> _discardedCards;
public DiscardCardsFromPlayEffect(PhysicalCard source, Filter filter) {
_source = source;
_filter = filter;
}
@Override
public EffectResult getRespondableResult() {
return new DiscardCardsFromPlayResult(_discardedCards);
}
@Override
public String getText() {
return "Discard multiple cards from play";
}
@Override
public boolean canPlayEffect(LotroGame game) {
return Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), _filter);
@@ -27,8 +41,11 @@ public class DiscardCardsFromPlayEffect extends UnrespondableEffect {
@Override
public void playEffect(LotroGame game) {
List<PhysicalCard> cardsToDiscard = Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), _filter);
_discardedCards = new LinkedList<PhysicalCard>();
for (PhysicalCard card : cardsToDiscard) {
if (game.getModifiersQuerying().canBeDiscardedFromPlay(game.getGameState(), card, _source)) {
_discardedCards.add(card);
GameState gameState = game.getGameState();
gameState.stopAffecting(card);
gameState.removeCardFromZone(card);
@@ -36,6 +53,8 @@ public class DiscardCardsFromPlayEffect extends UnrespondableEffect {
List<PhysicalCard> attachedCards = gameState.getAttachedCards(card);
for (PhysicalCard attachedCard : attachedCards) {
_discardedCards.add(attachedCard);
gameState.stopAffecting(attachedCard);
gameState.removeCardFromZone(attachedCard);
gameState.addCardToZone(attachedCard, Zone.DISCARD);

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.logic.timing;
public abstract class EffectResult {
public enum Type {
WOUND, KILL, HEAL, EXERT,
WOUND, KILL, HEAL, EXERT, DISCARD_FROM_PLAY,
OVERWHELM_IN_SKIRMISH, RESOLVE_SKIRMISH,

View File

@@ -0,0 +1,19 @@
package com.gempukku.lotro.logic.timing.results;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.List;
public class DiscardCardsFromPlayResult extends EffectResult {
private List<PhysicalCard> _cards;
public DiscardCardsFromPlayResult(List<PhysicalCard> cards) {
super(EffectResult.Type.DISCARD_FROM_PLAY);
_cards = cards;
}
public List<PhysicalCard> getDiscardedCards() {
return _cards;
}
}

View File

@@ -1,12 +1,14 @@
package com.gempukku.lotro.logic.timing.rules;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.AbstractActionProxy;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.game.state.actions.DefaultActionsEnvironment;
import com.gempukku.lotro.logic.actions.DiscardMinionFromPlayAction;
import com.gempukku.lotro.logic.actions.KillAction;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.EffectResult;
@@ -34,7 +36,11 @@ public class CharacterDeathRule {
Filters.or(Filters.type(CardType.ALLY), Filters.type(CardType.COMPANION), Filters.type(CardType.MINION)));
for (PhysicalCard character : characters)
if (gameState.getWounds(character) >= game.getModifiersQuerying().getVitality(gameState, character))
actions.add(new KillAction(character));
if (character.getBlueprint().getSide() == Side.FREE_PEOPLE) {
actions.add(new KillAction(character));
} else {
actions.add(new DiscardMinionFromPlayAction(character));
}
return actions;
}