public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (MayAbility && !game.AskYesNo(caster, "Discard attached energy?")) { return; } if (!CoinflipConditional.IsOk(game, caster)) { return; } if (Targeting.GetPossibleTargetsFromMode(TargetingMode, game, caster, opponent, caster.ActivePokemonCard, OnlyWithNameLike).All(x => x.AttachedEnergy.Count == 0)) { return; } int cardsDiscarded = 0; while (true) { PokemonCard target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, caster.ActivePokemonCard, string.Empty, OnlyWithNameLike); if (target.AttachedEnergy.Count == 0) { continue; } if (Amount == -1 || target.AttachedEnergy.Count <= Amount) { while (target.AttachedEnergy.Count > 0) { target.DiscardEnergyCard(target.AttachedEnergy[0], game); cardsDiscarded++; } target.AttachedEnergy.Clear(); } else { var message = new PickFromListMessage(target.AttachedEnergy.OfType <Card>().ToList(), Amount); var ids = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message.ToNetworkMessage(game.Id)).Cards; var cards = target.AttachedEnergy.Where(x => ids.Contains(x.Id)).ToList(); foreach (var card in cards) { target.DiscardEnergyCard(card, game); cardsDiscarded++; } } break; } if (targetingMode == TargetingMode.Self || targetingMode == TargetingMode.YourActive || targetingMode == TargetingMode.YourBench || targetingMode == TargetingMode.YourPokemon) { game.LastDiscard = cardsDiscarded; } }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinflipConditional.IsOk(game, caster)) { return; } DamageStopper damageStopper; if (maxDamage > 0) { damageStopper = new DamageStopper((x) => x <= maxDamage) { Amount = amount }; } else { damageStopper = new DamageStopper((x) => true) { Amount = amount }; } damageStopper.LastsUntilDamageTaken = LastsUntilDamage; if (onlyProtectSelf) { pokemonSource.DamageStoppers.Add(damageStopper); } else { game.DamageStoppers.Add(damageStopper); } }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (CoinflipConditional.IsOk(game, caster)) { return; } var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource); target.TemporaryAbilities.Add(new DamageTakenModifier(target) { Modifer = 999999, IsBuff = true }); target.TemporaryAbilities.Add(new PreventStatusEffects(target) { IsBuff = true, PreventBurn = true, PreventConfuse = true, PreventParalyze = true, PreventPoison = true, PreventSleep = true, TurnDuration = TurnDuration }); target.TemporaryAbilities.Add(new EffectPreventer() { TurnDuration = TurnDuration }); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { var target = TargetsOpponent ? opponent : caster; if (!CoinflipConditional.IsOk(game, caster)) { return; } if (amount == -1) { var allCards = new List <Card>(target.Hand); game.LastDiscard = allCards.Count; if (ShuffleIntoDeck) { target.Deck.ShuffleInCards(new List <Card>(target.Hand)); target.Hand.Clear(); target.TriggerDiscardEvent(allCards); } else { target.DiscardCards(allCards); } return; } IDeckFilter[] filters = CardUtil.GetCardFilters(CardType).ToArray(); int minAmount = AllowDiscardLess ? 0 : Amount; GameUtils.DiscardCardsFromHand(target, game, new DiscardCardSettings(minAmount, Amount, filters, ShuffleIntoDeck)); }
public void OnAttachedTo(PokemonCard attachedTo, bool fromHand, GameField game) { if (!CoinflipConditional.IsOk(game, attachedTo.Owner)) { return; } attachedTo.Heal(Amount, game); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinflipConditional.IsOk(game, caster)) { return; } var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, caster.ActivePokemonCard); ApplyEffectTo(target, StatusEffect, game); ApplyEffectTo(target, SecondaryEffect, game); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { var selector = OpponentPicks ? opponent : caster; var other = OpponentPicks ? caster : opponent; if (!CoinflipConditional.IsOk(game, caster)) { return; } PokemonCard target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, selector, other, selector.ActivePokemonCard); target?.Heal(Amount, game); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (CoinflipConditional.IsOk(game, caster)) { return; } var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, caster.ActivePokemonCard); target?.TemporaryAbilities.Add(new RetreatStopper(target, Turns) { IsBuff = true }); }
public override void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinflipConditional.IsOk(game, caster)) { return; } while (CanCast(game, caster, opponent)) { if (!game.AskYesNo(caster, "Return a Pokémon to your hand?")) { break; } PerformBounce(game, caster, opponent); } }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinflipConditional.IsOk(game, caster)) { return; } foreach (PokemonCard card in DeckSearchUtil.SearchDeck(game, caster, new List <IDeckFilter> { new PokemonWithNameOrTypeFilter(Names, EnergyType) { OnlyBasic = addToBench, InvertName = InvertNameSearch } }, Amount)) { caster.Deck.Cards = new Stack <Card>(caster.Deck.Cards.Except(new[] { card })); if (revealCard) { card.RevealToAll(); } if (evolveSource) { game.EvolvePokemon(pokemonSource, card, true); } else if (addToBench) { caster.BenchedPokemon.Add(card); game.SendEventToPlayers(new PokemonAddedToBenchEvent() { Player = caster.Id, Pokemon = card, Index = caster.BenchedPokemon.Count - 1 }); } else { caster.Hand.Add(card); game.SendEventToPlayers(new DrawCardsEvent() { Player = caster.Id, Cards = new List <Card>() { card } }); } } }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { var target = opponents ? opponent : caster; if (IsMay && !game.AskYesNo(target, $"Draw {Amount} Cards?")) { return; } if (!CoinflipConditional.IsOk(game, caster)) { return; } int amount = UseLastDiscardCount ? (int)(game.LastDiscard * ModifierForLastDiscardCount) : Amount; target.DrawCards(amount); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinflipConditional.IsOk(game, caster)) { return; } var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource); var heads = game.FlipCoins(Coins); var damage = heads * Amount; if (applyWeaknessResistance) { damage = DamageCalculator.GetDamageAfterWeaknessAndResistance(damage, pokemonSource, target, null, null); } target.DealDamage(damage, game, pokemonSource, true); }
public virtual void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (TargetingMode == TargetingMode.OpponentActive && opponent.ActivePokemonCard.IsDead()) { return; } string specificTargetName; switch (targetingMode) { case TargetingMode.YourActive: specificTargetName = caster.ActivePokemonCard.Name; break; case TargetingMode.OpponentActive: specificTargetName = opponent.ActivePokemonCard.Name; break; case TargetingMode.Self: specificTargetName = pokemonSource.Name; break; default: specificTargetName = "Pokémon"; break; } if (isMay && !game.AskYesNo(caster, $"Return {specificTargetName} to it's owners hand?")) { return; } if (!CoinflipConditional.IsOk(game, caster)) { return; } PerformBounce(game, caster, opponent); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { var target = targetsOpponent ? opponent : caster; if (!CoinflipConditional.IsOk(game, caster)) { return; } List <Card> cardsToDiscard; if (Amount == -1 || target.Hand.Count <= Amount) { cardsToDiscard = new List <Card>(target.Hand); } else { var random = new Random(); cardsToDiscard = target.Hand.OrderBy(x => random.Next(int.MaxValue)).Take(Amount).ToList(); } if (ShuffleIntoDeck) { target.Deck.ShuffleInCards(cardsToDiscard); foreach (var card in cardsToDiscard) { target.Hand.Remove(card); } target.TriggerDiscardEvent(cardsToDiscard); } else { target.DiscardCards(cardsToDiscard); } }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (IsMay) { if (UseLastYesNoAnswer && !game.LastYesNo) { return; } else if (!game.AskYesNo(caster, "Apply effect?")) { return; } } if (!CoinflipConditional.IsOk(game, caster)) { return; } var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource); target.TemporaryAbilities.Add(new PreventStatusEffects(target) { IsBuff = true, PreventBurn = true, PreventConfuse = true, PreventParalyze = true, PreventPoison = true, PreventSleep = true, TurnDuration = TurnDuration }); target.TemporaryAbilities.Add(new EffectPreventer() { TurnDuration = TurnDuration }); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (Targeting.GetPossibleTargetsFromMode(TargetingMode, game, caster, opponent, pokemonSource).Count == 0) { return; } string yesNoInfo = EnergyToDiscard > 0 ? "Discard energy card?" : "Deal damage to a benched pokemon?"; if (askYesNo && !game.AskYesNo(caster, yesNoInfo)) { return; } if (energyToDiscard > 0) { var choices = pokemonSource.AttachedEnergy .Where(e => EnergyType == EnergyTypes.All || EnergyType == EnergyTypes.None || e.EnergyType == EnergyType) .OfType <Card>() .ToList(); var response = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(new PickFromListMessage(choices, energyToDiscard).ToNetworkMessage(game.Id)); foreach (var id in response.Cards) { var card = game.Cards[id]; pokemonSource.DiscardEnergyCard((EnergyCard)card, game); } } if (!CoinflipConditional.IsOk(game, caster)) { return; } var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, caster.ActivePokemonCard); if (target == null) { return; } int damage; if (DamageModifier != null) { damage = DamageModifier.NewDamage; } else { damage = Amount; } if (ApplyWeaknessResistance) { damage = DamageCalculator.GetDamageAfterWeaknessAndResistance(damage, pokemonSource, target, null, game.FindResistanceModifier()); } else { damage = Amount; } target.DealDamage(damage, game, pokemonSource, true); }