From 225e853a01353e66975d2de6f036f0fe228028b1 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Wed, 29 Feb 2012 10:55:23 +0000 Subject: [PATCH] "Nurn" --- .../cards/AbstractLotroCardBlueprint.java | 5 +++ .../effects/TakeControlOfASiteEffect.java | 2 +- .../cards/set15/uruk_hai/Card15_174.java | 2 +- .../lotro/cards/set17/site/Card17_148.java | 32 +++++++++++++++++++ .../lotro/game/LotroCardBlueprint.java | 2 ++ .../gempukku/lotro/game/PhysicalCardImpl.java | 18 +++++++++++ .../gempukku/lotro/game/state/GameState.java | 22 ++++++++++++- .../lotro/logic/effects/PlaySiteEffect.java | 2 +- 8 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/site/Card17_148.java 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 310cb9c8e..5fa6d1655 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 @@ -115,6 +115,11 @@ public abstract class AbstractLotroCardBlueprint implements LotroCardBlueprint { return null; } + @Override + public List getControlledSiteModifiers(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/effects/TakeControlOfASiteEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TakeControlOfASiteEffect.java index 717b8e5a5..b1aaba1db 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TakeControlOfASiteEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TakeControlOfASiteEffect.java @@ -67,7 +67,7 @@ public class TakeControlOfASiteEffect extends AbstractEffect implements Preventa protected FullEffectResult playEffectReturningResult(LotroGame game) { PhysicalCard site = getFirstControllableSite(game); if (site != null && !_prevented) { - game.getGameState().takeControlOfCard(_playerId, site, Zone.SUPPORT); + game.getGameState().takeControlOfCard(_playerId, game, site, Zone.SUPPORT); game.getGameState().sendMessage(_playerId + " took control of " + GameUtils.getCardLink(site)); game.getActionsEnvironment().emitEffectResult(new TakeControlOfSiteResult(_playerId)); return new FullEffectResult(true, true); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/uruk_hai/Card15_174.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/uruk_hai/Card15_174.java index 1ab3395a4..9fee3a39e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/uruk_hai/Card15_174.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/uruk_hai/Card15_174.java @@ -56,7 +56,7 @@ public class Card15_174 extends AbstractMinion { siteOnPath.setSiteNumber(controlledNumber); controlledSite.setSiteNumber(onPathNumber); game.getGameState().loseControlOfCard(controlledSite, Zone.ADVENTURE_PATH); - game.getGameState().takeControlOfCard(playerId, siteOnPath, Zone.SUPPORT); + game.getGameState().takeControlOfCard(playerId, game, siteOnPath, Zone.SUPPORT); } }); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/site/Card17_148.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/site/Card17_148.java new file mode 100644 index 000000000..53cfabcf1 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/site/Card17_148.java @@ -0,0 +1,32 @@ +package com.gempukku.lotro.cards.set17.site; + +import com.gempukku.lotro.cards.AbstractNewSite; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.StrengthModifier; + +import java.util.Collections; +import java.util.List; + +/** + * Set: Rise of Saruman + * Twilight Cost: 1 + * Type: Site + * Game Text: Plains. While you control this site, each of your hunter minions is strength +1. + */ +public class Card17_148 extends AbstractNewSite { + public Card17_148() { + super("Nurn", 1, Direction.LEFT); + addKeyword(Keyword.PLAINS); + } + + @Override + public List getControlledSiteModifiers(LotroGame game, PhysicalCard self) { + return Collections.singletonList( + new StrengthModifier(self, Filters.and(Filters.owner(self.getCardController()), CardType.MINION, Keyword.HUNTER), 1)); + } +} 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 7283a2a77..a75033844 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 @@ -51,6 +51,8 @@ public interface LotroCardBlueprint { public List getInDiscardModifiers(LotroGame game, PhysicalCard self); + public List getControlledSiteModifiers(LotroGame game, PhysicalCard self); + public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile); public CostToEffectAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty); 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 2ffce93f6..81ca232ac 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 @@ -22,6 +22,7 @@ public class PhysicalCardImpl implements PhysicalCard { private List _modifierHooks; private List _modifierHooksStacked; private List _modifierHooksInDiscard; + private List _modifierHooksControlledSite; private Object _data; @@ -119,6 +120,23 @@ public class PhysicalCardImpl implements PhysicalCard { } } + public void startAffectingGameControlledSite(LotroGame game) { + List modifiers = _blueprint.getControlledSiteModifiers(game, this); + if (modifiers != null) { + _modifierHooksControlledSite = new LinkedList(); + for (Modifier modifier : modifiers) + _modifierHooksControlledSite.add(game.getModifiersEnvironment().addAlwaysOnModifier(modifier)); + } + } + + public void stopAffectingGameControlledSite() { + if (_modifierHooksControlledSite != null) { + for (ModifierHook modifierHook : _modifierHooksControlledSite) + modifierHook.stop(); + _modifierHooksControlledSite = 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 bc683fb29..f2eaa8054 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 @@ -242,14 +242,18 @@ public class GameState { listener.cardMoved(card); } - public void takeControlOfCard(String playerId, PhysicalCard card, Zone zone) { + public void takeControlOfCard(String playerId, LotroGame game, PhysicalCard card, Zone zone) { ((PhysicalCardImpl) card).setCardController(playerId); ((PhysicalCardImpl) card).setZone(zone); + if (card.getBlueprint().getCardType() == CardType.SITE) + startAffectingControlledSite(game, card); for (GameStateListener listener : getAllGameStateListeners()) listener.cardMoved(card); } public void loseControlOfCard(PhysicalCard card, Zone zone) { + if (card.getBlueprint().getCardType() == CardType.SITE) + stopAffectingControlledSite(card); ((PhysicalCardImpl) card).setCardController(null); ((PhysicalCardImpl) card).setZone(zone); for (GameStateListener listener : getAllGameStateListeners()) @@ -781,6 +785,10 @@ public class GameState { for (PhysicalCardImpl physicalCard : _inPlay) { if (isCardInPlayActive(physicalCard) && physicalCard.getBlueprint().getCardType() != CardType.SITE) startAffecting(game, physicalCard); + else if (physicalCard.getBlueprint().getCardType() == CardType.SITE && + physicalCard.getCardController() != null) { + startAffectingControlledSite(game, physicalCard); + } } // Current site is affecting @@ -798,6 +806,10 @@ public class GameState { startAffectingInDiscard(game, discardedCard); } + private void startAffectingControlledSite(LotroGame game, PhysicalCard physicalCard) { + ((PhysicalCardImpl) physicalCard).startAffectingGameControlledSite(game); + } + public void reapplyAffectingForCard(LotroGame game, PhysicalCard card) { ((PhysicalCardImpl) card).stopAffectingGame(); ((PhysicalCardImpl) card).startAffectingGame(game); @@ -807,6 +819,10 @@ public class GameState { for (PhysicalCardImpl physicalCard : _inPlay) { if (isCardInPlayActive(physicalCard) && physicalCard.getBlueprint().getCardType() != CardType.SITE) stopAffecting(physicalCard); + else if (physicalCard.getBlueprint().getCardType() == CardType.SITE && + physicalCard.getCardController() != null) { + stopAffectingControlledSite(physicalCard); + } } stopAffecting(getCurrentSite()); @@ -821,6 +837,10 @@ public class GameState { stopAffectingInDiscard(discardedCard); } + private void stopAffectingControlledSite(PhysicalCard physicalCard) { + ((PhysicalCardImpl) physicalCard).stopAffectingGameControlledSite(); + } + private void startAffecting(LotroGame game, PhysicalCard card) { ((PhysicalCardImpl) card).startAffectingGame(game); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlaySiteEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlaySiteEffect.java index d674d045e..e0041b1bc 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlaySiteEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlaySiteEffect.java @@ -134,7 +134,7 @@ public class PlaySiteEffect extends AbstractEffect { gameState.sendMessage(newSite.getOwner() + " plays " + GameUtils.getCardLink(newSite)); if (controlled != null) { - gameState.takeControlOfCard(controlled, newSite, zone); + gameState.takeControlOfCard(controlled, game, newSite, zone); for (PhysicalCard physicalCard : stacked) gameState.stackCard(game, physicalCard, newSite); }