From f234dd47e0881778f8052b363f299a1b7c906fda Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Fri, 30 Oct 2020 20:42:06 -0400 Subject: [PATCH] [CMR] Implemented Eligeth, Crossroads Augur --- .../mage/cards/e/EligethCrossroadsAugur.java | 86 +++++++++++++++++++ .../src/mage/cards/f/FlamespeakerAdept.java | 2 +- .../src/mage/cards/k/KnowledgeAndPower.java | 2 +- Mage.Sets/src/mage/sets/CommanderLegends.java | 1 + .../effects/keyword/FatesealEffect.java | 2 +- .../main/java/mage/game/events/GameEvent.java | 5 +- .../main/java/mage/players/PlayerImpl.java | 13 ++- 7 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/e/EligethCrossroadsAugur.java diff --git a/Mage.Sets/src/mage/cards/e/EligethCrossroadsAugur.java b/Mage.Sets/src/mage/cards/e/EligethCrossroadsAugur.java new file mode 100644 index 00000000000..37ef12d0252 --- /dev/null +++ b/Mage.Sets/src/mage/cards/e/EligethCrossroadsAugur.java @@ -0,0 +1,86 @@ +package mage.cards.e; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.PartnerAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class EligethCrossroadsAugur extends CardImpl { + + public EligethCrossroadsAugur(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}{U}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.SPHINX); + this.power = new MageInt(5); + this.toughness = new MageInt(6); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // If you would scry a number of cards, draw that many cards instead. + this.addAbility(new SimpleStaticAbility(new EligethCrossroadsAugurReplacementEffect())); + + // Partner + this.addAbility(PartnerAbility.getInstance()); + } + + private EligethCrossroadsAugur(final EligethCrossroadsAugur card) { + super(card); + } + + @Override + public EligethCrossroadsAugur copy() { + return new EligethCrossroadsAugur(this); + } +} + +class EligethCrossroadsAugurReplacementEffect extends ReplacementEffectImpl { + + EligethCrossroadsAugurReplacementEffect() { + super(Duration.WhileOnBattlefield, Outcome.Benefit); + staticText = "If you would scry a number of cards, draw that many cards instead."; + } + + private EligethCrossroadsAugurReplacementEffect(final EligethCrossroadsAugurReplacementEffect effect) { + super(effect); + } + + @Override + public EligethCrossroadsAugurReplacementEffect copy() { + return new EligethCrossroadsAugurReplacementEffect(this); + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.SURVEIL; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return source.isControlledBy(event.getPlayerId()); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + player.drawCards(event.getAmount(), event.getSourceId(), game); + return true; + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/f/FlamespeakerAdept.java b/Mage.Sets/src/mage/cards/f/FlamespeakerAdept.java index 91a974370eb..53ce27461e2 100644 --- a/Mage.Sets/src/mage/cards/f/FlamespeakerAdept.java +++ b/Mage.Sets/src/mage/cards/f/FlamespeakerAdept.java @@ -62,7 +62,7 @@ class ScryTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.SCRY; + return event.getType() == EventType.SCRIED; } @Override diff --git a/Mage.Sets/src/mage/cards/k/KnowledgeAndPower.java b/Mage.Sets/src/mage/cards/k/KnowledgeAndPower.java index 1a78e9ef3fb..31a88dff8af 100644 --- a/Mage.Sets/src/mage/cards/k/KnowledgeAndPower.java +++ b/Mage.Sets/src/mage/cards/k/KnowledgeAndPower.java @@ -58,7 +58,7 @@ class ScryTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.SCRY; + return event.getType() == EventType.SCRIED; } @Override diff --git a/Mage.Sets/src/mage/sets/CommanderLegends.java b/Mage.Sets/src/mage/sets/CommanderLegends.java index fdc397b7112..5d8e50cf737 100644 --- a/Mage.Sets/src/mage/sets/CommanderLegends.java +++ b/Mage.Sets/src/mage/sets/CommanderLegends.java @@ -54,6 +54,7 @@ public final class CommanderLegends extends ExpansionSet { cards.add(new SetCardInfo("Demonic Lore", 118, Rarity.UNCOMMON, mage.cards.d.DemonicLore.class)); cards.add(new SetCardInfo("Doomed Traveler", 19, Rarity.COMMON, mage.cards.d.DoomedTraveler.class)); cards.add(new SetCardInfo("Dragon Mantle", 174, Rarity.COMMON, mage.cards.d.DragonMantle.class)); + cards.add(new SetCardInfo("Eligeth, Crossroads Augur", 66, Rarity.RARE, mage.cards.e.EligethCrossroadsAugur.class)); cards.add(new SetCardInfo("Emberwilde Captain", 175, Rarity.RARE, mage.cards.e.EmberwildeCaptain.class)); cards.add(new SetCardInfo("Entourage of Trest", 224, Rarity.COMMON, mage.cards.e.EntourageOfTrest.class)); cards.add(new SetCardInfo("Exquisite Huntmaster", 122, Rarity.COMMON, mage.cards.e.ExquisiteHuntmaster.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/FatesealEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/FatesealEffect.java index f32586c5779..de8cf909944 100644 --- a/Mage/src/main/java/mage/abilities/effects/keyword/FatesealEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/keyword/FatesealEffect.java @@ -76,7 +76,7 @@ public class FatesealEffect extends OneShotEffect { } // move cards to the top of the library controller.putCardsOnTopOfLibrary(cards, game, source, true); - game.fireEvent(new GameEvent(GameEvent.EventType.FATESEAL, opponent.getId(), source.getSourceId(), source.getControllerId())); + game.fireEvent(new GameEvent(GameEvent.EventType.FATESEALED, opponent.getId(), source.getSourceId(), source.getControllerId())); controller.setTopCardRevealed(revealed); return true; } diff --git a/Mage/src/main/java/mage/game/events/GameEvent.java b/Mage/src/main/java/mage/game/events/GameEvent.java index eb1d8d01e93..158da6ffada 100644 --- a/Mage/src/main/java/mage/game/events/GameEvent.java +++ b/Mage/src/main/java/mage/game/events/GameEvent.java @@ -250,7 +250,10 @@ public class GameEvent implements Serializable { SHUFFLE_LIBRARY, LIBRARY_SHUFFLED, ENCHANT_PLAYER, ENCHANTED_PLAYER, CAN_TAKE_MULLIGAN, - FLIP_COIN, COIN_FLIPPED, SCRY, SURVEIL, SURVEILED, FATESEAL, + SCRY, SCRIED, + SURVEIL, SURVEILED, + FATESEALED, + FLIP_COIN, COIN_FLIPPED, ROLL_DICE, DICE_ROLLED, ROLL_PLANAR_DIE, PLANAR_DIE_ROLLED, PLANESWALK, PLANESWALKED, diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 7dfb63bb83e..35eb507da3b 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -4528,9 +4528,14 @@ public abstract class PlayerImpl implements Player, Serializable { @Override public boolean scry(int value, Ability source, Game game) { - game.informPlayers(getLogName() + " scries " + value); + GameEvent event = new GameEvent(EventType.SCRY, getId(), source == null + ? null : source.getSourceId(), getId(), value, true); + if (game.replaceEvent(event)) { + return false; + } + game.informPlayers(getLogName() + " scries " + event.getAmount()); Cards cards = new CardsImpl(); - cards.addAll(getLibrary().getTopCards(game, value)); + cards.addAll(getLibrary().getTopCards(game, event.getAmount())); if (!cards.isEmpty()) { TargetCard target = new TargetCard(0, cards.size(), Zone.LIBRARY, new FilterCard("card" + (cards.size() == 1 ? "" : "s") @@ -4540,8 +4545,8 @@ public abstract class PlayerImpl implements Player, Serializable { cards.removeAll(target.getTargets()); putCardsOnTopOfLibrary(cards, game, source, true); } - game.fireEvent(new GameEvent(GameEvent.EventType.SCRY, getId(), source == null - ? null : source.getSourceId(), getId(), value, true)); + game.fireEvent(new GameEvent(GameEvent.EventType.SCRIED, getId(), source == null + ? null : source.getSourceId(), getId(), event.getAmount(), true)); return true; }