From cc57c2fad9f2f6eab6f52ec29979acb54bbb89f7 Mon Sep 17 00:00:00 2001 From: fireshoes Date: Mon, 17 Apr 2017 21:12:30 -0500 Subject: [PATCH] [AKH] Fixed Oracle's Vault missing 'play without paying its mana cost' ability --- Mage.Sets/src/mage/cards/o/OraclesVault.java | 73 +++++++++++++++++++- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/cards/o/OraclesVault.java b/Mage.Sets/src/mage/cards/o/OraclesVault.java index 23f0b6e3545..a3a9dc00668 100644 --- a/Mage.Sets/src/mage/cards/o/OraclesVault.java +++ b/Mage.Sets/src/mage/cards/o/OraclesVault.java @@ -75,7 +75,7 @@ public class OraclesVault extends CardImpl { // {T}: Exile the top card of your library. Until end of turn, you may play that card without paying its mana cost. // Activate this ability only if there are three or more brick counters on Oracle's Vault. this.addAbility(new ConditionalActivatedAbility(Zone.BATTLEFIELD, - new OraclesVaultEffect(), new TapSourceCost(), new SourceHasCounterCondition(CounterType.BRICK, 3, Integer.MAX_VALUE), + new OraclesVaultFreeEffect(), new TapSourceCost(), new SourceHasCounterCondition(CounterType.BRICK, 3, Integer.MAX_VALUE), "{T}: Exile the top card of your library. Until end of turn, you may play that card without paying its mana cost. " + "Activate this ability only if there are three or more brick counters on {this}")); } @@ -121,6 +121,37 @@ class OraclesVaultEffect extends OneShotEffect { return false; } } +class OraclesVaultFreeEffect extends OneShotEffect { + + public OraclesVaultFreeEffect() { + super(Outcome.Benefit); + } + + public OraclesVaultFreeEffect(final OraclesVaultFreeEffect effect) { + super(effect); + } + + @Override + public OraclesVaultFreeEffect copy() { + return new OraclesVaultFreeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null && sourceObject != null && controller.getLibrary().hasCards()) { + Library library = controller.getLibrary(); + Card card = library.removeFromTop(game); + if (card != null) { + controller.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getIdName() + " ", source.getSourceId(), game, Zone.LIBRARY, true); + game.addEffect(new OraclesVaultPlayForFreeEffect(new MageObjectReference(card, game)), source); + } + return true; + } + return false; + } +} class OraclesVaultPlayEffect extends AsThoughEffectImpl { @@ -129,7 +160,7 @@ class OraclesVaultPlayEffect extends AsThoughEffectImpl { public OraclesVaultPlayEffect(MageObjectReference objectReference) { super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); this.objectReference = objectReference; - staticText = "Until end of turn, you may play that card without paying its mana cost"; + staticText = "Until end of turn, you may play that card"; } public OraclesVaultPlayEffect(final OraclesVaultPlayEffect effect) { @@ -159,5 +190,43 @@ class OraclesVaultPlayEffect extends AsThoughEffectImpl { } return false; } +} +class OraclesVaultPlayForFreeEffect extends AsThoughEffectImpl { + private final MageObjectReference objectReference; + + public OraclesVaultPlayForFreeEffect(MageObjectReference objectReference) { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + this.objectReference = objectReference; + staticText = "Until end of turn, you may play that card without paying its mana cost"; + } + + public OraclesVaultPlayForFreeEffect(final OraclesVaultPlayForFreeEffect effect) { + super(effect); + this.objectReference = effect.objectReference; + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public OraclesVaultPlayForFreeEffect copy() { + return new OraclesVaultPlayForFreeEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + if (objectReference.refersTo(objectId, game) && affectedControllerId.equals(source.getControllerId())) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + controller.setCastSourceIdWithAlternateMana(objectId, null, null); + return true; + } else { + discard(); + } + } + return false; + } } \ No newline at end of file