From 62b92f1c5db1ec005c7a6fa635521a2f47ae6d07 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 26 Feb 2014 16:57:32 +0100 Subject: [PATCH] Added Phyrexian Dreadnought. --- .../main/java/mage/server/ChatManager.java | 4 +- .../NezumiGraverobber.java | 4 +- .../sets/mirage/PhyrexianDreadnought.java | 129 ++++++++++++++++++ 3 files changed, 135 insertions(+), 2 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/mirage/PhyrexianDreadnought.java diff --git a/Mage.Server/src/main/java/mage/server/ChatManager.java b/Mage.Server/src/main/java/mage/server/ChatManager.java index 043c934e1cf..19a32258809 100644 --- a/Mage.Server/src/main/java/mage/server/ChatManager.java +++ b/Mage.Server/src/main/java/mage/server/ChatManager.java @@ -62,7 +62,9 @@ public class ChatManager { } public void leaveChat(UUID chatId, UUID userId) { - chatSessions.get(chatId).kill(userId, User.DisconnectReason.CleaningUp); + if (chatSessions.containsKey(chatId)) { + chatSessions.get(chatId).kill(userId, User.DisconnectReason.CleaningUp); + } } public void destroyChatSession(UUID chatId) { diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiGraverobber.java b/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiGraverobber.java index 82b5bcf8b1b..029b2de294e 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiGraverobber.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/NezumiGraverobber.java @@ -71,6 +71,7 @@ public class NezumiGraverobber extends CardImpl { this.flipCard = true; this.flipCardName = "Nighteyes The Desecrator"; + // {1}{B}: Exile target card from an opponent's graveyard. If no cards are in that graveyard, flip Nezumi Graverobber. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl("{1}{B}")); ability.addTarget(new TargetCardInOpponentsGraveyard(new FilterCard("card from an opponent's graveyard"))); ability.addEffect(new NezumiGraverobberFlipEffect()); @@ -127,7 +128,7 @@ class NezumiGraverobberFlipEffect extends OneShotEffect { + + public PhyrexianDreadnought(UUID ownerId) { + super(ownerId, 280, "Phyrexian Dreadnought", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{1}"); + this.expansionSetCode = "MIR"; + this.subtype.add("Dreadnought"); + + this.power = new MageInt(12); + this.toughness = new MageInt(12); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + // When Phyrexian Dreadnought enters the battlefield, sacrifice it unless you sacrifice any number of creatures with total power 12 or greater. + this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new PhyrexianDreadnoughtSacrificeCost()))); + + } + + public PhyrexianDreadnought(final PhyrexianDreadnought card) { + super(card); + } + + @Override + public PhyrexianDreadnought copy() { + return new PhyrexianDreadnought(this); + } +} + +class PhyrexianDreadnoughtSacrificeCost extends CostImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("any number of creatures with total power 12 or greater"); + + static { + filter.add(new AnotherPredicate()); + } + + public PhyrexianDreadnoughtSacrificeCost() { + this.addTarget(new TargetControlledCreaturePermanent(0, Integer.MAX_VALUE, filter, true, false)); + this.text = "sacrifice any number of creatures with total power 12 or greater"; + } + + public PhyrexianDreadnoughtSacrificeCost(final PhyrexianDreadnoughtSacrificeCost cost) { + super(cost); + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana) { + int sumPower = 0; + if (targets.choose(Outcome.Sacrifice, controllerId, sourceId, game)) { + for (UUID targetId: targets.get(0).getTargets()) { + Permanent permanent = game.getPermanent(targetId); + if (permanent != null && permanent.sacrifice(sourceId, game)) { + sumPower += permanent.getPower().getValue(); + } + } + } + game.informPlayers(new StringBuilder("Sacrificed creatures with total power of ").append(sumPower).toString()); + paid = sumPower >= 12; + return paid; + } + + @Override + public boolean canPay(UUID sourceId, UUID controllerId, Game game) { + int sumPower = 0; + for (Permanent permanent :game.getBattlefield().getAllActivePermanents(new FilterCreaturePermanent(), controllerId, game)) { + if (!permanent.getId().equals(sourceId)) { + sumPower += permanent.getPower().getValue(); + } + } + return sumPower >= 12; + } + + @Override + public PhyrexianDreadnoughtSacrificeCost copy() { + return new PhyrexianDreadnoughtSacrificeCost(this); + } +}