From 818952bf2deb25cd090d4e11de261a3b0a1a008b Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 18 Aug 2020 14:00:06 +0200 Subject: [PATCH] * Fixed a bug that prevented to show cards as playable if castable by alternateSourceCosts (fixes Dream Halls problem related to #6698). --- .../cards/cost/alternate/UseAlternateSourceCostsTest.java | 8 ++++++-- Mage/src/main/java/mage/players/PlayerImpl.java | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/cost/alternate/UseAlternateSourceCostsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/cost/alternate/UseAlternateSourceCostsTest.java index fe78134d2c5..88ff765efcb 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/cost/alternate/UseAlternateSourceCostsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/cost/alternate/UseAlternateSourceCostsTest.java @@ -13,22 +13,26 @@ public class UseAlternateSourceCostsTest extends CardTestPlayerBase { @Test public void DreamHallsCastColoredSpell() { + setStrictChooseMode(true); + // Rather than pay the mana cost for a spell, its controller may discard a card that shares a color with that spell. addCard(Zone.BATTLEFIELD, playerA, "Dream Halls", 1); - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); // Add the mountains so the spell is included in teh available spells addCard(Zone.HAND, playerA, "Gray Ogre", 1); // Creature 3/1 addCard(Zone.HAND, playerA, "Lightning Bolt", 1); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gray Ogre"); // Cast Orgre by discarding the Lightning Bolt + setChoice(playerA, "Yes"); // Pay alternative costs? (Discard a card that shares a color with that spell) + setChoice(playerA, "Lightning Bolt"); setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); + assertAllCommandsUsed(); + //Gray Ogre is cast with the discard assertPermanentCount(playerA, "Gray Ogre", 1); assertGraveyardCount(playerA, "Lightning Bolt", 1); - assertTapped("Mountain", false); } @Test diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 0180576e9e9..7e24747eccc 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -3208,7 +3208,7 @@ public abstract class PlayerImpl implements Player, Serializable { // if cast for noMana no Alternative costs are allowed if (alternateSourceCostsAbility instanceof AlternativeSourceCosts) { if (((AlternativeSourceCosts) alternateSourceCostsAbility).isAvailable(ability, game)) { - if (alternateSourceCostsAbility.getCosts().canPay(ability, playerId, playerId, game)) { + if (alternateSourceCostsAbility.getCosts().canPay(ability, sourceObject.getId(), playerId, game)) { ManaCostsImpl manaCosts = new ManaCostsImpl(); for (Cost cost : alternateSourceCostsAbility.getCosts()) { if (cost instanceof ManaCost) { @@ -3250,7 +3250,7 @@ public abstract class PlayerImpl implements Player, Serializable { for (AlternativeSourceCosts alternateSourceCosts : getAlternativeSourceCosts()) { if (alternateSourceCosts instanceof Ability) { if (alternateSourceCosts.isAvailable(ability, game)) { - if (((Ability) alternateSourceCosts).getCosts().canPay(ability, playerId, playerId, game)) { + if (((Ability) alternateSourceCosts).getCosts().canPay(ability, sourceObject.getId(), playerId, game)) { ManaCostsImpl manaCosts = new ManaCostsImpl(); for (Cost cost : ((Ability) alternateSourceCosts).getCosts()) { if (cost instanceof ManaCost) {