From 60c7a2b34b5dd9a64bd415b65424a559294cf52b Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 14 Jul 2015 23:56:44 +0200 Subject: [PATCH] * Stack - Fixed that name of face down cards were unintended shown while moving effect is on the stack (Necropotence). --- .../src/mage/view/StackAbilityView.java | 75 ++++++++++--------- .../sets/dragonsmaze/BreakingEntering.java | 22 ++---- .../src/mage/sets/iceage/Necropotence.java | 27 +++---- 3 files changed, 60 insertions(+), 64 deletions(-) diff --git a/Mage.Common/src/mage/view/StackAbilityView.java b/Mage.Common/src/mage/view/StackAbilityView.java index 8cb82fa2ff..a55b78c9c8 100644 --- a/Mage.Common/src/mage/view/StackAbilityView.java +++ b/Mage.Common/src/mage/view/StackAbilityView.java @@ -1,31 +1,30 @@ /* -* 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. -*/ - + * 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 mage.view; import java.util.ArrayList; @@ -34,6 +33,7 @@ import java.util.UUID; import mage.MageObject; import mage.abilities.Modes; import mage.abilities.effects.Effect; +import mage.cards.Card; import mage.constants.AbilityType; import mage.constants.CardType; import mage.constants.MageObjectType; @@ -47,15 +47,15 @@ import mage.target.targetpointer.TargetPointer; * @author BetaSteward_at_googlemail.com */ public class StackAbilityView extends CardView { + private static final long serialVersionUID = 1L; private final CardView sourceCard; - private final AbilityType abilityType; public StackAbilityView(Game game, StackAbility ability, String sourceName, CardView sourceCard) { this.id = ability.getId(); this.mageObjectType = MageObjectType.ABILITY_STACK; - this.abilityType = ability.getStackAbility().getAbilityType(); + this.abilityType = ability.getStackAbility().getAbilityType(); this.sourceCard = sourceCard; this.sourceCard.setMageObjectType(mageObjectType); this.name = "Ability"; @@ -72,11 +72,11 @@ public class StackAbilityView extends CardView { this.color = ability.getColor(game); this.manaCost = ability.getManaCost().getSymbols(); this.power = ability.getPower().toString(); - this.toughness = ability.getToughness().toString(); + this.toughness = ability.getToughness().toString(); String nameToShow; if (sourceCard.isFaceDown()) { CardView tmpSourceCard = this.getSourceCard(); - tmpSourceCard.displayName = "Face Down"; + tmpSourceCard.displayName = "Face Down"; tmpSourceCard.superTypes.clear(); tmpSourceCard.subTypes.clear(); tmpSourceCard.cardTypes.clear(); @@ -85,7 +85,7 @@ public class StackAbilityView extends CardView { tmpSourceCard.power = "2"; tmpSourceCard.toughness = "2"; nameToShow = "creature without name"; - } else { + } else { nameToShow = sourceName; } this.rules = new ArrayList<>(); @@ -97,7 +97,7 @@ public class StackAbilityView extends CardView { private void updateTargets(Game game, StackAbility ability) { List names = new ArrayList<>(); - for(UUID modeId : ability.getModes().getSelectedModes()) { + for (UUID modeId : ability.getModes().getSelectedModes()) { ability.getModes().setActiveMode(modeId); if (ability.getTargets().size() > 0) { setTargets(ability.getTargets()); @@ -115,6 +115,9 @@ public class StackAbilityView extends CardView { for (UUID uuid : targetList) { MageObject mageObject = game.getObject(uuid); if (mageObject != null) { + if ((mageObject instanceof Card) && ((Card) mageObject).isFaceDown(game)) { + continue; + } names.add(mageObject.getName()); } } @@ -128,9 +131,9 @@ public class StackAbilityView extends CardView { // show for modal ability, which mode was choosen if (ability.isModal()) { Modes modes = ability.getModes(); - for(UUID modeId : modes.getSelectedModes()) { + for (UUID modeId : modes.getSelectedModes()) { modes.setActiveMode(modeId); - this.rules.add("Chosen mode: " + ability.getEffects().getText(modes.get(modeId))+""); + this.rules.add("Chosen mode: " + ability.getEffects().getText(modes.get(modeId)) + ""); } } } @@ -143,5 +146,5 @@ public class StackAbilityView extends CardView { public AbilityType getAbilityType() { return abilityType; } - + } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/BreakingEntering.java b/Mage.Sets/src/mage/sets/dragonsmaze/BreakingEntering.java index 49ed215dd9..0900fe7685 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/BreakingEntering.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/BreakingEntering.java @@ -25,15 +25,9 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.sets.dragonsmaze; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.OneShotEffect; @@ -42,7 +36,11 @@ import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.keyword.HasteAbility; import mage.cards.Card; import mage.cards.SplitCard; +import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.filter.common.FilterCreatureCard; import mage.game.Game; import mage.players.Player; @@ -51,12 +49,6 @@ import mage.target.TargetPlayer; import mage.target.common.TargetCardInGraveyard; import mage.target.targetpointer.FixedTarget; -/** - * - * @author LevelX2 - */ - - public class BreakingEntering extends SplitCard { public BreakingEntering(UUID ownerId) { @@ -106,18 +98,18 @@ class EnteringReturnFromGraveyardToBattlefieldEffect extends OneShotEffect { if (player != null) { Target target = new TargetCardInGraveyard(new FilterCreatureCard()); target.setNotTarget(true); - if (target.canChoose(source.getSourceId(), source.getControllerId(), game) && - player.chooseTarget(outcome, target, source, game)) { + if (target.canChoose(source.getSourceId(), source.getControllerId(), game) + && player.chooseTarget(outcome, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { if (card.putOntoBattlefield(game, Zone.GRAVEYARD, source.getSourceId(), source.getControllerId())) { ContinuousEffect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); - return true; } } } + return true; } return false; } diff --git a/Mage.Sets/src/mage/sets/iceage/Necropotence.java b/Mage.Sets/src/mage/sets/iceage/Necropotence.java index 60044a1b7b..0b1bb6d547 100644 --- a/Mage.Sets/src/mage/sets/iceage/Necropotence.java +++ b/Mage.Sets/src/mage/sets/iceage/Necropotence.java @@ -64,14 +64,14 @@ public class Necropotence extends CardImpl { this.expansionSetCode = "ICE"; // Skip your draw step. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SkipDrawStepEffect())); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SkipDrawStepEffect())); // Whenever you discard a card, exile that card from your graveyard. Effect effect = new ExileTargetEffect(null, "", Zone.GRAVEYARD); effect.setText("exile that card from your graveyard"); this.addAbility(new NecropotenceTriggeredAbility(effect)); // Pay 1 life: Exile the top card of your library face down. Put that card into your hand at the beginning of your next end step. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new NecropotenceEffect(), new PayLifeCost(1))); - + } public Necropotence(final Necropotence card) { @@ -85,8 +85,9 @@ public class Necropotence extends CardImpl { } class NecropotenceTriggeredAbility extends TriggeredAbilityImpl { + NecropotenceTriggeredAbility(Effect effect) { - super(Zone.BATTLEFIELD, effect , false); + super(Zone.BATTLEFIELD, effect, false); } NecropotenceTriggeredAbility(final NecropotenceTriggeredAbility ability) { @@ -105,10 +106,10 @@ class NecropotenceTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { - if (getControllerId().equals(event.getPlayerId())) { - this.getEffects().get(0).setTargetPointer(new FixedTarget(event.getTargetId())); - return true; - } + if (getControllerId().equals(event.getPlayerId())) { + this.getEffects().get(0).setTargetPointer(new FixedTarget(event.getTargetId())); + return true; + } return false; } @@ -119,21 +120,21 @@ class NecropotenceTriggeredAbility extends TriggeredAbilityImpl { } class NecropotenceEffect extends OneShotEffect { - + public NecropotenceEffect() { super(Outcome.Benefit); this.staticText = "Exile the top card of your library face down. Put that card into your hand at the beginning of your next end step"; } - + public NecropotenceEffect(final NecropotenceEffect effect) { super(effect); } - + @Override public NecropotenceEffect copy() { return new NecropotenceEffect(this); } - + @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); @@ -144,12 +145,12 @@ class NecropotenceEffect extends OneShotEffect { card.setFaceDown(true, game); Effect returnToHandeffect = new ReturnToHandTargetEffect(false); returnToHandeffect.setText("put that face down card into your hand"); - returnToHandeffect.setTargetPointer(new FixedTarget(card.getId())); + returnToHandeffect.setTargetPointer(new FixedTarget(card.getId(), card.getZoneChangeCounter(game))); DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(returnToHandeffect, TargetController.YOU); delayedAbility.setSourceId(source.getSourceId()); delayedAbility.setControllerId(source.getControllerId()); delayedAbility.setSourceObject(source.getSourceObject(game), game); - game.addDelayedTriggeredAbility(delayedAbility); + game.addDelayedTriggeredAbility(delayedAbility); return true; } return false;