public static void DiscardCardsFromHand(Player player, GameField game, DiscardCardSettings discardSettings) { var message = new DiscardCardsMessage { MinCount = discardSettings.MinAmount, Count = discardSettings.MaxAmount, Filters = discardSettings.Filters.ToList(), }; var response = player.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message.ToNetworkMessage(player.Id)); if (discardSettings.ShuffleIntoDeck) { var cardsToDiscard = response.Cards.Select(id => player.Hand.First(x => x.Id.Equals(id))).ToList(); player.Deck.ShuffleInCards(cardsToDiscard); game.LastDiscard = cardsToDiscard.Count; foreach (var card in cardsToDiscard) { player.Hand.Remove(card); } player.TriggerDiscardEvent(cardsToDiscard); } else { game.LastDiscard = response.Cards.Count; foreach (var id in response.Cards) { var card = player.Hand.First(x => x.Id.Equals(id)); player.DiscardCard(card); } } }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { var target = opponents ? opponent : caster; if (amount == -1) { game.SendEventToPlayers(new CardsDiscardedEvent() { Cards = new List <Card>(target.Hand), Player = target.Id }); var cards = CardUtil.GetCardsOfType(target.Hand, CardType).ToList(); target.Deck.ShuffleInCards(cards); foreach (var card in cards) { target.Hand.Remove(card); } game.SendEventToPlayers(new CardsDiscardedEvent() { Cards = new List <Card>(cards), Player = target.Id }); } else { var message = new DiscardCardsMessage(Amount, CardUtil.GetCardFilters(CardType)); var choices = target.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message.ToNetworkMessage(game.Id)).Cards; var cards = choices.Select(id => game.Cards[id]).ToList(); foreach (var card in cards) { target.Hand.Remove(card); } target.Deck.ShuffleInCards(cards); game.SendEventToPlayers(new CardsDiscardedEvent() { Cards = new List <Card>(cards), Player = target.Id }); } }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { var discardMessage = new DiscardCardsMessage(1, new List <IDeckFilter> { new Stage2Filter() }) { Info = "Select a stage 2 Pokémon from your hand" }; var responseStage2 = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(discardMessage.ToNetworkMessage(game.Id)); var evolutionCard = (PokemonCard)game.Cards[responseStage2.Cards.First()]; var basicVersionName = PokemonNames.GetBasicVersionOf(evolutionCard.PokemonName); var availableCards = new List <PokemonCard>(); foreach (var pokemon in caster.GetAllPokemonCards().Where(p => p.PokemonName == basicVersionName && p.CanEvolve())) { availableCards.Add(pokemon); } if (availableCards.Count == 1) { game.EvolvePokemon(availableCards[0], evolutionCard, true); return; } var pickTargetResponse = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(new SelectFromYourPokemonMessage() { Info = $"Select a {basicVersionName} Pokémon to evolve", Filter = new PokemonWithNameAndOwner() { Owner = caster.Id, Names = availableCards.Select(x => x.PokemonName).Distinct().ToList() } }.ToNetworkMessage(game.Id)); var selectedCard = (PokemonCard)game.Cards[pickTargetResponse.Cards.First()]; game.EvolvePokemon(selectedCard, evolutionCard, true); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { caster.ForceRetreatActivePokemon(null, game); var message = new DiscardCardsMessage(1, new List <IDeckFilter>() { new BasicPokemonFilter() }) { Info = "Select a new Active Pokémon from your hand" }; var response = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message.ToNetworkMessage(game.Id)); var pokemon = (PokemonCard)game.Cards[response.Cards[0]]; caster.SetActivePokemon(pokemon); game.SendEventToPlayers(new PokemonBecameActiveEvent() { NewActivePokemon = pokemon }); }
public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { var filters = CardUtil.GetCardFilters(CardType.Energy, EnergyType); var energyTypeText = EnergyType == EnergyTypes.All ? "Energy" : Enum.GetName(typeof(EnergyTypes), EnergyType) + "Energy"; var message = new DiscardCardsMessage(Amount, filters) { MinCount = 0, Info = $"Pick up to 2 {energyTypeText} from your hand" }.ToNetworkMessage(game.Id); var response = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message); if (!response.Cards.Any()) { return; } var energyCard = game.Cards[response.Cards.First()]; var pokemon = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource); pokemon.AttachEnergy((EnergyCard)energyCard, game); }
public void DiscardCardsMessage() { var message = new DiscardCardsMessage(2); Assert.NotNull(SerializeAndBack(message)); }