Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions Mage.Sets/src/mage/cards/a/AuditoreAmbush.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package mage.cards.a;

import java.util.UUID;

import mage.abilities.Mode;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.effects.common.search.SearchLibraryGraveyardPutInHandEffect;
import mage.abilities.effects.common.search.SearchLibraryGraveyardPutInHandTargetPlayerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.NamePredicate;
import mage.target.TargetPlayer;
import mage.target.common.TargetCreaturePermanent;

/**
* @author balazskristof
*/
public final class AuditoreAmbush extends CardImpl {

private static final FilterCard filter = new FilterCard("Ezio, Blade of Vengeance");

static {
filter.add(new NamePredicate("Ezio, Blade of Vengeance"));
}

public AuditoreAmbush(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{U}{B}");


// Choose one or both --
this.getSpellAbility().getModes().setMinModes(1);
this.getSpellAbility().getModes().setMaxModes(2);

// * Return target creature to its owner's hand.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent());

// * Target player searches their library and/or graveyard for a card named Ezio, Blade of Vengeance, reveals it, and puts it into their hand. If they search their library this way, they shuffle.
Mode mode = new Mode(new SearchLibraryGraveyardPutInHandTargetPlayerEffect(filter, false));
mode.addTarget(new TargetPlayer());
this.getSpellAbility().addMode(mode);
}

private AuditoreAmbush(final AuditoreAmbush card) {
super(card);
}

@Override
public AuditoreAmbush copy() {
return new AuditoreAmbush(this);
}
}
2 changes: 1 addition & 1 deletion Mage.Sets/src/mage/sets/AssassinsCreed.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ private AssassinsCreed() {
cards.add(new SetCardInfo("Assassin's Trophy", 166, Rarity.RARE, mage.cards.a.AssassinsTrophy.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Assassin's Trophy", 228, Rarity.RARE, mage.cards.a.AssassinsTrophy.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Assassin's Trophy", 95, Rarity.RARE, mage.cards.a.AssassinsTrophy.class, NON_FULL_USE_VARIOUS));
//cards.add(new SetCardInfo("Auditore Ambush", 295, Rarity.RARE, mage.cards.a.AuditoreAmbush.class));
cards.add(new SetCardInfo("Auditore Ambush", 295, Rarity.RARE, mage.cards.a.AuditoreAmbush.class));
cards.add(new SetCardInfo("Aveline de Grandpre", 135, Rarity.RARE, mage.cards.a.AvelineDeGrandpre.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Aveline de Grandpre", 220, Rarity.RARE, mage.cards.a.AvelineDeGrandpre.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Aveline de Grandpre", 40, Rarity.RARE, mage.cards.a.AvelineDeGrandpre.class, NON_FULL_USE_VARIOUS));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package mage.abilities.effects.common.search;

import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
import mage.cards.CardsImpl;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetCardInYourGraveyard;

public class SearchLibraryGraveyardPutInHandTargetPlayerEffect extends OneShotEffect {
private FilterCard filter;
private boolean forceToSearchBoth;

public SearchLibraryGraveyardPutInHandTargetPlayerEffect(FilterCard filter) {
this(filter, false);
}

public SearchLibraryGraveyardPutInHandTargetPlayerEffect(FilterCard filter, boolean forceToSearchBoth) {
super(Outcome.Benefit);
this.filter = filter;
this.forceToSearchBoth = forceToSearchBoth;
}

protected SearchLibraryGraveyardPutInHandTargetPlayerEffect(final SearchLibraryGraveyardPutInHandTargetPlayerEffect effect) {
super(effect);
this.filter = effect.filter;
this.forceToSearchBoth = effect.forceToSearchBoth;
staticText = "Target player searches their library and" + (forceToSearchBoth ? "" : "/or") +
" graveyard for " + (filter.getMessage().contains(" card") ? "" : "a card named ") +
filter.getMessage() + ", reveals it, and puts it into their hand. " +
(forceToSearchBoth ? "Then shuffle" : "If they search their library this way, they shuffle");
}

@Override
public SearchLibraryGraveyardPutInHandTargetPlayerEffect copy() {
return new SearchLibraryGraveyardPutInHandTargetPlayerEffect(this);
}

@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(getTargetPointer().getFirst(game, source));
MageObject sourceObject = source.getSourceObject(game);
Card cardFound = null;
boolean needShuffle = false;
if (player != null && sourceObject != null) {
if (forceToSearchBoth || player.chooseUse(outcome, "Search your library for a card named " + filter.getMessage() + "?", source, game)) {
TargetCardInLibrary target = new TargetCardInLibrary(0, 1, filter);
target.clearChosen();
if (player.searchLibrary(target, source, game)) {
if (!target.getTargets().isEmpty()) {
cardFound = game.getCard(target.getFirstTarget());
}
}
needShuffle = true;
}

if (cardFound == null && player.chooseUse(outcome, "Search your graveyard for a card named " + filter.getMessage() + "?", source, game)) {
TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(0, 1, filter);
target.clearChosen();
if (player.choose(outcome, player.getGraveyard(), target, source, game)) {
if (!target.getTargets().isEmpty()) {
cardFound = game.getCard(target.getFirstTarget());
}
}
}

if (cardFound != null) {
player.revealCards(sourceObject.getIdName(), new CardsImpl(cardFound), game);
player.moveCards(cardFound, Zone.HAND, source, game);
}

if (needShuffle) {
player.shuffleLibrary(source, game);
}

return true;
}

return false;
}
}
Loading