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);
}