fix Agrus Kos, Eternal Soldier

This commit is contained in:
xenohedron 2023-09-22 18:52:52 -04:00
parent 832a70a135
commit 79157a7219
2 changed files with 79 additions and 4 deletions

View file

@ -19,9 +19,11 @@ import mage.filter.predicate.mageobject.MageObjectReferencePredicate;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.game.stack.Spell;
import mage.game.stack.StackObject;
import mage.players.Player;
import mage.target.Target;
import mage.util.CardUtil;
import java.util.Collection;
import java.util.List;
@ -88,11 +90,14 @@ class AgrusKosEternalSoldierTriggeredAbility extends TriggeredAbilityImpl {
if (!event.getTargetId().equals(getSourceId())) {
return false;
}
StackObject stackObject = game.getStack().getStackObject(event.getSourceId());
if (stackObject == null) {
StackObject targetingObject = CardUtil.getTargetingStackObject(event, game);
if (targetingObject == null || targetingObject instanceof Spell) {
return false;
}
Set<UUID> targets = stackObject
if (!CardUtil.checkTargetMap(this.id, targetingObject, event, game)) {
return false;
}
Set<UUID> targets = targetingObject
.getStackAbility()
.getTargets()
.stream()
@ -102,7 +107,7 @@ class AgrusKosEternalSoldierTriggeredAbility extends TriggeredAbilityImpl {
if (targets.isEmpty() || !targets.stream().allMatch(getSourceId()::equals)) {
return false;
}
this.getEffects().setValue("triggeringAbility", stackObject);
this.getEffects().setValue("triggeringAbility", targetingObject);
return true;
}
}

View file

@ -0,0 +1,70 @@
package org.mage.test.cards.single.j22;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
/**
* @author xenohedron
*/
public class AgrusKosEternalSoldierTest extends CardTestPlayerBase {
private static final String agrus = "Agrus Kos, Eternal Soldier"; // 3/4 Vigilance
// Whenever Agrus Kos, Eternal Soldier becomes the target of an ability that targets only it, you may pay {1}{R/W}.
// If you do, copy that ability for each other creature you control that ability could target. Each copy targets a different one of those creatures.
private static final String sparkmage = "Cunning Sparkmage"; // 0/1 Haste pinger
private static final String turtle = "Horned Turtle"; // 1/4
private static final String firewalker = "Kor Firewalker"; // 2/2 protection from red
// Whenever a player casts a red spell, you may gain 1 life.
@Test
public void testTriggerCopiesAbility() {
setStrictChooseMode(true);
addCard(Zone.BATTLEFIELD, playerA, agrus);
addCard(Zone.BATTLEFIELD, playerA, turtle);
addCard(Zone.BATTLEFIELD, playerA, firewalker);
addCard(Zone.BATTLEFIELD, playerB, sparkmage);
addCard(Zone.BATTLEFIELD, playerA, "Plateau", 2);
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}: {this} deals", agrus);
setChoice(playerA, true); // pay to copy
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertTapped(sparkmage, true);
assertTappedCount("Plateau", true, 2);
assertDamageReceived(playerA, agrus, 1);
assertDamageReceived(playerA, turtle, 1);
assertDamageReceived(playerA, firewalker, 0);
assertLife(playerA, 20);
assertLife(playerB, 20);
}
@Test
public void testTriggerDoesntCopySpell() {
setStrictChooseMode(true);
String shock = "Shock";
addCard(Zone.BATTLEFIELD, playerA, agrus);
addCard(Zone.BATTLEFIELD, playerA, turtle);
addCard(Zone.BATTLEFIELD, playerA, firewalker);
addCard(Zone.HAND, playerB, shock);
addCard(Zone.BATTLEFIELD, playerB, "Plateau");
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, shock, agrus);
setChoice(playerA, true); // gain 1 life
setStopAt(1, PhaseStep.BEGIN_COMBAT);
execute();
assertDamageReceived(playerA, agrus, 2);
assertDamageReceived(playerA, turtle, 0);
assertDamageReceived(playerA, firewalker, 0);
assertLife(playerA, 21);
assertLife(playerB, 20);
}
}