From 1b9d93c774c1c2694a83dae04b27725b88ab0e1b Mon Sep 17 00:00:00 2001 From: marcins78 Date: Tue, 8 Jan 2013 12:21:30 +0000 Subject: [PATCH] Playing events from other zones should move the card to void. There are two void zones now - "VOID" and "VOID_FROM_HAND", that's because if a card is played from hand, it still counts for initiative purposes. --- .../lotro/cards/actions/AttachPermanentAction.java | 8 ++++---- .../com/gempukku/lotro/cards/actions/PlayEventAction.java | 6 +++++- .../gempukku/lotro/cards/actions/PlayPermanentAction.java | 5 +++-- .../lotro/cards/effects/PutPlayedEventIntoHandEffect.java | 3 ++- .../cards/effects/PutPlayedEventOnBottomOfDeckEffect.java | 3 ++- .../cards/effects/PutPlayedEventOnTopOfDeckEffect.java | 3 ++- .../cards/effects/RemovePlayedEventFromGameEffect.java | 3 ++- .../cards/effects/StackPlayedEventOnACardEffect.java | 3 ++- .../src/main/java/com/gempukku/lotro/common/Zone.java | 2 +- .../java/com/gempukku/lotro/game/state/GameState.java | 8 ++++++-- .../com/gempukku/lotro/logic/effects/PlayCardEffect.java | 3 +-- .../gempukku/lotro/logic/modifiers/ModifiersLogic.java | 2 +- 12 files changed, 31 insertions(+), 18 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java index 2245e4851..a3c1d6ad5 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java @@ -112,6 +112,8 @@ public class AttachPermanentAction extends AbstractCostToEffectAction implements final Zone playedFromZone = _cardToAttach.getZone(); game.getGameState().removeCardsFromZone(_cardToAttach.getOwner(), Collections.singleton(_cardToAttach)); if (playedFromZone == Zone.HAND) + game.getGameState().addCardToZone(game, _cardToAttach, Zone.VOID_FROM_HAND); + else game.getGameState().addCardToZone(game, _cardToAttach, Zone.VOID); if (playedFromZone == Zone.DECK) game.getGameState().shuffleDeck(_cardToAttach.getOwner()); @@ -167,16 +169,14 @@ public class AttachPermanentAction extends AbstractCostToEffectAction implements } else { if (!_cardDiscarded) { _cardDiscarded = true; - if (_cardToAttach.getZone() != null) - game.getGameState().removeCardsFromZone(_cardToAttach.getOwner(), Collections.singleton(_cardToAttach)); + game.getGameState().removeCardsFromZone(_cardToAttach.getOwner(), Collections.singleton(_cardToAttach)); game.getGameState().addCardToZone(game, _cardToAttach, Zone.DISCARD); } } } else { if (!_cardDiscarded) { _cardDiscarded = true; - if (_cardToAttach.getZone() != null) - game.getGameState().removeCardsFromZone(_cardToAttach.getOwner(), Collections.singleton(_cardToAttach)); + game.getGameState().removeCardsFromZone(_cardToAttach.getOwner(), Collections.singleton(_cardToAttach)); game.getGameState().addCardToZone(game, _cardToAttach, Zone.DISCARD); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java index 1251284ee..f57b0cd7e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java @@ -97,7 +97,11 @@ public class PlayEventAction extends AbstractCostToEffectAction implements Disco game.getGameState().sendMessage(_eventPlayed.getOwner() + " plays " + GameUtils.getCardLink(_eventPlayed) + " from " + playedFromZone.getHumanReadable()); game.getGameState().removeCardsFromZone(_eventPlayed.getOwner(), Collections.singleton(_eventPlayed)); - game.getGameState().addCardToZone(game, _eventPlayed, Zone.VOID); + if (playedFromZone == Zone.HAND) + game.getGameState().addCardToZone(game, _eventPlayed, Zone.VOID_FROM_HAND); + else + game.getGameState().addCardToZone(game, _eventPlayed, Zone.VOID); + if (playedFromZone == Zone.DECK) game.getGameState().shuffleDeck(_eventPlayed.getOwner()); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java index 9c45f1648..402ed5aae 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java @@ -88,6 +88,8 @@ public class PlayPermanentAction extends AbstractCostToEffectAction implements D game.getGameState().sendMessage(_permanentPlayed.getOwner() + " plays " + GameUtils.getCardLink(_permanentPlayed) + " from " + playedFromZone.getHumanReadable()); game.getGameState().removeCardsFromZone(_permanentPlayed.getOwner(), Collections.singleton(_permanentPlayed)); if (playedFromZone == Zone.HAND) + game.getGameState().addCardToZone(game, _permanentPlayed, Zone.VOID_FROM_HAND); + else game.getGameState().addCardToZone(game, _permanentPlayed, Zone.VOID); if (playedFromZone == Zone.DECK && !_skipShuffling) game.getGameState().shuffleDeck(_permanentPlayed.getOwner()); @@ -137,8 +139,7 @@ public class PlayPermanentAction extends AbstractCostToEffectAction implements D } else { if (!_cardDiscarded) { _cardDiscarded = true; - if (_permanentPlayed.getZone() != null) - game.getGameState().removeCardsFromZone(_permanentPlayed.getOwner(), Collections.singleton(_permanentPlayed)); + game.getGameState().removeCardsFromZone(_permanentPlayed.getOwner(), Collections.singleton(_permanentPlayed)); game.getGameState().addCardToZone(game, _permanentPlayed, Zone.DISCARD); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventIntoHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventIntoHandEffect.java index 16f05c0fa..e9be325ed 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventIntoHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventIntoHandEffect.java @@ -28,7 +28,8 @@ public class PutPlayedEventIntoHandEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { - return _action.getEventPlayed().getZone() == Zone.VOID; + Zone zone = _action.getEventPlayed().getZone(); + return zone == Zone.VOID || zone == Zone.VOID_FROM_HAND; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventOnBottomOfDeckEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventOnBottomOfDeckEffect.java index 185c768af..d8f2e1bf3 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventOnBottomOfDeckEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventOnBottomOfDeckEffect.java @@ -28,7 +28,8 @@ public class PutPlayedEventOnBottomOfDeckEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { - return _action.getEventPlayed().getZone() == Zone.VOID; + Zone zone = _action.getEventPlayed().getZone(); + return zone == Zone.VOID || zone == Zone.VOID_FROM_HAND; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventOnTopOfDeckEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventOnTopOfDeckEffect.java index 8996bc820..1cf578e04 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventOnTopOfDeckEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutPlayedEventOnTopOfDeckEffect.java @@ -28,7 +28,8 @@ public class PutPlayedEventOnTopOfDeckEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { - return _action.getEventPlayed().getZone() == Zone.VOID; + Zone zone = _action.getEventPlayed().getZone(); + return zone == Zone.VOID || zone == Zone.VOID_FROM_HAND; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RemovePlayedEventFromGameEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RemovePlayedEventFromGameEffect.java index 2cd2b0d40..af9739847 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RemovePlayedEventFromGameEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RemovePlayedEventFromGameEffect.java @@ -28,7 +28,8 @@ public class RemovePlayedEventFromGameEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { - return _action.getEventPlayed().getZone() == Zone.VOID; + Zone zone = _action.getEventPlayed().getZone(); + return zone == Zone.VOID || zone == Zone.VOID_FROM_HAND; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackPlayedEventOnACardEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackPlayedEventOnACardEffect.java index 7628f0e19..609054a26 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackPlayedEventOnACardEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackPlayedEventOnACardEffect.java @@ -30,7 +30,8 @@ public class StackPlayedEventOnACardEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { - return _stackOn.getZone().isInPlay() && _action.getEventPlayed().getZone() == Zone.VOID; + Zone zone = _action.getEventPlayed().getZone(); + return _stackOn.getZone().isInPlay() && (zone == Zone.VOID || zone == Zone.VOID_FROM_HAND); } @Override diff --git a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Zone.java b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Zone.java index 5ea853e2e..63b6e145b 100644 --- a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Zone.java +++ b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Zone.java @@ -13,7 +13,7 @@ public enum Zone implements Filterable { ADVENTURE_DECK("adventureDeck", false, true, false), // Nobody sees - VOID("void", false, false, false), DECK("deck", false, false, false), REMOVED("removed", false, false, false); + VOID("void", false, false, false), VOID_FROM_HAND("voidFromHand", false, false, false), DECK("deck", false, false, false), REMOVED("removed", false, false, false); private String _humanReadable; private boolean _public; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index f0dde6faf..90374f215 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -22,6 +22,7 @@ public class GameState { private Map> _stacked = new HashMap>(); private Map> _voids = new HashMap>(); + private Map> _voidsFromHand = new HashMap>(); private Map> _removed = new HashMap>(); private List _inPlay = new LinkedList(); @@ -74,6 +75,7 @@ public class GameState { _decks.put(playerId, new LinkedList()); _hands.put(playerId, new LinkedList()); _voids.put(playerId, new LinkedList()); + _voidsFromHand.put(playerId, new LinkedList()); _removed.put(playerId, new LinkedList()); _discards.put(playerId, new LinkedList()); _deadPiles.put(playerId, new LinkedList()); @@ -342,6 +344,8 @@ public class GameState { return _hands.get(playerId); else if (zone == Zone.VOID) return _voids.get(playerId); + else if (zone == Zone.VOID_FROM_HAND) + return _voidsFromHand.get(playerId); else if (zone == Zone.REMOVED) return _removed.get(playerId); else if (zone == Zone.STACKED) @@ -604,8 +608,8 @@ public class GameState { return Collections.unmodifiableList(_hands.get(playerId)); } - public List getVoid(String playerId) { - return Collections.unmodifiableList(_voids.get(playerId)); + public List getVoidFromHand(String playerId) { + return Collections.unmodifiableList(_voidsFromHand.get(playerId)); } public List getRemoved(String playerId) { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java index 59cf1cec8..fe6fc362e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java @@ -57,8 +57,7 @@ public class PlayCardEffect extends AbstractEffect { @Override protected FullEffectResult playEffectReturningResult(LotroGame game) { - if (_cardPlayed.getZone() != null) - game.getGameState().removeCardsFromZone(_cardPlayed.getOwner(), Collections.singleton(_cardPlayed)); + game.getGameState().removeCardsFromZone(_cardPlayed.getOwner(), Collections.singleton(_cardPlayed)); if (_attachedToCard != null) { game.getGameState().attachCard(game, _cardPlayed, _attachedToCard); } else { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index 4adbc87bd..83e8a2981 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -924,7 +924,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { } int freePeopleInitiativeHandSize = gameState.getHand(gameState.getCurrentPlayerId()).size() - + gameState.getVoid(gameState.getCurrentPlayerId()).size(); + + gameState.getVoidFromHand(gameState.getCurrentPlayerId()).size(); int initiativeHandSize = 4; for (Modifier modifier : getModifiers(gameState, ModifierEffect.INITIATIVE_MODIFIER))