diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html index dc7d93bae..05a328dfd 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html @@ -20,6 +20,7 @@ the skirmish. - "Uruk Brute" has now 9 strength (per card text). - "Ancient Chieftain, Elder Goblin" costs 4 twilight, rather than 3 (per card text). +- Cards that liberate a site, now correctly validate that the site can be liberated before they do so. 12 Mar. 2013 - "Flaming Brand" from set 20 should now correctly apply strength and damage bonus if bearer is skirmishing a Nazgul. 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 a0a1591b2..8a2bfa36b 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 @@ -4,6 +4,7 @@ import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.GameUtils; import com.gempukku.lotro.logic.timing.AbstractEffect; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult; @@ -17,7 +18,7 @@ public class LiberateASiteEffect extends AbstractEffect { private String _playerId; public LiberateASiteEffect(PhysicalCard source) { - _source = source; + this(source, source.getOwner()); } public LiberateASiteEffect(PhysicalCard source, String playerId) { @@ -62,30 +63,34 @@ public class LiberateASiteEffect extends AbstractEffect { @Override protected FullEffectResult playEffectReturningResult(LotroGame game) { - PhysicalCard siteToLiberate = getSiteToLiberate(game); - if (siteToLiberate != null) { - Set cardsToRemove = new HashSet(); - Set discardedCards = new HashSet(); + if (isPlayableInFull(game)) { + PhysicalCard siteToLiberate = getSiteToLiberate(game); + if (siteToLiberate != null) { + Set cardsToRemove = new HashSet(); + Set discardedCards = new HashSet(); - List stackedCards = game.getGameState().getStackedCards(siteToLiberate); - cardsToRemove.addAll(stackedCards); + List stackedCards = game.getGameState().getStackedCards(siteToLiberate); + cardsToRemove.addAll(stackedCards); - List attachedCards = game.getGameState().getAttachedCards(siteToLiberate); - cardsToRemove.addAll(attachedCards); - discardedCards.addAll(attachedCards); + List attachedCards = game.getGameState().getAttachedCards(siteToLiberate); + cardsToRemove.addAll(attachedCards); + discardedCards.addAll(attachedCards); - game.getGameState().removeCardsFromZone(_source.getOwner(), cardsToRemove); - for (PhysicalCard removedCard : cardsToRemove) - game.getGameState().addCardToZone(game, removedCard, Zone.DISCARD); + game.getGameState().removeCardsFromZone(_source.getOwner(), cardsToRemove); + for (PhysicalCard removedCard : cardsToRemove) + game.getGameState().addCardToZone(game, removedCard, Zone.DISCARD); - game.getGameState().loseControlOfCard(siteToLiberate, Zone.ADVENTURE_PATH); + game.getGameState().loseControlOfCard(siteToLiberate, Zone.ADVENTURE_PATH); - for (PhysicalCard discardedCard : discardedCards) - game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(null, discardedCard)); + for (PhysicalCard discardedCard : discardedCards) + game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(null, discardedCard)); - liberatedSiteCallback(siteToLiberate); + game.getGameState().sendMessage(_playerId + " liberated a " + GameUtils.getCardLink(siteToLiberate) + " using " + GameUtils.getCardLink(_source)); - return new FullEffectResult(true); + liberatedSiteCallback(siteToLiberate); + + return new FullEffectResult(true); + } } return new FullEffectResult(false); }