[CLB] Fix Myrkul's Edict not sacrificing creatures on 1-9. For #9381.

This commit is contained in:
Alex Vasile 2022-08-25 15:54:10 -04:00
parent 473ecc3292
commit 9d54aee3ba
2 changed files with 100 additions and 9 deletions

View file

@ -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);
} }
} }

View file

@ -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.
* 19 | Choose an opponent. That player sacrifices a creature.
* 1019 | 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);
}
}