From 4b8d7b26497ea0fe2b5a62f0fd762f354dfce4ed Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Mon, 19 Sep 2011 14:51:10 -0400 Subject: [PATCH] NPH - Praetors Grasp --- .../src/mage/player/human/HumanPlayer.java | 65 ++------ Mage.Server/plugins/mage-player-human.jar | Bin 14332 -> 12986 bytes .../mage/sets/newphyrexia/PraetorsGrasp.java | 154 ++++++++++++++++++ Mage/src/mage/players/PlayerImpl.java | 21 ++- 4 files changed, 188 insertions(+), 52 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/newphyrexia/PraetorsGrasp.java diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index 8c6be134afe..54a3782ef89 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -55,6 +55,7 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.PhyrexianManaCost; import mage.abilities.costs.mana.VariableManaCost; import mage.abilities.effects.ReplacementEffect; +import mage.abilities.mana.ManaAbility; import mage.cards.Card; import mage.cards.Cards; import mage.cards.decks.Deck; @@ -379,39 +380,18 @@ public class HumanPlayer extends PlayerImpl { MageObject object = game.getObject(response.getUUID()); if (object != null) { Map useableAbilities = null; - switch (game.getZone(object.getId())) { - case HAND: - useableAbilities = getUseableAbilities(object.getAbilities().getActivatedAbilities(Zone.HAND), game); - break; - case BATTLEFIELD: - useableAbilities = getUseableAbilities(object.getAbilities().getActivatedAbilities(Zone.BATTLEFIELD), game); - break; - case GRAVEYARD: - useableAbilities = getUseableAbilities(object.getAbilities().getActivatedAbilities(Zone.GRAVEYARD), game); - playAsThoughInYourHand(game, object, useableAbilities); - break; - case LIBRARY: - useableAbilities = getUseableAbilities(object.getAbilities().getActivatedAbilities(Zone.LIBRARY), game); - playAsThoughInYourHand(game, object, useableAbilities); - break; - } - if (useableAbilities != null && useableAbilities.size() > 0) { - activateAbility(useableAbilities, game); - } + Zone zone = game.getZone(object.getId()); + if (zone != null) { + useableAbilities = getUseableActivatedAbilities(object, zone, game); + if (useableAbilities != null && useableAbilities.size() > 0) { + activateAbility(useableAbilities, game); + } + } } } } } - // not sure it is the best to implement such stuff this way - private void playAsThoughInYourHand(Game game, MageObject object, Map useableAbilities) { - if (game.getContinuousEffects().asThough(object.getId(), Constants.AsThoughEffectType.CAST, game)) { - for (Map.Entry entry : getUseableAbilities(object.getAbilities().getActivatedAbilities(Zone.HAND), game).entrySet()) { - useableAbilities.put(entry.getKey(), entry.getValue()); - } - } - } - @Override public TriggeredAbility chooseTriggeredAbility(TriggeredAbilities abilities, Game game) { game.getState().setPriorityPlayerId(getId()); @@ -473,27 +453,14 @@ public class HumanPlayer extends PlayerImpl { game.getState().setPriorityPlayerId(getId()); MageObject object = game.getObject(response.getUUID()); if (object == null) return; - Map useableAbilities; - switch (game.getZone(object.getId())) { - case HAND: - useableAbilities = getUseableAbilities(object.getAbilities().getManaAbilities(Zone.HAND), game); - if (useableAbilities.size() > 0) { - activateAbility(useableAbilities, game); - } - break; - case BATTLEFIELD: - useableAbilities = getUseableAbilities(object.getAbilities().getManaAbilities(Zone.BATTLEFIELD), game); - if (useableAbilities.size() > 0) { - activateAbility(useableAbilities, game); - } - break; - case GRAVEYARD: - useableAbilities = getUseableAbilities(object.getAbilities().getManaAbilities(Zone.GRAVEYARD), game); - if (useableAbilities.size() > 0) { - activateAbility(useableAbilities, game); - } - break; - } + Map useableAbilities = null; + Zone zone = game.getZone(object.getId()); + if (zone != null) { + useableAbilities = getUseableManaAbilities(object, zone, game); + if (useableAbilities != null && useableAbilities.size() > 0) { + activateAbility(useableAbilities, game); + } + } } @Override diff --git a/Mage.Server/plugins/mage-player-human.jar b/Mage.Server/plugins/mage-player-human.jar index ca4d50c078e68024a3ef5b26c1410b230b49045d..2e36625617d39d0599fb53cd598b85d670e7a837 100644 GIT binary patch delta 11428 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%0Ax}N13ue@0rC5qiY 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 m;I9P!3uwXn7s#E~$N7d(Qw0&}pJy0 { + + public PraetorsGrasp(UUID ownerId) { + super(ownerId, 71, "Praetor's Grasp", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{1}{B}{B}"); + this.expansionSetCode = "NPH"; + + this.color.setBlack(true); + + // Search target opponent's library for a card and exile it face down. Then that player shuffles his or her library. You may look at and play that card for as long as it remains exiled. + this.getSpellAbility().addEffect(new PraetorsGraspEffect()); + this.getSpellAbility().addTarget(new TargetOpponent()); + + } + + public PraetorsGrasp(final PraetorsGrasp card) { + super(card); + } + + @Override + public PraetorsGrasp copy() { + return new PraetorsGrasp(this); + } +} + +class PraetorsGraspEffect extends OneShotEffect { + + public PraetorsGraspEffect() { + super(Outcome.PlayForFree); + staticText = "Search target opponent's library for a card and exile it face down. Then that player shuffles his or her library. You may look at and play that card for as long as it remains exiled"; + } + + public PraetorsGraspEffect(final PraetorsGraspEffect effect) { + super(effect); + } + + @Override + public PraetorsGraspEffect copy() { + return new PraetorsGraspEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player opponent = game.getPlayer(source.getFirstTarget()); + Player player = game.getPlayer(source.getControllerId()); + if (player != null && opponent != null) { + Cards opponentLibrary = new CardsImpl(); + opponentLibrary.addAll(opponent.getLibrary().getCardList()); + + TargetCardInLibrary target = new TargetCardInLibrary(); + if (player.choose(Outcome.Benefit, opponentLibrary, target, game)) { + UUID targetId = target.getFirstTarget(); + Card card = opponent.getLibrary().remove(targetId, game); + if (card != null) { + card.setFaceDown(true); + card.moveToExile(getId(), "Praetor's Grasp", source.getSourceId(), game); + game.addEffect(new PraetorsGraspPlayEffect(card.getId()), source); + } + } + } + + opponent.shuffleLibrary(game); + return true; + } +} + +class PraetorsGraspPlayEffect extends AsThoughEffectImpl { + + private UUID cardId; + + public PraetorsGraspPlayEffect(UUID cardId) { + super(AsThoughEffectType.CAST, Duration.EndOfGame, Outcome.Benefit); + this.cardId = cardId; + staticText = "You may look at and play that card for as long as it remains exiled"; + } + + public PraetorsGraspPlayEffect(final PraetorsGraspPlayEffect effect) { + super(effect); + this.cardId = effect.cardId; + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public PraetorsGraspPlayEffect copy() { + return new PraetorsGraspPlayEffect(this); + } + + @Override + public boolean applies(UUID sourceId, Ability source, Game game) { + if (sourceId.equals(cardId)) { + Card card = game.getCard(cardId); + if (card != null && game.getZone(cardId) == Zone.EXILED) { + return true; + } + } + return false; + } + +} \ No newline at end of file diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index b33e27a4cfd..3881743f9db 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -38,6 +38,7 @@ import java.util.Map; import java.util.Random; import java.util.Set; import java.util.UUID; +import mage.Constants.AsThoughEffectType; import mage.Constants.Outcome; import mage.Constants.RangeOfInfluence; import mage.Constants.Zone; @@ -604,15 +605,29 @@ public abstract class PlayerImpl> implements Player, Ser return false; } - protected Map getUseableAbilities(List abilities, Game game) { + protected Map getUseableActivatedAbilities(MageObject object, Zone zone, Game game) { Map useable = new HashMap(); - for (ActivatedAbility ability: abilities) { + for (ActivatedAbility ability: object.getAbilities().getActivatedAbilities(zone)) { + if (ability.canActivate(playerId, game)) + useable.put(ability.getId(), ability); + } + if (zone != Zone.HAND && game.getContinuousEffects().asThough(object.getId(), AsThoughEffectType.CAST, game)) { + for (ActivatedAbility ability: object.getAbilities().getActivatedAbilities(Zone.HAND)) { + useable.put(ability.getId(), ability); + } + } + return useable; + } + + protected Map getUseableManaAbilities(MageObject object, Zone zone, Game game) { + Map useable = new HashMap(); + for (ManaAbility ability: object.getAbilities().getManaAbilities(zone)) { if (ability.canActivate(playerId, game)) useable.put(ability.getId(), ability); } return useable; } - + @Override public int getLandsPlayed() { return landsPlayed;