* Bestow - Fixed that the converted mana costs were calculated from the bestow costs instead of the base cost of the spell.

This commit is contained in:
LevelX2 2015-02-24 23:36:59 +01:00
parent 0a9c49b1e1
commit 091fa9a528
3 changed files with 60 additions and 8 deletions

View file

@ -231,5 +231,45 @@ public class BestowTest extends CardTestPlayerBase {
assertPermanentCount(playerA, "Nyxborn Rollicker", 0);
assertGraveyardCount(playerA, "Nyxborn Rollicker", 1);
}
}
/**
* Test that CMC of a spell cast with bestowed is correct
* Disdainful Stroke doesn't check converted mana cost correctly. Opponent was
* able to use it to counter a Hypnotic Siren cast with Bestow.
*/
@Test
public void bestowCheckForCorrectCMC() {
addCard(Zone.BATTLEFIELD, playerA, "Island", 7);
// Enchantment Creature Siren
// 1/1
// Bestow {5}{U}{U} (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.)
// Flying
// You control enchanted creature.
// Enchanted creature gets +1/+1 and has flying.
addCard(Zone.HAND, playerA, "Hypnotic Siren");
// Instant {1}{U}
// Counter target spell with converted mana cost 4 or greater.
addCard(Zone.HAND, playerB, "Disdainful Stroke");
addCard(Zone.BATTLEFIELD, playerB, "Island", 2);
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hypnotic Siren using bestow", "Silvercoat Lion");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Disdainful Stroke", "Hypnotic Siren");
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
//
assertHandCount(playerA, "Hypnotic Siren", 0);
assertGraveyardCount(playerA, "Hypnotic Siren", 0);
assertHandCount(playerB, "Disdainful Stroke", 1);
assertPermanentCount(playerA, "Hypnotic Siren", 1);
// because cast with bestow, Boon Satyr may not be tapped
assertPermanentCount(playerA, "Silvercoat Lion", 1);
assertPowerToughness(playerA, "Silvercoat Lion", 3,3);
}
}

View file

@ -41,6 +41,7 @@ import mage.constants.Duration;
import mage.constants.Layer;
import static mage.constants.Layer.TypeChangingEffects_4;
import mage.constants.Outcome;
import mage.constants.SpellAbilityType;
import mage.constants.SubLayer;
import mage.constants.TimingRule;
import mage.constants.Zone;
@ -108,6 +109,7 @@ public class BestowAbility extends SpellAbility {
public BestowAbility(Card card, String manaString) {
super(new ManaCostsImpl(manaString), card.getName() + " using bestow");
this.spellAbilityType = SpellAbilityType.BASE_ALTERNATE;
this.timing = TimingRule.SORCERY;
TargetPermanent auraTarget = new TargetCreaturePermanent();
this.addTarget(auraTarget);

View file

@ -28,6 +28,9 @@
package mage.game.stack;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.Mana;
@ -47,7 +50,11 @@ import mage.abilities.keyword.BestowAbility;
import mage.abilities.keyword.MorphAbility;
import mage.cards.Card;
import mage.cards.SplitCard;
import mage.constants.*;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.constants.SpellAbilityType;
import mage.constants.Zone;
import mage.counters.Counter;
import mage.counters.Counters;
import mage.game.Game;
@ -59,10 +66,6 @@ import mage.target.Target;
import mage.target.TargetAmount;
import mage.watchers.Watcher;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
*
* @author BetaSteward_at_googlemail.com
@ -181,7 +184,7 @@ public class Spell implements StackObject, Card {
// if muliple modes are selected, and there are modes with targets, then at least one mode has to have a legal target or
// When resolving a fused split spell with multiple targets, treat it as you would any spell with multiple targets.
// If all targets are illegal when the spell tries to resolve, the spell is countered and none of its effects happen.
// If at least one target is still legal at that time, the spell resolves, but an illegal target cant perform any actions
// If at least one target is still legal at that time, the spell resolves, but an illegal target can't perform any actions
// or have any actions performed on it.
legalParts |= spellAbilityHasLegalParts(spellAbility, game);
}
@ -635,7 +638,14 @@ public class Spell implements StackObject, Card {
index = symbolString.indexOf("{X}");
}
}
cmc += spellAbility.getManaCosts().convertedManaCost() + spellAbility.getManaCostsToPay().getX() * xMultiplier;
if (this.getSpellAbility().getSpellAbilityType().equals(SpellAbilityType.BASE_ALTERNATE)) {
cmc += spellAbility.getManaCostsToPay().getX() * xMultiplier;
} else {
cmc += spellAbility.getManaCosts().convertedManaCost() + spellAbility.getManaCostsToPay().getX() * xMultiplier;
}
}
if (this.getSpellAbility().getSpellAbilityType().equals(SpellAbilityType.BASE_ALTERNATE)) {
cmc += getCard().getManaCost().convertedManaCost();
}
return cmc;
}