Fix DealsDamageToOpponentTriggeredAbility unconditionally overwriting the targets of any effects added to it.

This fixes at least Charnelhoard Wurm, and possibly other similar abilities.
This commit is contained in:
LoneFox 2015-09-29 12:19:50 +03:00
parent a2e1e2e614
commit 6d90539b7b
7 changed files with 20 additions and 12 deletions

View file

@ -58,7 +58,7 @@ public class FungalShambler extends CardImpl {
// Whenever Fungal Shambler deals damage to an opponent, you draw a card and that opponent discards a card. // Whenever Fungal Shambler deals damage to an opponent, you draw a card and that opponent discards a card.
Effect effect = new DrawCardSourceControllerEffect(1); Effect effect = new DrawCardSourceControllerEffect(1);
effect.setText("you draw a card"); effect.setText("you draw a card");
Ability ability = new DealsDamageToOpponentTriggeredAbility(effect, false); Ability ability = new DealsDamageToOpponentTriggeredAbility(effect, false, false, true);
effect = new DiscardTargetEffect(1); effect = new DiscardTargetEffect(1);
effect.setText("and that opponent discards a card"); effect.setText("and that opponent discards a card");
ability.addEffect(effect); ability.addEffect(effect);

View file

@ -55,7 +55,7 @@ public class HydraOmnivore extends CardImpl {
this.toughness = new MageInt(8); this.toughness = new MageInt(8);
// Whenever Hydra Omnivore deals combat damage to an opponent, it deals that much damage to each other opponent. // Whenever Hydra Omnivore deals combat damage to an opponent, it deals that much damage to each other opponent.
this.addAbility(new DealsDamageToOpponentTriggeredAbility(new HydraOmnivoreEffect(), false, true)); this.addAbility(new DealsDamageToOpponentTriggeredAbility(new HydraOmnivoreEffect(), false, true, true));
} }
public HydraOmnivore(final HydraOmnivore card) { public HydraOmnivore(final HydraOmnivore card) {

View file

@ -62,7 +62,7 @@ public class NicolBolas extends CardImpl {
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ManaCostsImpl("{U}{B}{R}")), TargetController.YOU, false)); this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ManaCostsImpl("{U}{B}{R}")), TargetController.YOU, false));
// Whenever Nicol Bolas deals damage to an opponent, that player discards his or her hand. // Whenever Nicol Bolas deals damage to an opponent, that player discards his or her hand.
this.addAbility(new DealsDamageToOpponentTriggeredAbility(new DiscardHandTargetEffect("that player"), false)); this.addAbility(new DealsDamageToOpponentTriggeredAbility(new DiscardHandTargetEffect("that player"), false, false, true));
} }
public NicolBolas(final NicolBolas card) { public NicolBolas(final NicolBolas card) {

View file

@ -54,7 +54,7 @@ public class HypnoticSpecter extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Whenever Hypnotic Specter deals damage to an opponent, that player discards a card at random. // Whenever Hypnotic Specter deals damage to an opponent, that player discards a card at random.
this.addAbility(new DealsDamageToOpponentTriggeredAbility(new DiscardTargetEffect(1, true))); this.addAbility(new DealsDamageToOpponentTriggeredAbility(new DiscardTargetEffect(1, true), false, false, true));
} }
public HypnoticSpecter(final HypnoticSpecter card) { public HypnoticSpecter(final HypnoticSpecter card) {

View file

@ -53,7 +53,7 @@ public class WeiNightRaiders extends CardImpl {
// Horsemanship // Horsemanship
this.addAbility(HorsemanshipAbility.getInstance()); this.addAbility(HorsemanshipAbility.getInstance());
// Whenever Wei Night Raiders deals damage to an opponent, that player discards a card. // Whenever Wei Night Raiders deals damage to an opponent, that player discards a card.
this.addAbility(new DealsDamageToOpponentTriggeredAbility(new DiscardTargetEffect(1), false)); this.addAbility(new DealsDamageToOpponentTriggeredAbility(new DiscardTargetEffect(1), false, false, true));
} }
public WeiNightRaiders(final WeiNightRaiders card) { public WeiNightRaiders(final WeiNightRaiders card) {

View file

@ -51,7 +51,7 @@ public class ZhangLiaoHeroOfHefei extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Whenever Zhang Liao, Hero of Hefei deals damage to an opponent, that opponent discards a card. // Whenever Zhang Liao, Hero of Hefei deals damage to an opponent, that opponent discards a card.
this.addAbility(new DealsDamageToOpponentTriggeredAbility(new DiscardTargetEffect(1), false)); this.addAbility(new DealsDamageToOpponentTriggeredAbility(new DiscardTargetEffect(1), false, false, true));
} }
public ZhangLiaoHeroOfHefei(final ZhangLiaoHeroOfHefei card) { public ZhangLiaoHeroOfHefei(final ZhangLiaoHeroOfHefei card) {

View file

@ -40,24 +40,30 @@ import mage.target.targetpointer.FixedTarget;
*/ */
public class DealsDamageToOpponentTriggeredAbility extends TriggeredAbilityImpl { public class DealsDamageToOpponentTriggeredAbility extends TriggeredAbilityImpl {
boolean onlyCombat; private final boolean onlyCombat, setTargetPointer;
public DealsDamageToOpponentTriggeredAbility(Effect effect) { public DealsDamageToOpponentTriggeredAbility(Effect effect) {
this(effect, false, false); this(effect, false, false, false);
} }
public DealsDamageToOpponentTriggeredAbility(Effect effect, boolean optional) { public DealsDamageToOpponentTriggeredAbility(Effect effect, boolean optional) {
this(effect, optional, false); this(effect, optional, false, false);
} }
public DealsDamageToOpponentTriggeredAbility(Effect effect, boolean optional, boolean onlyCombat) { public DealsDamageToOpponentTriggeredAbility(Effect effect, boolean optional, boolean onlyCombat) {
this(effect, optional, onlyCombat, false);
}
public DealsDamageToOpponentTriggeredAbility(Effect effect, boolean optional, boolean onlyCombat, boolean setTargetPointer) {
super(Zone.BATTLEFIELD, effect, optional); super(Zone.BATTLEFIELD, effect, optional);
this.onlyCombat = onlyCombat; this.onlyCombat = onlyCombat;
this.setTargetPointer = setTargetPointer;
} }
public DealsDamageToOpponentTriggeredAbility(final DealsDamageToOpponentTriggeredAbility ability) { public DealsDamageToOpponentTriggeredAbility(final DealsDamageToOpponentTriggeredAbility ability) {
super(ability); super(ability);
this.onlyCombat = ability.onlyCombat; this.onlyCombat = ability.onlyCombat;
this.setTargetPointer = ability.setTargetPointer;
} }
@Override @Override
@ -80,9 +86,11 @@ public class DealsDamageToOpponentTriggeredAbility extends TriggeredAbilityImpl
return false; return false;
} }
} }
for (Effect effect : getEffects()) { if(setTargetPointer) {
effect.setTargetPointer(new FixedTarget(event.getTargetId())); for (Effect effect : getEffects()) {
effect.setValue("damage", event.getAmount()); effect.setTargetPointer(new FixedTarget(event.getTargetId()));
effect.setValue("damage", event.getAmount());
}
} }
return true; return true;
} }