public void SelectPrizeCard(int amount, GameField game) { if (amount <= 0) { return; } var message = new SelectPrizeCardsMessage(amount).ToNetworkMessage(NetworkId.Generate()); var response = NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message); var cardsDrawn = new List <Card>(); foreach (var cardId in response.Cards) { var card = game.Cards[cardId]; PrizeCards.Remove(card); Hand.Add(card); cardsDrawn.Add(card); } game.SendEventToPlayers(new DrawCardsEvent() { Cards = new List <Card>(cardsDrawn), Player = Id }); }
public void RetreatActivePokemon(PokemonCard replacementPokemon, List <EnergyCard> payedEnergy, GameField game) { var retreatStoppers = GetAllPokemonCards().SelectMany(pokemon => pokemon.TemporaryAbilities.OfType <RetreatStopper>()); if (!ActivePokemonCard.CanReatreat(game) || retreatStoppers.Any()) { return; } foreach (var energyCard in payedEnergy) { ActivePokemonCard.DiscardEnergyCard(energyCard, game); } var oldActivePokemon = ActivePokemonCard; ActivePokemonCard = replacementPokemon; ClearAbilitiesWhenBenched(oldActivePokemon); ActivePokemonCard.DamageStoppers = ActivePokemonCard.DamageStoppers.Where(d => !d.LastsUntilDamageTaken).ToList(); BenchedPokemon.ReplaceWith(replacementPokemon, oldActivePokemon); oldActivePokemon.ClearStatusEffects(); game?.SendEventToPlayers(new PokemonBecameActiveEvent { NewActivePokemonId = replacementPokemon.Id, ReplacedPokemonId = oldActivePokemon.Id }); }
public void SwapActivePokemon(PokemonCard pokemon, GameField game) { BenchedPokemon.ReplaceWith(pokemon, ActivePokemonCard); game?.SendEventToPlayers(new PokemonBecameActiveEvent { NewActivePokemonId = pokemon.Id, ReplacedPokemonId = ActivePokemonCard.Id }); ActivePokemonCard = pokemon; pokemon.RevealToAll(); }
public void ForceRetreatActivePokemon(PokemonCard replacementPokemon, GameField game) { var oldActivePokemon = ActivePokemonCard; ActivePokemonCard = replacementPokemon; BenchedPokemon.ReplaceWith(replacementPokemon, oldActivePokemon); ClearAbilitiesWhenBenched(oldActivePokemon); oldActivePokemon.ClearStatusEffects(); game?.SendEventToPlayers(new PokemonBecameActiveEvent { NewActivePokemonId = replacementPokemon == null ? null : replacementPokemon.Id, ReplacedPokemonId = oldActivePokemon.Id }); }
public void SelectActiveFromBench(GameField game) { game.GetOpponentOf(this).NetworkPlayer?.Send(new InfoMessage("Opponent is selecting a new active Pokémon").ToNetworkMessage(Id)); var message = new SelectFromYourBenchMessage(1).ToNetworkMessage(Id); var response = NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message); var card = (PokemonCard)game.Cards[response.Cards.First()]; game?.SendEventToPlayers(new PokemonBecameActiveEvent { NewActivePokemonId = card.Id }); SetActivePokemon(card); }