Esempio n. 1
0
        private void PlayStadiumCard(TrainerCard trainerCard)
        {
            trainerCard.RevealToAll();
            CurrentTrainerCard = trainerCard;
            TriggerAllAbilitiesOfType(TriggerType.TrainerCardPlayed);

            GameLog.AddMessage(ActivePlayer.NetworkPlayer?.Name + " Plays " + trainerCard.GetName());
            PushGameLogUpdatesToPlayers();

            ActivePlayer.Hand.Remove(trainerCard);

            var trainerEvent = new StadiumCardPlayedEvent()
            {
                Card   = trainerCard,
                Player = ActivePlayer.Id
            };

            SendEventToPlayers(trainerEvent);

            trainerCard.Process(this, ActivePlayer, NonActivePlayer);

            if (StadiumCard != null)
            {
                StadiumCard.Owner.DiscardPile.Add(StadiumCard);
            }

            StadiumCard = trainerCard;

            CurrentTrainerCard = null;

            if (ActivePlayer.IsDead)
            {
                GameLog.AddMessage($"{ActivePlayer.NetworkPlayer?.Name} loses because they drew to many cards");
                EndGame(NonActivePlayer.Id);
            }

            SendEventToPlayers(new GameInfoEvent {
            });
        }
Esempio n. 2
0
        public void PlayTrainerCard(TrainerCard trainerCard, Player asPlayer = null)
        {
            var caster   = asPlayer == null ? ActivePlayer : asPlayer;
            var opponent = GetOpponentOf(caster);

            if (asPlayer == null && !caster.Hand.Contains(trainerCard))
            {
                GameLog.AddMessage($"{ActivePlayer?.NetworkPlayer?.Name} Tried to play a trainer ({trainerCard.Name}) card not in his hand");
                return;
            }

            if (GetAllPassiveAbilities().Any(ability => ability.ModifierType == PassiveModifierType.StopTrainerCast))
            {
                GameLog.AddMessage($"{trainerCard.Name} stopped by ability");
                return;
            }
            else if (!trainerCard.CanCast(this, caster, opponent))
            {
                GameLog.AddMessage($"{trainerCard.Name} could not be cast because something is missing");
                return;
            }

            if (trainerCard.IsStadium())
            {
                PlayStadiumCard(trainerCard);
                return;
            }

            trainerCard.RevealToAll();
            CurrentTrainerCard = trainerCard;

            TriggerAllAbilitiesOfType(TriggerType.TrainerCardPlayed);

            GameLog.AddMessage(caster.NetworkPlayer?.Name + " Plays " + trainerCard.GetName());
            PushGameLogUpdatesToPlayers();

            caster.Hand.Remove(trainerCard);

            var trainerEvent = new TrainerCardPlayed()
            {
                Card   = trainerCard,
                Player = caster.Id
            };

            SendEventToPlayers(trainerEvent);

            trainerCard.Process(this, caster, opponent);

            if (trainerCard.AddToDiscardWhenCasting)
            {
                trainerCard.Owner.DiscardPile.Add(trainerCard);
            }

            CurrentTrainerCard = null;

            if (caster.IsDead)
            {
                GameLog.AddMessage($"{caster.NetworkPlayer?.Name} loses because they drew to many cards");
                EndGame(opponent.Id);
            }

            SendEventToPlayers(new GameInfoEvent {
            });
        }