mirror of
https://github.com/magefree/mage.git
synced 2026-01-26 21:29:17 -08:00
fix Agrus Kos, Eternal Soldier
This commit is contained in:
parent
832a70a135
commit
79157a7219
2 changed files with 79 additions and 4 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue