public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (caster.BenchedPokemon.Count == GameField.BenchMaxSize && opponent.BenchedPokemon.Count == GameField.BenchMaxSize) { caster.DrawCards(2); return; } var message = new YesNoMessage() { Message = "Do you accept the challenge?" }.ToNetworkMessage(caster.Id); if (!opponent.NetworkPlayer.SendAndWaitForResponse <YesNoMessage>(message).AnsweredYes) { caster.DrawCards(2); return; } var casterResponse = DeckSearchUtil.SearchDeck(game, caster, CardUtil.GetCardFilters(CardType.BasicPokemon), GameField.BenchMaxSize - caster.BenchedPokemon.Count); var opponentResponse = DeckSearchUtil.SearchDeck(game, opponent, CardUtil.GetCardFilters(CardType.BasicPokemon), GameField.BenchMaxSize - opponent.BenchedPokemon.Count); foreach (var pokemon in casterResponse.OfType <PokemonCard>()) { caster.BenchedPokemon.Add(pokemon); } foreach (var pokemon in opponentResponse.OfType <PokemonCard>()) { opponent.BenchedPokemon.Add(pokemon); } caster.Deck.Shuffle(); opponent.Deck.Shuffle(); }
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 Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { var filters = CardUtil.GetCardFilters(CardType); var searchMessage = new DeckSearchMessage(opponent.Hand, filters, Amount); var response = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(searchMessage.ToNetworkMessage(game.Id)); foreach (var id in response.Cards) { var card = game.Cards[id]; if (shuffleIntoDeck) { opponent.Hand.Remove(card); opponent.Deck.ShuffleInCard(card); game.SendEventToPlayers(new CardsDiscardedEvent() { Cards = new List <Card> { card }, Player = opponent.Id }); } else { opponent.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 choices = caster.Deck.Cards.Take(AmountToPickFrom).ToList(); var message = new DeckSearchMessage(choices, CardUtil.GetCardFilters(CardType, EnergyType), AmountToPick); var response = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message.ToNetworkMessage(game.Id)); var cards = new HashSet <Card>(response.Cards.Select(id => game.Cards[id])); var discardedCards = new List <Card>(); var cardsDrawn = new List <Card>(); foreach (var card in choices) { if (cards.Contains(card)) { if (revealPickedCards) { card.RevealToAll(); } cardsDrawn.Add(card); } else if (ShuffleBack) { caster.Deck.Cards.Push(card); } else { card.RevealToAll(); discardedCards.Add(card); } } if (shuffleBack) { caster.Deck.Shuffle(); } caster.DrawCardsFromDeck(cardsDrawn); caster.DiscardPile.AddRange(discardedCards); game.SendEventToPlayers(new CardsDiscardedEvent() { Cards = discardedCards, Player = caster.Id }); }
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 Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource) { if (!CoinFlipConditional.IsOk(game, caster)) { return; } var filter = CardUtil.GetCardFilters(CardType, EnergyType).ToList(); int amount = useLastDiscardCount ? game.LastDiscard : Amount; foreach (var card in DeckSearchUtil.SearchDeck(game, caster, filter, amount)) { if (revealCard) { card.RevealToAll(); } switch (result) { case SearchDeckResult.PutInHand: caster.DrawCardsFromDeck(new List <Card> { card }); break; case SearchDeckResult.PutInDiscard: { caster.Deck.Cards.Except(new[] { card }); caster.DiscardPile.Add(card); caster.TriggerDiscardEvent(new List <Card>() { card }); } break; case SearchDeckResult.PutOnBench: { caster.Deck.Cards.Except(new[] { card }); int benchIndex = caster.BenchedPokemon.GetNextFreeIndex(); caster.BenchedPokemon.Add((PokemonCard)card); game.SendEventToPlayers(new PokemonAddedToBenchEvent() { Player = caster.Id, Pokemon = (PokemonCard)card, Index = benchIndex }); } break; case SearchDeckResult.AttachToTarget: { caster.Deck.Cards.Except(new[] { card }); var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource); target.AttachEnergy((EnergyCard)card, game); } break; default: break; } } caster.Deck.Shuffle(); }