diff --git a/Mage/src/mage/abilities/effects/common/ScryEffect.java b/Mage/src/mage/abilities/effects/common/ScryEffect.java index 8eea107fe0..aa6e62def7 100644 --- a/Mage/src/mage/abilities/effects/common/ScryEffect.java +++ b/Mage/src/mage/abilities/effects/common/ScryEffect.java @@ -66,45 +66,53 @@ public class ScryEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); - Cards cards = new CardsImpl(Zone.PICK); - int count = Math.min(scryNumber, player.getLibrary().size()); - if (count == 0) { - return false; - } - for (int i = 0; i < count; i++) { - Card card = player.getLibrary().removeFromTop(game); - cards.add(card); - game.setZone(card.getId(), Zone.PICK); - } - TargetCard target1 = new TargetCard(Zone.PICK, filter1); - // move cards to the bottom of the library - while (cards.size() > 0 && player.choose(Outcome.Detriment, cards, target1, game)) { - Card card = cards.get(target1.getFirstTarget(), game); - if (card != null) { - cards.remove(card); - card.moveToZone(Zone.LIBRARY, source.getId(), game, false); + if (player != null) { + Cards cards = new CardsImpl(Zone.PICK); + int count = Math.min(scryNumber, player.getLibrary().size()); + if (count == 0) { + return false; } - target1.clearChosen(); - } - // move cards to the top of the library - if (cards.size() > 1) { - TargetCard target2 = new TargetCard(Zone.PICK, filter2); - target2.setRequired(true); - while (cards.size() > 1) { - player.choose(Outcome.Benefit, cards, target2, game); - Card card = cards.get(target2.getFirstTarget(), game); + for (int i = 0; i < count; i++) { + Card card = player.getLibrary().removeFromTop(game); + cards.add(card); + game.setZone(card.getId(), Zone.PICK); + } + TargetCard target1 = new TargetCard(Zone.PICK, filter1); + // move cards to the bottom of the library + while (cards.size() > 0 && player.choose(Outcome.Detriment, cards, target1, game)) { + Card card = cards.get(target1.getFirstTarget(), game); if (card != null) { cards.remove(card); - card.moveToZone(Zone.LIBRARY, source.getId(), game, true); + card.moveToZone(Zone.LIBRARY, source.getId(), game, false); } - target2.clearChosen(); + target1.clearChosen(); } + // move cards to the top of the library + int onTop = cards.size(); + if (cards.size() > 1) { + TargetCard target2 = new TargetCard(Zone.PICK, filter2); + target2.setRequired(true); + while (cards.size() > 1) { + player.choose(Outcome.Benefit, cards, target2, game); + Card card = cards.get(target2.getFirstTarget(), game); + if (card != null) { + cards.remove(card); + card.moveToZone(Zone.LIBRARY, source.getId(), game, true); + } + target2.clearChosen(); + } + } + if (cards.size() == 1) { + Card card = cards.get(cards.iterator().next(), game); + card.moveToZone(Zone.LIBRARY, source.getId(), game, true); + } + game.informPlayers(new StringBuilder(player.getName()).append(" puts ") + .append(onTop).append(onTop == 1 ?" card":"cards") + .append(" on the bottom of his or her library (scry ") + .append(scryNumber).append(")").toString()); + return true; } - if (cards.size() == 1) { - Card card = cards.get(cards.iterator().next(), game); - card.moveToZone(Zone.LIBRARY, source.getId(), game, true); - } - return true; + return false; } @Override