From a5504c1a96d1fff50cc1d80537eb8e970cddccc1 Mon Sep 17 00:00:00 2001 From: GitHubMage <> Date: Wed, 2 Mar 2016 22:29:29 +0100 Subject: [PATCH] fixed Ali from Cairo the previous implementation did reduce the amount of damage that is being dealt to not reduce life below one. now the damage is untouched but the affected player's life total is set to 1 if the damage would otherwise reduce below 1. --- .../mage/sets/arabiannights/AliFromCairo.java | 17 ++++---- .../test/cards/single/AliFromCairoTest.java | 40 +++++++++++++++++++ 2 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/AliFromCairoTest.java diff --git a/Mage.Sets/src/mage/sets/arabiannights/AliFromCairo.java b/Mage.Sets/src/mage/sets/arabiannights/AliFromCairo.java index 076d03c794f..5cc37d20a0e 100644 --- a/Mage.Sets/src/mage/sets/arabiannights/AliFromCairo.java +++ b/Mage.Sets/src/mage/sets/arabiannights/AliFromCairo.java @@ -97,11 +97,7 @@ class AliFromCairoReplacementEffect extends ReplacementEffectImpl { && (controller.getLife() > 0) &&(controller.getLife() - event.getAmount()) < 1 && event.getPlayerId().equals(controller.getId()) ) { - return true; - //unsure how to make this comply with - // 10/1/2008: The ability doesn't change how much damage is dealt; - // it just changes how much life that damage makes you lose. - // An effect such as Spirit Link will see the full amount of damage being dealt. + return true; } } return false; @@ -110,10 +106,17 @@ class AliFromCairoReplacementEffect extends ReplacementEffectImpl { @Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { Player controller = game.getPlayer(source.getControllerId()); + + // 10/1/2008: The ability doesn't change how much damage is dealt; + // it just changes how much life that damage makes you lose. + // An effect such as Spirit Link will see the full amount of damage being dealt. + game.fireEvent(event); + if (controller != null) { - event.setAmount(controller.getLife() - 1); + controller.setLife(1, game); } - return false; + + return true; } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/AliFromCairoTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/AliFromCairoTest.java new file mode 100644 index 00000000000..fefd0c65d2b --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/AliFromCairoTest.java @@ -0,0 +1,40 @@ +package org.mage.test.cards.single; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author BetaSteward + */ +public class AliFromCairoTest extends CardTestPlayerBase { + + @Test + public void testCard() { + addCard(Zone.BATTLEFIELD, playerA, "Ali from Cairo", 1); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 12); + addCard(Zone.BATTLEFIELD, playerB, "Soulfire Grand Master", 1); + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 12); + addCard(Zone.HAND, playerA, "Lightning Bolt", 7); + addCard(Zone.HAND, playerB, "Lightning Bolt", 7); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerA); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerA); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerA); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerA); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerA); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerA); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerA); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerA); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", playerA); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertLife(playerA, 1); + assertLife(playerB, 23); + } +} \ No newline at end of file