diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java index 8580a049d..a96e417df 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java @@ -93,6 +93,11 @@ public abstract class AbstractLotroCardBlueprint implements LotroCardBlueprint { return null; } + @Override + public List getStackedOnModifiers(LotroGame game, PhysicalCard self) { + return null; + } + public Modifier getAlwaysOnModifier(PhysicalCard self) { return null; } 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 b8322999e..31f9bcb07 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 @@ -127,13 +127,13 @@ public class AttachPermanentAction extends AbstractCostToEffectAction { } else { if (!_cardDiscarded) { _cardDiscarded = true; - game.getGameState().addCardToZone(_cardToAttach, Zone.DISCARD); + game.getGameState().addCardToZone(game, _cardToAttach, Zone.DISCARD); } } } else { if (!_cardDiscarded) { _cardDiscarded = true; - game.getGameState().addCardToZone(_cardToAttach, Zone.DISCARD); + 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 2938d037b..d5a05f6ec 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 @@ -95,7 +95,9 @@ public class PlayEventAction extends AbstractCostToEffectAction { if (!_cardDiscarded) { _cardDiscarded = true; - game.getGameState().addCardToZone(_eventPlayed, _playCardEffect.getTargetZone()); + final Zone targetZone = _playCardEffect.getTargetZone(); + if (targetZone != null) + game.getGameState().addCardToZone(game, _eventPlayed, targetZone); } return null; 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 18d7bbc0e..af8120787 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 @@ -73,8 +73,7 @@ public class PlayPermanentAction extends AbstractCostToEffectAction { if (!_cardPutIntoPlay) { _cardPutIntoPlay = true; - game.getGameState().addCardToZone(_permanentPlayed, _zone); - game.getGameState().startAffecting(game, _permanentPlayed, game.getModifiersEnvironment()); + game.getGameState().addCardToZone(game, _permanentPlayed, _zone); } if (!_cardPlayed) { @@ -88,7 +87,7 @@ public class PlayPermanentAction extends AbstractCostToEffectAction { } else { if (!_cardDiscarded) { _cardDiscarded = true; - game.getGameState().addCardToZone(_permanentPlayed, Zone.DISCARD); + game.getGameState().addCardToZone(game, _permanentPlayed, Zone.DISCARD); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AttachCardEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AttachCardEffect.java index e3502cb03..04b8bdf4e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AttachCardEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AttachCardEffect.java @@ -35,8 +35,7 @@ public class AttachCardEffect extends AbstractEffect { protected FullEffectResult playEffectReturningResult(LotroGame game) { if (isPlayableInFull(game)) { GameState gameState = game.getGameState(); - gameState.attachCard(_physicalCard, _targetCard); - gameState.startAffecting(game, _physicalCard, game.getModifiersEnvironment()); + gameState.attachCard(game, _physicalCard, _targetCard); return new FullEffectResult(null, true, true); } return new FullEffectResult(null, false, false); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardBottomCardFromDeckEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardBottomCardFromDeckEffect.java index d6dff1e81..9e4e29e75 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardBottomCardFromDeckEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardBottomCardFromDeckEffect.java @@ -37,7 +37,7 @@ public class DiscardBottomCardFromDeckEffect extends AbstractEffect { GameState gameState = game.getGameState(); PhysicalCard card = gameState.removeBottomDeckCard(_playerId); gameState.sendMessage(_playerId + " discards bottom card from his or her deck - " + GameUtils.getCardLink(card)); - gameState.addCardToZone(card, Zone.DISCARD); + gameState.addCardToZone(game, card, Zone.DISCARD); discardedCardCallback(card); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardCardAtRandomFromHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardCardAtRandomFromHandEffect.java index 0aad5b88e..33aed7d32 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardCardAtRandomFromHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardCardAtRandomFromHandEffect.java @@ -48,7 +48,7 @@ public class DiscardCardAtRandomFromHandEffect extends AbstractEffect { PhysicalCard randomCard = hand.get(new Random().nextInt(hand.size())); gameState.sendMessage(_playerId + " randomly discards " + GameUtils.getCardLink(randomCard)); gameState.removeCardsFromZone(Collections.singleton(randomCard)); - gameState.addCardToZone(randomCard, Zone.DISCARD); + gameState.addCardToZone(game, randomCard, Zone.DISCARD); return new FullEffectResult(new EffectResult[]{new DiscardCardsFromHandResult(_source, Collections.singleton(randomCard), _forced)}, true, true); } return new FullEffectResult(null, false, false); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardCardFromDeckEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardCardFromDeckEffect.java index 14847e3b5..050321db8 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardCardFromDeckEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardCardFromDeckEffect.java @@ -38,7 +38,7 @@ public class DiscardCardFromDeckEffect extends AbstractEffect { GameState gameState = game.getGameState(); gameState.sendMessage(GameUtils.getCardLink(_card) + " gets discarded from deck"); gameState.removeCardsFromZone(Collections.singleton(_card)); - gameState.addCardToZone(_card, Zone.DISCARD); + gameState.addCardToZone(game, _card, Zone.DISCARD); return new FullEffectResult(null, true, true); } return new FullEffectResult(null, false, false); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardStackedCardsEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardStackedCardsEffect.java index 6cfb02bd4..4dbd2d17c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardStackedCardsEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardStackedCardsEffect.java @@ -54,7 +54,7 @@ public class DiscardStackedCardsEffect extends AbstractEffect { gameState.sendMessage(getAppendedNames(toDiscard) + " " + GameUtils.be(toDiscard) + " discarded from being stacked"); gameState.removeCardsFromZone(toDiscard); for (PhysicalCard card : toDiscard) - gameState.addCardToZone(card, Zone.DISCARD); + gameState.addCardToZone(game, card, Zone.DISCARD); return new FullEffectResult(null, toDiscard.size() == _cards.size(), toDiscard.size() == _cards.size()); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardTopCardFromDeckEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardTopCardFromDeckEffect.java index 2c110c157..9acf1a7ec 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardTopCardFromDeckEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscardTopCardFromDeckEffect.java @@ -41,7 +41,7 @@ public class DiscardTopCardFromDeckEffect extends AbstractEffect { GameState gameState = game.getGameState(); PhysicalCard card = gameState.removeTopDeckCard(_playerId); gameState.sendMessage(_playerId + " discards top card from his or her deck - " + GameUtils.getCardLink(card)); - gameState.addCardToZone(card, Zone.DISCARD); + gameState.addCardToZone(game, card, Zone.DISCARD); return new FullEffectResult(null, true, true); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/LiberateASiteEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/LiberateASiteEffect.java index 47e9076ff..ac21142ba 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/LiberateASiteEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/LiberateASiteEffect.java @@ -54,7 +54,7 @@ public class LiberateASiteEffect extends AbstractEffect { List stackedCards = game.getGameState().getStackedCards(siteToLiberate); game.getGameState().removeCardsFromZone(stackedCards); for (PhysicalCard stackedCard : stackedCards) - game.getGameState().addCardToZone(stackedCard, Zone.DISCARD); + game.getGameState().addCardToZone(game, stackedCard, Zone.DISCARD); game.getGameState().loseControlOfCard(siteToLiberate, Zone.ADVENTURE_PATH); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PlaySiteEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PlaySiteEffect.java index 021f9714d..15e537967 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PlaySiteEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PlaySiteEffect.java @@ -71,21 +71,17 @@ public class PlaySiteEffect extends AbstractEffect { zone = card.getZone(); stacked = new LinkedList(gameState.getStackedCards(card)); - if (gameState.getCurrentSiteNumber() == _siteNumber) - gameState.stopAffecting(card); gameState.removeCardsFromZone(Collections.singleton(card)); - gameState.addCardToZone(card, Zone.DECK); + gameState.addCardToZone(game, card, Zone.DECK); } gameState.sendMessage(newSite.getOwner() + " plays " + GameUtils.getCardLink(newSite)); - gameState.addCardToZone(newSite, Zone.ADVENTURE_PATH); - if (gameState.getCurrentSiteNumber() == _siteNumber) - gameState.startAffecting(game, newSite, game.getModifiersEnvironment()); + gameState.addCardToZone(game, newSite, Zone.ADVENTURE_PATH); if (controlled != null) { gameState.takeControlOfCard(controlled, newSite, zone); for (PhysicalCard physicalCard : stacked) - gameState.stackCard(physicalCard, newSite); + gameState.stackCard(game, physicalCard, newSite); } sitePlayedCallback(newSite); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandOrDiscardEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandOrDiscardEffect.java index 5a4ae7952..83db4d0b9 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandOrDiscardEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandOrDiscardEffect.java @@ -42,12 +42,12 @@ public class PutCardFromDeckIntoHandOrDiscardEffect extends AbstractEffect { if (game.getModifiersQuerying().canDrawCardAndIncrement(game.getGameState(), _physicalCard.getOwner())) { game.getGameState().sendMessage(_physicalCard.getOwner() + " puts card from deck into his or her hand"); game.getGameState().removeCardsFromZone(Collections.singleton(_physicalCard)); - game.getGameState().addCardToZone(_physicalCard, Zone.HAND); + game.getGameState().addCardToZone(game, _physicalCard, Zone.HAND); return new FullEffectResult(new EffectResult[]{new DrawCardOrPutIntoHandResult(_physicalCard.getOwner(), 1)}, true, true); } else { game.getGameState().sendMessage(_physicalCard.getOwner() + " discards " + GameUtils.getCardLink(_physicalCard) + " from deck due to Rule of 4"); game.getGameState().removeCardsFromZone(Collections.singleton(_physicalCard)); - game.getGameState().addCardToZone(_physicalCard, Zone.DISCARD); + game.getGameState().addCardToZone(game, _physicalCard, Zone.DISCARD); } } return new FullEffectResult(null, false, false); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDiscardIntoHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDiscardIntoHandEffect.java index 31b08124c..bea4ef4e4 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDiscardIntoHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDiscardIntoHandEffect.java @@ -40,7 +40,7 @@ public class PutCardFromDiscardIntoHandEffect extends AbstractEffect { GameState gameState = game.getGameState(); gameState.sendMessage(_card.getOwner() + " puts " + GameUtils.getCardLink(_card) + " from discard into his or her hand"); gameState.removeCardsFromZone(Collections.singleton(_card)); - gameState.addCardToZone(_card, Zone.HAND); + gameState.addCardToZone(game, _card, Zone.HAND); return new FullEffectResult(new EffectResult[]{new DrawCardOrPutIntoHandResult(_card.getOwner(), 1)}, true, true); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromStackedIntoHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromStackedIntoHandEffect.java index 216d27f1e..3c921400c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromStackedIntoHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromStackedIntoHandEffect.java @@ -40,7 +40,7 @@ public class PutCardFromStackedIntoHandEffect extends AbstractEffect { GameState gameState = game.getGameState(); gameState.sendMessage(_card.getOwner() + " puts " + GameUtils.getCardLink(_card) + " from stacked on another card into his or her hand"); gameState.removeCardsFromZone(Collections.singleton(_card)); - gameState.addCardToZone(_card, Zone.HAND); + gameState.addCardToZone(game, _card, Zone.HAND); return new FullEffectResult(new EffectResult[]{new DrawCardOrPutIntoHandResult(_card.getOwner(), 1)}, true, true); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java index 49ae910af..c7916a672 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java @@ -66,20 +66,17 @@ public class ReturnCardsToHandEffect extends AbstractEffect { // Now do the actual things GameState gameState = game.getGameState(); - // Stop affecting - for (PhysicalCard card : stoppedAffecting) - gameState.stopAffecting(card); // Remove from their zone gameState.removeCardsFromZone(removedFromZone); // Add cards to hand for (PhysicalCard card : cardsToReturnToHand) - gameState.addCardToZone(card, Zone.HAND); + gameState.addCardToZone(game, card, Zone.HAND); // Add discarded to discard for (PhysicalCard card : discardedFromPlay) - gameState.addCardToZone(card, Zone.DISCARD); + gameState.addCardToZone(game, card, Zone.DISCARD); if (discardedFromPlay.size() > 0) return new FullEffectResult(new EffectResult[]{new DiscardCardsFromPlayResult(discardedFromPlay)}, true, true); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect.java index 51643206c..c5c523a78 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect.java @@ -55,9 +55,6 @@ public class ShuffleCardsFromPlayAndStackedOnItIntoDeckEffect extends AbstractEf } } - for (PhysicalCard physicalCard : inPlay) - game.getGameState().stopAffecting(physicalCard); - if (toShuffleIn.size() > 0) { game.getGameState().removeCardsFromZone(toShuffleIn); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromDiscardEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromDiscardEffect.java index 2acebfb2e..64c012869 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromDiscardEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromDiscardEffect.java @@ -38,7 +38,7 @@ public class StackCardFromDiscardEffect extends AbstractEffect { if (isPlayableInFull(game)) { game.getGameState().sendMessage(_card.getOwner() + " stacks " + GameUtils.getCardLink(_card) + " from discard on " + GameUtils.getCardLink(_stackOn)); game.getGameState().removeCardsFromZone(Collections.singleton(_card)); - game.getGameState().stackCard(_card, _stackOn); + game.getGameState().stackCard(game, _card, _stackOn); return new FullEffectResult(null, true, true); } return new FullEffectResult(null, false, false); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromHandEffect.java index e3640dd5c..9d1b781ef 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromHandEffect.java @@ -23,7 +23,7 @@ public class StackCardFromHandEffect extends AbstractEffect { if (isPlayableInFull(game)) { game.getGameState().sendMessage(_card.getOwner() + " stacks " + GameUtils.getCardLink(_card) + " from hand on " + GameUtils.getCardLink(_stackOn)); game.getGameState().removeCardsFromZone(Collections.singleton(_card)); - game.getGameState().stackCard(_card, _stackOn); + game.getGameState().stackCard(game, _card, _stackOn); return new FullEffectResult(null, true, true); } return new FullEffectResult(null, false, false); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromPlayEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromPlayEffect.java index f68a7f5eb..00c8ebd11 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromPlayEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromPlayEffect.java @@ -45,12 +45,6 @@ public class StackCardFromPlayEffect extends AbstractEffect { List attachedCards = gameState.getAttachedCards(_card); List stackedCards = gameState.getStackedCards(_card); - // First stop affecting (card and all attached to it) - game.getGameState().stopAffecting(_card); - - for (PhysicalCard attachedCard : attachedCards) - gameState.stopAffecting(attachedCard); - // Then remove from zones (card, attached and stacked on it) Set discardedCards = new HashSet(); Set cardsToRemove = new HashSet(); @@ -63,13 +57,13 @@ public class StackCardFromPlayEffect extends AbstractEffect { // And put them in new zones (attached and stacked to discard, the card gets stacked on) for (PhysicalCard attachedCard : attachedCards) - gameState.addCardToZone(attachedCard, Zone.DISCARD); + gameState.addCardToZone(game, attachedCard, Zone.DISCARD); for (PhysicalCard stackedCard : stackedCards) - gameState.addCardToZone(stackedCard, Zone.DISCARD); + gameState.addCardToZone(game, stackedCard, Zone.DISCARD); game.getGameState().sendMessage(GameUtils.getCardLink(_card) + " is stacked on " + GameUtils.getCardLink(_stackOn)); - game.getGameState().stackCard(_card, _stackOn); + game.getGameState().stackCard(game, _card, _stackOn); // Send the result (attached cards get discarded) if (discardedCards.size() > 0) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackTopCardsFromDeckEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackTopCardsFromDeckEffect.java index 5cd1adeab..6428efd15 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackTopCardsFromDeckEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackTopCardsFromDeckEffect.java @@ -41,7 +41,7 @@ public class StackTopCardsFromDeckEffect extends AbstractEffect { for (int i = 0; i < _count; i++) { final PhysicalCard card = game.getGameState().removeTopDeckCard(_playerId); if (card != null) { - game.getGameState().stackCard(card, _target); + game.getGameState().stackCard(game, card, _target); stacked++; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferToSupportEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferToSupportEffect.java index 3537d7d9f..9c608abc3 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferToSupportEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferToSupportEffect.java @@ -34,7 +34,7 @@ public class TransferToSupportEffect extends AbstractEffect { protected FullEffectResult playEffectReturningResult(LotroGame game) { if (isPlayableInFull(game)) { game.getGameState().removeCardsFromZone(Collections.singleton(_card)); - game.getGameState().addCardToZone(_card, Zone.SUPPORT); + game.getGameState().addCardToZone(game, _card, Zone.SUPPORT); return new FullEffectResult(null, true, true); } return new FullEffectResult(null, false, false); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimpleLotroCardBlueprint.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimpleLotroCardBlueprint.java index ecd88bb53..35ecb198a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimpleLotroCardBlueprint.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimpleLotroCardBlueprint.java @@ -26,6 +26,11 @@ public class SimpleLotroCardBlueprint implements LotroCardBlueprint { return null; } + @Override + public List getStackedOnModifiers(LotroGame game, PhysicalCard self) { + return null; + } + @Override public CardType getCardType() { return null; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_022.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_022.java index 8cae623f9..94c49aab7 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_022.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_022.java @@ -67,7 +67,7 @@ public class Card1_022 extends AbstractOldEvent { final GameState gameState = game.getGameState(); PhysicalCard card = gameState.removeTopDeckCard(_player); if (card != null) { - gameState.addCardToZone(card, Zone.DISCARD); + gameState.addCardToZone(game, card, Zone.DISCARD); gameState.addTwilight(1); _lastCard = card; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java index 79e44345a..2d8d404bd 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java @@ -46,6 +46,8 @@ public interface LotroCardBlueprint { public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self); + public List getStackedOnModifiers(LotroGame game, PhysicalCard self); + public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier); public Action getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/PhysicalCardImpl.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/PhysicalCardImpl.java index b353f4cb0..e1490c7c7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/PhysicalCardImpl.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/PhysicalCardImpl.java @@ -4,7 +4,6 @@ import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.ModifierHook; -import com.gempukku.lotro.logic.modifiers.ModifiersEnvironment; import java.util.LinkedList; import java.util.List; @@ -21,6 +20,7 @@ public class PhysicalCardImpl implements PhysicalCard { private PhysicalCardImpl _stackedOn; private List _modifierHooks; + private List _modifierHooksStacked; private Object _data; @@ -60,12 +60,12 @@ public class PhysicalCardImpl implements PhysicalCard { return _cardController; } - public void startAffectingGame(LotroGame game, ModifiersEnvironment modifiersEnvironment) { + public void startAffectingGame(LotroGame game) { List modifiers = _blueprint.getAlwaysOnModifiers(game, this); if (modifiers != null) { _modifierHooks = new LinkedList(); for (Modifier modifier : modifiers) - _modifierHooks.add(modifiersEnvironment.addAlwaysOnModifier(modifier)); + _modifierHooks.add(game.getModifiersEnvironment().addAlwaysOnModifier(modifier)); } } @@ -77,6 +77,23 @@ public class PhysicalCardImpl implements PhysicalCard { } } + public void startAffectingGameStacked(LotroGame game) { + List modifiers = _blueprint.getStackedOnModifiers(game, this); + if (modifiers != null) { + _modifierHooksStacked = new LinkedList(); + for (Modifier modifier : modifiers) + _modifierHooksStacked.add(game.getModifiersEnvironment().addAlwaysOnModifier(modifier)); + } + } + + public void stopAffectingGameStacked() { + if (_modifierHooksStacked != null) { + for (ModifierHook modifierHook : _modifierHooksStacked) + modifierHook.stop(); + _modifierHooksStacked = null; + } + } + @Override public int getCardId() { return _cardId; 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 f18e7e9f4..3d0cfd3c5 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 @@ -4,7 +4,6 @@ import com.gempukku.lotro.common.*; import com.gempukku.lotro.communication.GameStateListener; import com.gempukku.lotro.game.*; import com.gempukku.lotro.logic.PlayerOrder; -import com.gempukku.lotro.logic.modifiers.ModifiersEnvironment; import com.gempukku.lotro.logic.timing.GameStats; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -300,9 +299,9 @@ public class GameState { listener.cardMoved(card); } - public void attachCard(PhysicalCard card, PhysicalCard attachTo) { + public void attachCard(LotroGame game, PhysicalCard card, PhysicalCard attachTo) { ((PhysicalCardImpl) card).attachTo((PhysicalCardImpl) attachTo); - addCardToZone(card, Zone.ATTACHED); + addCardToZone(game, card, Zone.ATTACHED); } public void cardAffectsCard(String playerPerforming, PhysicalCard card, Collection affectedCards) { @@ -315,9 +314,9 @@ public class GameState { listener.eventPlayed(card); } - public void stackCard(PhysicalCard card, PhysicalCard stackOn) { + public void stackCard(LotroGame game, PhysicalCard card, PhysicalCard stackOn) { ((PhysicalCardImpl) card).stackOn((PhysicalCardImpl) stackOn); - addCardToZone(card, Zone.STACKED); + addCardToZone(game, card, Zone.STACKED); } public void setRingBearer(PhysicalCard card) { @@ -363,6 +362,11 @@ public class GameState { for (PhysicalCard card : cards) { Zone zone = card.getZone(); + if (zone.isInPlay()) + stopAffecting(card); + else if (zone == Zone.STACKED) + stopAffectingStacked(card); + List zoneCards = getZoneCards(card.getOwner(), card.getBlueprint().getCardType(), zone); boolean b = zoneCards.remove(card); if (!b) @@ -409,9 +413,16 @@ public class GameState { return result; } - public void addCardToZone(PhysicalCard card, Zone zone) { + public void addCardToZone(LotroGame game, PhysicalCard card, Zone zone) { + addCardToZone(game, card, zone, true); + } + + private void addCardToZone(LotroGame game, PhysicalCard card, Zone zone, boolean end) { List zoneCards = getZoneCards(card.getOwner(), card.getBlueprint().getCardType(), zone); - zoneCards.add((PhysicalCardImpl) card); + if (end) + zoneCards.add((PhysicalCardImpl) card); + else + zoneCards.add(0, (PhysicalCardImpl) card); ((PhysicalCardImpl) card).setZone(zone); @@ -426,6 +437,12 @@ public class GameState { for (GameStateListener listener : getPrivateGameStateListeners(card)) listener.cardCreated(card); } + + if (zone.isInPlay()) { + if (zone != Zone.ADVENTURE_PATH || _currentPhase != Phase.GAME_SETUP) + startAffecting(game, card); + } else if (zone == Zone.STACKED) + startAffectingStacked(game, card); } private void removeAllTokens(PhysicalCard card) { @@ -453,11 +470,11 @@ public class GameState { } public void putCardOnBottomOfDeck(PhysicalCard card) { - addCardToZone(card, Zone.DECK); + addCardToZone(null, card, Zone.DECK, true); } public void putCardOnTopOfDeck(PhysicalCard card) { - _decks.get(card.getOwner()).add(0, (PhysicalCardImpl) card); + addCardToZone(null, card, Zone.DECK, false); } public boolean iterateActiveCards(PhysicalCardVisitor physicalCardVisitor) { @@ -561,6 +578,15 @@ public class GameState { listener.setPlayerPosition(playerId, i); } + public void movePlayerToNextSite(LotroGame game) { + final String currentPlayerId = getCurrentPlayerId(); + final int oldPlayerPosition = getPlayerPosition(currentPlayerId); + stopAffecting(getCurrentSite()); + setPlayerPosition(currentPlayerId, oldPlayerPosition + 1); + increaseMoveCount(); + startAffecting(game, getCurrentSite()); + } + public int getPlayerPosition(String playerId) { return _playerPosition.get(playerId); } @@ -694,12 +720,21 @@ public class GameState { card.getAttachedTo() != null && isCardInPlayActive(card.getAttachedTo())); } - public void startAffectingCardsForCurrentPlayer(LotroGame game, ModifiersEnvironment modifiersEnvironment) { + public void startAffectingCardsForCurrentPlayer(LotroGame game) { + // Active non-sites are affecting for (PhysicalCardImpl physicalCard : _inPlay) { if (isCardInPlayActive(physicalCard) && physicalCard.getBlueprint().getSide() != Side.SITE) - startAffecting(game, physicalCard, modifiersEnvironment); + startAffecting(game, physicalCard); } - startAffecting(game, getCurrentSite(), modifiersEnvironment); + + // Current site is affecting + startAffecting(game, getCurrentSite()); + + // Stacked cards on active cards are stack-affecting + for (List stackedCards : _stacked.values()) + for (PhysicalCardImpl stackedCard : stackedCards) + if (isCardInPlayActive(stackedCard.getStackedOn())) + startAffectingStacked(game, stackedCard); } public void stopAffectingCardsForCurrentPlayer() { @@ -707,18 +742,32 @@ public class GameState { if (isCardInPlayActive(physicalCard) && physicalCard.getBlueprint().getSide() != Side.SITE) stopAffecting(physicalCard); } + stopAffecting(getCurrentSite()); + + for (List stackedCards : _stacked.values()) + for (PhysicalCardImpl stackedCard : stackedCards) + if (isCardInPlayActive(stackedCard.getStackedOn())) + stopAffectingStacked(stackedCard); } - public void startAffecting(LotroGame game, PhysicalCard card, ModifiersEnvironment modifiersEnvironment) { - ((PhysicalCardImpl) card).startAffectingGame(game, modifiersEnvironment); + private void startAffecting(LotroGame game, PhysicalCard card) { + ((PhysicalCardImpl) card).startAffectingGame(game); } - public void stopAffecting(PhysicalCard card) { + private void startAffectingStacked(LotroGame game, PhysicalCard card) { + ((PhysicalCardImpl) card).startAffectingGameStacked(game); + } + + private void stopAffecting(PhysicalCard card) { card.removeData(); ((PhysicalCardImpl) card).stopAffectingGame(); } + private void stopAffectingStacked(PhysicalCard card) { + ((PhysicalCardImpl) card).stopAffectingGameStacked(); + } + public void setCurrentPhase(Phase phase) { _currentPhase = phase; for (GameStateListener listener : getAllGameStateListeners()) @@ -811,7 +860,9 @@ public class GameState { public PhysicalCard removeTopDeckCard(String player) { List deck = _decks.get(player); if (deck.size() > 0) { - return deck.remove(0); + final PhysicalCard topDeckCard = deck.remove(0); + removeCardsFromZone(Collections.singleton(topDeckCard)); + return topDeckCard; } else { return null; } @@ -820,7 +871,9 @@ public class GameState { public PhysicalCard removeBottomDeckCard(String player) { List deck = _decks.get(player); if (deck.size() > 0) { - return deck.remove(deck.size() - 1); + final PhysicalCard topDeckCard = deck.remove(deck.size() - 1); + removeCardsFromZone(Collections.singleton(topDeckCard)); + return topDeckCard; } else { return null; } @@ -831,7 +884,7 @@ public class GameState { if (deck.size() > 0) { PhysicalCard card = deck.get(0); removeCardsFromZone(Collections.singleton(card)); - addCardToZone(card, Zone.HAND); + addCardToZone(null, card, Zone.HAND); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromHandEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromHandEffect.java index 20bb24151..2298e6eb3 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromHandEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromHandEffect.java @@ -61,7 +61,7 @@ public class DiscardCardsFromHandEffect extends AbstractEffect { gameState.sendMessage(getAppendedNames(discardedCards) + " " + GameUtils.be(discardedCards) + " discarded from hand"); gameState.removeCardsFromZone(discardedCards); for (PhysicalCard card : discardedCards) - gameState.addCardToZone(card, Zone.DISCARD); + gameState.addCardToZone(game, card, Zone.DISCARD); return new FullEffectResult(new EffectResult[]{new DiscardCardsFromHandResult(_source, discardedCards, _forced)}, discardedCards.size() == _cards.size(), discardedCards.size() == _cards.size()); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java index 3ac455ba6..260bc4f96 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java @@ -59,23 +59,21 @@ public class DiscardCardsFromPlayEffect extends AbstractPreventableCardEffect { discardedCards.add(card); GameState gameState = game.getGameState(); - gameState.stopAffecting(card); gameState.removeCardsFromZone(Collections.singleton(card)); - gameState.addCardToZone(card, Zone.DISCARD); + gameState.addCardToZone(game, card, Zone.DISCARD); List attachedCards = gameState.getAttachedCards(card); for (PhysicalCard attachedCard : attachedCards) { discardedCards.add(attachedCard); - gameState.stopAffecting(attachedCard); gameState.removeCardsFromZone(Collections.singleton(attachedCard)); - gameState.addCardToZone(attachedCard, Zone.DISCARD); + gameState.addCardToZone(game, attachedCard, Zone.DISCARD); } List stackedCards = gameState.getStackedCards(card); for (PhysicalCard stackedCard : stackedCards) { gameState.removeCardsFromZone(Collections.singleton(stackedCard)); - gameState.addCardToZone(stackedCard, Zone.DISCARD); + gameState.addCardToZone(game, stackedCard, Zone.DISCARD); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java index 5b3dc4ae2..355344ab4 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java @@ -47,30 +47,28 @@ public class KillEffect extends AbstractSuccessfulEffect { for (PhysicalCard card : _cards) { gameState.sendMessage(GameUtils.getCardLink(card) + " gets killed"); - gameState.stopAffecting(card); gameState.removeCardsFromZone(Collections.singleton(card)); if (card.getBlueprint().getSide() == Side.FREE_PEOPLE) { killedCards.add(card); - gameState.addCardToZone(card, Zone.DEAD); + gameState.addCardToZone(game, card, Zone.DEAD); } else { killedCards.add(card); discardedCards.add(card); - gameState.addCardToZone(card, Zone.DISCARD); + gameState.addCardToZone(game, card, Zone.DISCARD); } List attachedCards = gameState.getAttachedCards(card); for (PhysicalCard attachedCard : attachedCards) { discardedCards.add(attachedCard); - gameState.stopAffecting(attachedCard); gameState.removeCardsFromZone(Collections.singleton(attachedCard)); - gameState.addCardToZone(attachedCard, Zone.DISCARD); + gameState.addCardToZone(game, attachedCard, Zone.DISCARD); } List stackedCards = gameState.getStackedCards(card); for (PhysicalCard stackedCard : stackedCards) { gameState.removeCardsFromZone(Collections.singleton(stackedCard)); - gameState.addCardToZone(stackedCard, Zone.DISCARD); + gameState.addCardToZone(game, stackedCard, Zone.DISCARD); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/FirstPlayerPlaysSiteGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/FirstPlayerPlaysSiteGameProcess.java index d0b2a804e..c0ad7ffd1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/FirstPlayerPlaysSiteGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/FirstPlayerPlaysSiteGameProcess.java @@ -26,7 +26,7 @@ public class FirstPlayerPlaysSiteGameProcess implements GameProcess { GameState gameState = _game.getGameState(); PhysicalCard firstSite = Filters.filter(gameState.getAdventureDeck(_firstPlayer), gameState, _game.getModifiersQuerying(), Filters.siteNumber(1)).iterator().next(); gameState.removeCardsFromZone(Collections.singleton(firstSite)); - gameState.addCardToZone(firstSite, Zone.ADVENTURE_PATH); + gameState.addCardToZone(_game, firstSite, Zone.ADVENTURE_PATH); for (String playerId : gameState.getPlayerOrder().getAllPlayers()) gameState.setPlayerPosition(playerId, 1); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/MulliganProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/MulliganProcess.java index 7e070ac9f..1204baffd 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/MulliganProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/MulliganProcess.java @@ -36,7 +36,7 @@ public class MulliganProcess implements GameProcess { Set hand = new HashSet(gameState.getHand(nextPlayer)); gameState.removeCardsFromZone(hand); for (PhysicalCard card : hand) - gameState.addCardToZone(card, Zone.DECK); + gameState.addCardToZone(_game, card, Zone.DECK); gameState.shuffleDeck(nextPlayer); for (int i = 0; i < 6; i++) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java index 552502cb4..c0d5c1d65 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java @@ -29,12 +29,12 @@ public class PlayRingBearerRingAndAddBurdersGameProcess implements GameProcess { for (String playerId : gameState.getPlayerOrder().getAllPlayers()) { PhysicalCard ringBearer = Filters.filter(gameState.getDeck(playerId), gameState, _game.getModifiersQuerying(), Filters.keyword(Keyword.RING_BEARER)).iterator().next(); gameState.removeCardsFromZone(Collections.singleton(ringBearer)); - gameState.addCardToZone(ringBearer, Zone.FREE_CHARACTERS); + gameState.addCardToZone(_game, ringBearer, Zone.FREE_CHARACTERS); gameState.setRingBearer(ringBearer); PhysicalCard ring = Filters.filter(gameState.getDeck(playerId), gameState, _game.getModifiersQuerying(), Filters.type(CardType.THE_ONE_RING)).iterator().next(); gameState.removeCardsFromZone(Collections.singleton(ring)); - gameState.attachCard(ring, ringBearer); + gameState.attachCard(_game, ring, ringBearer); gameState.startPlayerTurn(playerId); gameState.addBurdens(_bids.get(playerId)); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayStartingFellowshipGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayStartingFellowshipGameProcess.java index 936d1396c..02fbeacd7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayStartingFellowshipGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayStartingFellowshipGameProcess.java @@ -1,12 +1,9 @@ package com.gempukku.lotro.logic.timing.processes.pregame; -import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.PlayOrder; import com.gempukku.lotro.logic.timing.processes.GameProcess; -import java.util.List; - public class PlayStartingFellowshipGameProcess implements GameProcess { private LotroGame _game; private PlayOrder _playOrder; @@ -29,13 +26,6 @@ public class PlayStartingFellowshipGameProcess implements GameProcess { if (nextPlayer != null) { _game.getGameState().startPlayerTurn(nextPlayer); - PhysicalCard ringBearer = _game.getGameState().getRingBearer(nextPlayer); - _game.getGameState().startAffecting(_game, ringBearer, _game.getModifiersEnvironment()); - - List attachedToRingBearer = _game.getGameState().getAttachedCards(ringBearer); - for (PhysicalCard physicalCard : attachedToRingBearer) - _game.getGameState().startAffecting(_game, physicalCard, _game.getModifiersEnvironment()); - _nextProcess = new PlayerPlaysStartingFellowshipGameProcess(_game, nextPlayer, new PlayStartingFellowshipGameProcess(_game, _playOrder, _firstPlayer)); } else { _nextProcess = new PlayersDrawEightCardsGameProcess(_game, _firstPlayer); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/StartOfTurnGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/StartOfTurnGameProcess.java index c917de775..402d2cb91 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/StartOfTurnGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/StartOfTurnGameProcess.java @@ -21,7 +21,7 @@ public class StartOfTurnGameProcess implements GameProcess { String nextPlayer = playOrder.getNextPlayer(); _game.getGameState().startPlayerTurn(nextPlayer); - _game.getGameState().startAffectingCardsForCurrentPlayer(_game, _game.getModifiersEnvironment()); + _game.getGameState().startAffectingCardsForCurrentPlayer(_game); _game.getActionsEnvironment().addActionToStack(new SimpleEffectAction(new TriggeringEffect(new StartOfTurnResult(), "Start of turn"), "Start of turn")); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovePlayerTokenToNextSiteGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovePlayerTokenToNextSiteGameProcess.java index 73b278d6e..c06e00e72 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovePlayerTokenToNextSiteGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/MovePlayerTokenToNextSiteGameProcess.java @@ -18,10 +18,7 @@ public class MovePlayerTokenToNextSiteGameProcess implements GameProcess { @Override public void process() { GameState gameState = _game.getGameState(); - gameState.stopAffecting(gameState.getCurrentSite()); - gameState.setPlayerPosition(gameState.getCurrentPlayerId(), gameState.getCurrentSiteNumber() + 1); - gameState.startAffecting(_game, gameState.getCurrentSite(), _game.getModifiersEnvironment()); - gameState.increaseMoveCount(); + gameState.movePlayerToNextSite(_game); int siteTwilightCost = _game.getModifiersQuerying().getTwilightCost(gameState, gameState.getCurrentSite()); int companionCount = Filters.countActive(gameState, _game.getModifiersQuerying(), Filters.type(CardType.COMPANION)); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/PlayerPlaysNextSiteIfNotThereGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/PlayerPlaysNextSiteIfNotThereGameProcess.java index 446d1860c..0581a41e3 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/PlayerPlaysNextSiteIfNotThereGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/move/PlayerPlaysNextSiteIfNotThereGameProcess.java @@ -52,7 +52,7 @@ public class PlayerPlaysNextSiteIfNotThereGameProcess implements GameProcess { Filters.siteNumber(nextSiteNumber)).iterator().next(); gameState.removeCardsFromZone(Collections.singleton(nextSite)); - gameState.addCardToZone(nextSite, Zone.ADVENTURE_PATH); + gameState.addCardToZone(_game, nextSite, Zone.ADVENTURE_PATH); final PhysicalCard site = nextSite;