From 28a6050709afb9ba651076dd49e6136f1ad55a55 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 20 Mar 2013 19:34:32 +0100 Subject: [PATCH] Fixed a bug of Dread Slaver that the returned creature didn't get suntype Zombie and color black in addition to its colors and subtypes. --- .../mage/sets/avacynrestored/DreadSlaver.java | 113 ++++++++++++++++-- 1 file changed, 105 insertions(+), 8 deletions(-) diff --git a/Mage.Sets/src/mage/sets/avacynrestored/DreadSlaver.java b/Mage.Sets/src/mage/sets/avacynrestored/DreadSlaver.java index c2ffe1b2705..14a263d9aae 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/DreadSlaver.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/DreadSlaver.java @@ -27,14 +27,27 @@ */ package mage.sets.avacynrestored; -import mage.Constants.CardType; -import mage.Constants.Rarity; -import mage.MageInt; -import mage.abilities.common.DiesAndDealtDamageThisTurnTriggeredAbility; -import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect; -import mage.cards.CardImpl; - import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Duration; +import mage.Constants.Layer; +import mage.Constants.Outcome; +import mage.Constants.Rarity; +import mage.Constants.SubLayer; +import mage.Constants.Zone; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesAndDealtDamageThisTurnTriggeredAbility; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; + + /** * @author noxx @@ -52,7 +65,7 @@ public class DreadSlaver extends CardImpl { this.toughness = new MageInt(5); // Whenever a creature dealt damage by Dread Slaver this turn dies, return it to the battlefield under your control. That creature is a black Zombie in addition to its other colors and types. - this.addAbility(new DiesAndDealtDamageThisTurnTriggeredAbility(new ReturnToBattlefieldUnderYourControlTargetEffect(), false)); + this.addAbility(new DiesAndDealtDamageThisTurnTriggeredAbility(new DreadSlaverEffect(), false)); } public DreadSlaver(final DreadSlaver card) { @@ -64,3 +77,87 @@ public class DreadSlaver extends CardImpl { return new DreadSlaver(this); } } + +class DreadSlaverEffect extends OneShotEffect { + + public DreadSlaverEffect() { + super(Outcome.Benefit); + staticText = "return it to the battlefield under your control. That creature is a black Zombie in addition to its other colors and types"; + } + + public DreadSlaverEffect(final DreadSlaverEffect effect) { + super(effect); + } + + @Override + public DreadSlaverEffect copy() { + return new DreadSlaverEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Card card = game.getCard(targetPointer.getFirst(game, source)); + if (card != null) { + Zone currentZone = game.getState().getZone(card.getId()); + if (card.putOntoBattlefield(game, currentZone, source.getSourceId(), source.getControllerId())) { + ContinuousEffect effect = new DreadSlaverContiniousEffect(); + effect.setTargetPointer(new FixedTarget(card.getId())); + game.addEffect(effect, source); + return true; + } + } + return false; + } + +} + +class DreadSlaverContiniousEffect extends ContinuousEffectImpl { + + public DreadSlaverContiniousEffect() { + super(Duration.Custom, Outcome.Neutral); + staticText = "That creature is a black Zombie in addition to its other colors and types"; + } + + public DreadSlaverContiniousEffect(final DreadSlaverContiniousEffect effect) { + super(effect); + } + + @Override + public DreadSlaverContiniousEffect copy() { + return new DreadSlaverContiniousEffect(this); + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + Permanent creature = game.getPermanent(targetPointer.getFirst(game, source)); + if (creature != null) { + switch (layer) { + case TypeChangingEffects_4: + if (sublayer == SubLayer.NA) { + creature.getSubtype().add("Zombie"); + } + break; + case ColorChangingEffects_5: + if (sublayer == SubLayer.NA) { + creature.getColor().setBlack(true); + } + break; + } + return true; + } else { + this.used = true; + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.ColorChangingEffects_5 || layer == Layer.TypeChangingEffects_4; + } + +}