Пример #1
0
        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();
        }
Пример #2
0
        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);
                }
            }
        }
Пример #4
0
        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
                });
            }
        }
Пример #5
0
        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
            });
        }
Пример #6
0
        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);
        }
Пример #7
0
        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();
        }