* Ondu Rising - Fixed that the attacking creatures did not get lifelink.

This commit is contained in:
LevelX2 2015-09-20 09:25:25 +02:00
parent 84757f132c
commit 5a8ca36916
4 changed files with 83 additions and 6 deletions

View file

@ -83,12 +83,12 @@ class OnduRisingTriggeredAbility extends DelayedTriggeredAbility {
@Override @Override
public boolean checkEventType(GameEvent event, Game game) { public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == EventType.DECLARE_ATTACKER; return event.getType() == EventType.ATTACKER_DECLARED;
} }
@Override @Override
public boolean checkTrigger(GameEvent event, Game game) { public boolean checkTrigger(GameEvent event, Game game) {
Permanent permanent = game.getPermanent(event.getTargetId()); Permanent permanent = game.getPermanent(event.getSourceId());
if (permanent != null) { if (permanent != null) {
for (Effect effect : getEffects()) { for (Effect effect : getEffects()) {
effect.setTargetPointer(new FixedTarget(permanent, game)); effect.setTargetPointer(new FixedTarget(permanent, game));

View file

@ -0,0 +1,71 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package org.mage.test.cards.triggers.delayed;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
/**
*
* @author LevelX2
*/
public class OnduRisingTest extends CardTestPlayerBase {
@Test
public void testLiflinkGained() {
addCard(Zone.BATTLEFIELD, playerB, "Plains", 5);
addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1);
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1);
// Whenever a creature attacks this turn, it gains lifelink until end of turn.
// Awaken 4{4}{W}
addCard(Zone.HAND, playerB, "Ondu Rising", 1);
activateManaAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}: Add {W}");
activateManaAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}: Add {W}");
activateManaAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}: Add {W}");
activateManaAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}: Add {W}");
activateManaAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}: Add {W}");
castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Ondu Rising with awaken");
attack(2, playerB, "Silvercoat Lion");
attack(2, playerB, "Mountain");
setStopAt(2, PhaseStep.POSTCOMBAT_MAIN);
execute();
assertGraveyardCount(playerB, "Ondu Rising", 1);
assertPowerToughness(playerB, "Mountain", 4, 4);
assertLife(playerA, 14);
assertLife(playerB, 26);
}
}

View file

@ -927,15 +927,15 @@ public class Combat implements Serializable, Copyable<Combat> {
} }
} }
public boolean declareAttacker(UUID attackerId, UUID defenderId, UUID playerId, Game game) { public boolean declareAttacker(UUID creatureId, UUID defenderId, UUID playerId, Game game) {
Permanent attacker = game.getPermanent(attackerId); Permanent attacker = game.getPermanent(creatureId);
if (!attacker.getAbilities().containsKey(VigilanceAbility.getInstance().getId())) { if (!attacker.getAbilities().containsKey(VigilanceAbility.getInstance().getId())) {
if (!attacker.isTapped()) { if (!attacker.isTapped()) {
attacker.tap(game); attacker.tap(game);
} }
} }
if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.DECLARE_ATTACKER, defenderId, attackerId, playerId))) { if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.DECLARE_ATTACKER, defenderId, creatureId, playerId))) {
return addAttackerToCombat(attackerId, defenderId, game); return addAttackerToCombat(creatureId, defenderId, game);
} }
return false; return false;
} }

View file

@ -154,6 +154,12 @@ public class GameEvent implements Serializable {
COUNTER, COUNTER,
COUNTERED, COUNTERED,
DECLARING_ATTACKERS, DECLARED_ATTACKERS, DECLARING_ATTACKERS, DECLARED_ATTACKERS,
/* DECLARE_ATTACKER
REPLACE EVENT - can be used to replace attack declaration
targetId id of the defending player or planeswalker attacked
sourceId id of the attacking creature
playerId player defining the attacking creatures
*/
DECLARE_ATTACKER, DECLARE_ATTACKER,
/* ATTACKER_DECLARED /* ATTACKER_DECLARED
targetId id of the defending player or planeswalker attacked targetId id of the defending player or planeswalker attacked