mirror of
https://github.com/correl/mage.git
synced 2024-12-25 11:11:16 +00:00
* Conduit of Ruin - Fixed a problem with the spell cost reduction not working (#6698).
This commit is contained in:
parent
af5a0bb405
commit
c1ac2ac6ae
2 changed files with 55 additions and 3 deletions
|
@ -10,6 +10,7 @@ import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.common.CastSourceTriggeredAbility;
|
import mage.abilities.effects.common.CastSourceTriggeredAbility;
|
||||||
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
|
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
|
||||||
import mage.abilities.effects.common.search.SearchLibraryPutOnLibraryEffect;
|
import mage.abilities.effects.common.search.SearchLibraryPutOnLibraryEffect;
|
||||||
|
import mage.cards.Card;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
@ -71,7 +72,7 @@ public final class ConduitOfRuin extends CardImpl {
|
||||||
|
|
||||||
class ConduitOfRuinWatcher extends Watcher {
|
class ConduitOfRuinWatcher extends Watcher {
|
||||||
|
|
||||||
private Map<UUID, Integer> playerCreatureSpells;
|
private final Map<UUID, Integer> playerCreatureSpells;
|
||||||
|
|
||||||
public ConduitOfRuinWatcher() {
|
public ConduitOfRuinWatcher() {
|
||||||
super(WatcherScope.GAME);
|
super(WatcherScope.GAME);
|
||||||
|
@ -103,8 +104,8 @@ class FirstCastCreatureSpellPredicate implements ObjectPlayerPredicate<ObjectPla
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(ObjectPlayer<Controllable> input, Game game) {
|
public boolean apply(ObjectPlayer<Controllable> input, Game game) {
|
||||||
if (input.getObject() instanceof Spell
|
if (input.getObject() instanceof Card
|
||||||
&& ((Spell) input.getObject()).isCreature()) {
|
&& ((Card) input.getObject()).isCreature()) {
|
||||||
ConduitOfRuinWatcher watcher = game.getState().getWatcher(ConduitOfRuinWatcher.class);
|
ConduitOfRuinWatcher watcher = game.getState().getWatcher(ConduitOfRuinWatcher.class);
|
||||||
return watcher != null && watcher.creatureSpellsCastThisTurn(input.getPlayerId()) == 0;
|
return watcher != null && watcher.creatureSpellsCastThisTurn(input.getPlayerId()) == 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
package org.mage.test.cards.single.bfz;
|
||||||
|
|
||||||
|
import mage.constants.PhaseStep;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author LevelX2
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ConduitOfRuinTest extends CardTestPlayerBase {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCast() {
|
||||||
|
setStrictChooseMode(true);
|
||||||
|
|
||||||
|
// Emrakul, the Aeons Torn can't be countered.
|
||||||
|
// When you cast Emrakul, take an extra turn after this one.
|
||||||
|
// Flying, protection from colored spells, annihilator 6
|
||||||
|
// When Emrakul is put into a graveyard from anywhere, its owner shuffles their graveyard into their library.
|
||||||
|
addCard(Zone.LIBRARY, playerA, "Emrakul, the Aeons Torn"); // Creature {15} 15/15
|
||||||
|
|
||||||
|
// When you cast Conduit of Ruin, you may search your library for a colorless creature card with converted mana cost 7 or greater, then shuffle your library and put that card on top of it.
|
||||||
|
// The first creature spell you cast each turn costs {2} less to cast.
|
||||||
|
addCard(Zone.HAND, playerA, "Conduit of Ruin"); // Creature {6} 5/5
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Plains", 13);
|
||||||
|
|
||||||
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Conduit of Ruin");
|
||||||
|
setChoice(playerA, "Yes"); // When you cast this spell, you may search...
|
||||||
|
addTarget(playerA, "Emrakul, the Aeons Torn");
|
||||||
|
|
||||||
|
setStopAt(3, PhaseStep.DRAW);
|
||||||
|
|
||||||
|
execute();
|
||||||
|
|
||||||
|
assertLibraryCount(playerA, "Emrakul, the Aeons Torn", 0);
|
||||||
|
assertHandCount(playerA, "Emrakul, the Aeons Torn", 1);
|
||||||
|
|
||||||
|
castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Emrakul, the Aeons Torn");
|
||||||
|
|
||||||
|
setStopAt(3, PhaseStep.BEGIN_COMBAT);
|
||||||
|
execute();
|
||||||
|
|
||||||
|
assertAllCommandsUsed();
|
||||||
|
|
||||||
|
assertPermanentCount(playerA, "Conduit of Ruin", 1);
|
||||||
|
assertPermanentCount(playerA, "Emrakul, the Aeons Torn", 1);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue