mirror of
https://github.com/correl/mage.git
synced 2024-11-25 03:00:11 +00:00
[CLB] Fix Myrkul's Edict not sacrificing creatures on 1-9. For #9381.
This commit is contained in:
parent
473ecc3292
commit
9d54aee3ba
2 changed files with 100 additions and 9 deletions
|
@ -1,6 +1,7 @@
|
||||||
package mage.cards.m;
|
package mage.cards.m;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.RollDieWithResultTableEffect;
|
import mage.abilities.effects.common.RollDieWithResultTableEffect;
|
||||||
import mage.abilities.effects.common.SacrificeEffect;
|
import mage.abilities.effects.common.SacrificeEffect;
|
||||||
|
@ -16,6 +17,7 @@ import mage.filter.predicate.permanent.GreatestPowerControlledPredicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.target.common.TargetOpponent;
|
import mage.target.common.TargetOpponent;
|
||||||
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@ -78,16 +80,19 @@ class MyrkulsEdictEffect extends OneShotEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
Player player = game.getPlayer(source.getControllerId());
|
TargetOpponent target = new TargetOpponent(true);
|
||||||
if (player == null) {
|
if (!target.choose(outcome, source.getControllerId(), source.getId(), source, game)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
TargetOpponent target = new TargetOpponent();
|
|
||||||
target.setNotTarget(true);
|
Player opponent = game.getPlayer(target.getFirstTarget());
|
||||||
player.choose(outcome, target, source, game);
|
if (opponent == null) {
|
||||||
return game.getPlayer(target.getFirstTarget()) != null
|
return false;
|
||||||
&& new SacrificeEffect(
|
}
|
||||||
StaticFilters.FILTER_PERMANENT_CREATURE, 1, ""
|
|
||||||
).apply(game, source);
|
Effect sacrificeEffect = new SacrificeEffect(StaticFilters.FILTER_PERMANENT_CREATURE, 1, "");
|
||||||
|
sacrificeEffect.setTargetPointer(new FixedTarget(opponent.getId()));
|
||||||
|
|
||||||
|
return sacrificeEffect.apply(game, source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
package org.mage.test.cards.single.clb;
|
||||||
|
|
||||||
|
import mage.constants.PhaseStep;
|
||||||
|
import mage.constants.Zone;
|
||||||
|
import org.junit.Ignore;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link mage.cards.m.MyrkulsEdict Myrkul's Edict}
|
||||||
|
* Sorcery
|
||||||
|
* {1}{B}
|
||||||
|
*
|
||||||
|
* Roll a d20.
|
||||||
|
* 1—9 | Choose an opponent. That player sacrifices a creature.
|
||||||
|
* 10—19 | Each opponent sacrifices a creature.
|
||||||
|
* 20 | Each opponent sacrifices a creature with the greatest power among creatures that player controls.
|
||||||
|
*
|
||||||
|
* @author Alex-Vasile
|
||||||
|
*/
|
||||||
|
public class MyrkulsEdictTest extends CardTestPlayerBase {
|
||||||
|
private static final String myrkulsEdict = "Myrkul's Edict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reported bug: https://github.com/magefree/mage/issues/9381
|
||||||
|
* AI doesn't sacrifice a creature on a roll of 1-9
|
||||||
|
*/
|
||||||
|
@Ignore
|
||||||
|
@Test
|
||||||
|
public void opponentSacrificesLevel1() {
|
||||||
|
addCard(Zone.HAND, playerA, myrkulsEdict);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2);
|
||||||
|
|
||||||
|
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion");
|
||||||
|
|
||||||
|
setStrictChooseMode(true);
|
||||||
|
|
||||||
|
setDieRollResult(playerA, 1);
|
||||||
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, myrkulsEdict);
|
||||||
|
addTarget(playerA, playerB);
|
||||||
|
addTarget(playerB, "Silvercoat Lion");
|
||||||
|
|
||||||
|
execute();
|
||||||
|
|
||||||
|
assertPermanentCount(playerB, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void opponentSacrificesLevel2() {
|
||||||
|
addCard(Zone.HAND, playerA, myrkulsEdict);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2);
|
||||||
|
|
||||||
|
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion");
|
||||||
|
|
||||||
|
setStrictChooseMode(true);
|
||||||
|
|
||||||
|
setDieRollResult(playerA, 11);
|
||||||
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, myrkulsEdict);
|
||||||
|
addTarget(playerB, "Silvercoat Lion");
|
||||||
|
|
||||||
|
execute();
|
||||||
|
|
||||||
|
assertPermanentCount(playerB, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void opponentSacrificesLevel3() {
|
||||||
|
addCard(Zone.HAND, playerA, myrkulsEdict);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2);
|
||||||
|
|
||||||
|
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion");
|
||||||
|
addCard(Zone.BATTLEFIELD, playerB, "Aesi, Tyrant of Gyre Strait"); // 5/5
|
||||||
|
|
||||||
|
setStrictChooseMode(true);
|
||||||
|
|
||||||
|
setDieRollResult(playerA, 20);
|
||||||
|
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, myrkulsEdict);
|
||||||
|
addTarget(playerB, "Aesi, Tyrant of Gyre Strait");
|
||||||
|
|
||||||
|
execute();
|
||||||
|
|
||||||
|
assertPermanentCount(playerB, "Silvercoat Lion", 1);
|
||||||
|
assertPermanentCount(playerB, "Aesi, Tyrant of Gyre Strait", 0);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue