From ed54e78460db670c0149d8795749801550689119 Mon Sep 17 00:00:00 2001
From: magenoxx <magenoxx@gmail>
Date: Fri, 25 May 2012 08:19:04 +0400
Subject: [PATCH] PlayerImpl.canPlay fix

---
 Mage/src/mage/abilities/AbilityImpl.java | 19 +++++++++----------
 Mage/src/mage/players/PlayerImpl.java    | 10 ++++++++++
 2 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/Mage/src/mage/abilities/AbilityImpl.java b/Mage/src/mage/abilities/AbilityImpl.java
index 9674789650..9797a5a02a 100644
--- a/Mage/src/mage/abilities/AbilityImpl.java
+++ b/Mage/src/mage/abilities/AbilityImpl.java
@@ -40,6 +40,7 @@ import mage.abilities.costs.mana.ManaCosts;
 import mage.abilities.costs.mana.ManaCostsImpl;
 import mage.abilities.effects.*;
 import mage.abilities.mana.ManaAbility;
+import mage.cards.Card;
 import mage.choices.Choice;
 import mage.choices.Choices;
 import mage.game.Game;
@@ -179,18 +180,16 @@ public abstract class AbilityImpl<T extends AbilityImpl<T>> implements Ability {
             }
         }
 		//20100716 - 601.2e
-		if (game.getObject(sourceId) != null) {
-			//game.getObject(sourceId).adjustCosts(this, game);
-			if (game.getCard(sourceId) != null) {
-				game.getCard(sourceId).adjustCosts(this, game);
-                for (Ability ability : game.getCard(sourceId).getAbilities()) {
-                    if (ability instanceof AdjustingSourceCosts) {
-                        ((AdjustingSourceCosts)ability).adjustCosts(this, game);
-                    }
+        Card card = game.getCard(sourceId);
+        if (card != null) {
+            card.adjustCosts(this, game);
+            for (Ability ability : card.getAbilities()) {
+                if (ability instanceof AdjustingSourceCosts) {
+                    ((AdjustingSourceCosts)ability).adjustCosts(this, game);
                 }
             }
-		}
-		
+        }
+
         // this is a hack to prevent mana abilities with mana costs from causing endless loops - pay other costs first
         if (this instanceof ManaAbility && !costs.pay(this, game, sourceId, controllerId, noMana)) {
 			logger.debug("activate mana ability failed - non mana costs");
diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java
index 23146e901f..cf2f487f4c 100644
--- a/Mage/src/mage/players/PlayerImpl.java
+++ b/Mage/src/mage/players/PlayerImpl.java
@@ -37,6 +37,7 @@ import mage.Mana;
 import mage.abilities.*;
 import mage.abilities.common.PassAbility;
 import mage.abilities.common.delayed.AtTheEndOfTurnStepPostDelayedTriggeredAbility;
+import mage.abilities.costs.AdjustingSourceCosts;
 import mage.abilities.costs.AlternativeCost;
 import mage.abilities.effects.RestrictionEffect;
 import mage.abilities.effects.common.LoseControlOnOtherPlayersControllerEffect;
@@ -1199,6 +1200,15 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser
             Ability copy = ability.copy();
             game.getContinuousEffects().costModification(copy, game);
 
+            Card card = game.getCard(ability.getSourceId());
+            if (card != null) {
+                for (Ability ability0 : card.getAbilities()) {
+                    if (ability0 instanceof AdjustingSourceCosts) {
+                        ((AdjustingSourceCosts)ability0).adjustCosts(copy, game);
+                    }
+                }
+            }
+
 			ManaOptions abilityOptions = copy.getManaCostsToPay().getOptions();
 			if (abilityOptions.size() == 0) {
 				return true;