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;