forked from External/mage
reworked Heart-Piercer Manticore's reflexive triggered ability
This commit is contained in:
parent
765ccf63a6
commit
57a5ee8f4e
1 changed files with 26 additions and 35 deletions
|
|
@ -1,27 +1,24 @@
|
|||
|
||||
package mage.cards.h;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.DelayedTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.effects.common.InfoEffect;
|
||||
import mage.abilities.effects.common.SendOptionUsedEventEffect;
|
||||
import mage.abilities.keyword.EmbalmAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
|
|
@ -41,13 +38,11 @@ public final class HeartPiercerManticore extends CardImpl {
|
|||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// When Heart-Piercer Manticore enters the battlefield, you may sacrifice another creature.
|
||||
Ability firstAbility = new EntersBattlefieldTriggeredAbility(new HeartPiercerManticoreSacrificeEffect(), true);
|
||||
this.addAbility(firstAbility);
|
||||
// When you do, Heart-Piercer Manticore deals damage equal to that creature's power to any target.
|
||||
Ability secondAbility = new HeartPiercerManticoreSacrificeTriggeredAbility(firstAbility.getOriginalId());
|
||||
secondAbility.addTarget(new TargetAnyTarget());
|
||||
this.addAbility(secondAbility);
|
||||
// When Heart-Piercer Manticore enters the battlefield, you may sacrifice another creature. When you do, Heart-Piercer Manticore deals damage equal to that creature's power to any target.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new HeartPiercerManticoreSacrificeEffect(), true
|
||||
));
|
||||
|
||||
// Embalm {5}{R}
|
||||
this.addAbility(new EmbalmAbility(new ManaCostsImpl("{5}{R}"), this));
|
||||
|
||||
|
|
@ -67,7 +62,8 @@ class HeartPiercerManticoreSacrificeEffect extends OneShotEffect {
|
|||
|
||||
public HeartPiercerManticoreSacrificeEffect() {
|
||||
super(Outcome.Damage);
|
||||
this.staticText = "you may sacrifice another creature";
|
||||
this.staticText = "sacrifice another creature. When you do, "
|
||||
+ "{this} deals damage equal to that creature's power to any target";
|
||||
}
|
||||
|
||||
public HeartPiercerManticoreSacrificeEffect(final HeartPiercerManticoreSacrificeEffect effect) {
|
||||
|
|
@ -87,8 +83,11 @@ class HeartPiercerManticoreSacrificeEffect extends OneShotEffect {
|
|||
if (controller.choose(outcome, target, source.getSourceId(), game)) {
|
||||
Permanent toSacrifice = game.getPermanent(target.getFirstTarget());
|
||||
if (toSacrifice != null) {
|
||||
toSacrifice.sacrifice(source.getSourceId(), game);
|
||||
return new SendOptionUsedEventEffect(toSacrifice.getPower().getValue()).apply(game, source);
|
||||
DelayedTriggeredAbility trigger = new HeartPiercerManticoreReflexiveTriggeredAbility(toSacrifice.getPower().getValue());
|
||||
if (toSacrifice.sacrifice(source.getSourceId(), game)) {
|
||||
game.addDelayedTriggeredAbility(trigger, source);
|
||||
return new SendOptionUsedEventEffect().apply(game, source);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
|
@ -97,44 +96,36 @@ class HeartPiercerManticoreSacrificeEffect extends OneShotEffect {
|
|||
}
|
||||
}
|
||||
|
||||
class HeartPiercerManticoreSacrificeTriggeredAbility extends TriggeredAbilityImpl {
|
||||
class HeartPiercerManticoreReflexiveTriggeredAbility extends DelayedTriggeredAbility {
|
||||
|
||||
private final UUID relatedTriggerdAbilityOriginalId;
|
||||
|
||||
public HeartPiercerManticoreSacrificeTriggeredAbility(UUID relatedTriggerdAbilityOriginalId) {
|
||||
super(Zone.BATTLEFIELD, new InfoEffect("{this} deals damage equal to that creature's power to any target"));
|
||||
this.relatedTriggerdAbilityOriginalId = relatedTriggerdAbilityOriginalId;
|
||||
public HeartPiercerManticoreReflexiveTriggeredAbility(int damage) {
|
||||
super(new DamageTargetEffect(damage), Duration.OneUse, true);
|
||||
this.addTarget(new TargetAnyTarget());
|
||||
}
|
||||
|
||||
public HeartPiercerManticoreSacrificeTriggeredAbility(final HeartPiercerManticoreSacrificeTriggeredAbility ability) {
|
||||
public HeartPiercerManticoreReflexiveTriggeredAbility(final HeartPiercerManticoreReflexiveTriggeredAbility ability) {
|
||||
super(ability);
|
||||
this.relatedTriggerdAbilityOriginalId = ability.relatedTriggerdAbilityOriginalId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HeartPiercerManticoreSacrificeTriggeredAbility copy() {
|
||||
return new HeartPiercerManticoreSacrificeTriggeredAbility(this);
|
||||
public HeartPiercerManticoreReflexiveTriggeredAbility copy() {
|
||||
return new HeartPiercerManticoreReflexiveTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == EventType.OPTION_USED;
|
||||
return event.getType() == GameEvent.EventType.OPTION_USED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (event.getPlayerId().equals(this.getControllerId())
|
||||
&& event.getTargetId().equals(relatedTriggerdAbilityOriginalId)
|
||||
&& event.getSourceId().equals(getSourceId())) {
|
||||
getEffects().clear();
|
||||
getEffects().add(new DamageTargetEffect(event.getAmount()));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return event.getPlayerId().equals(this.getControllerId())
|
||||
&& event.getSourceId().equals(this.getSourceId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "When you do, {this} deals damage equal to that creature's power to any target.";
|
||||
return "When you sacrifice a creature to {this}'s ability, "
|
||||
+ "{this} deals damage equal to that creature's power to any target";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue