Exemple #1
0
        public virtual void InvalidateStrayPlayer(PlayerMobile player)
        {
            if (State == PvPBattleState.Internal || Hidden || player == null || player.Deleted)
            {
                return;
            }

            if (player.InRegion(SpectateRegion))
            {
                if (IsParticipant(player))
                {
                    Eject(player, false);
                }

                if (!IsSpectator(player))
                {
                    AddSpectator(player, false);
                }
            }
            else if (player.InRegion(BattleRegion))
            {
                if (IsParticipant(player))
                {
                    if (IsSpectator(player))
                    {
                        RemoveSpectator(player, false);
                    }

                    Queue.Remove(player);

                    if (DebugMode || player.AccessLevel < AccessLevel.Counselor)
                    {
                        if (player.Flying && !Options.Rules.CanFly)
                        {
                            player.Flying = false;
                        }

                        if (player.Mounted)
                        {
                            var canMount = Options.Rules.CanMount;

                            if (player.Mount is EtherealMount)
                            {
                                canMount = Options.Rules.CanMountEthereal;
                            }

                            if (!canMount)
                            {
                                player.Dismount();
                            }
                        }
                    }
                }
                else if (!IsSpectator(player))
                {
                    if ((DebugMode || player.AccessLevel < AccessLevel.Counselor) && SpectateAllowed)
                    {
                        AddSpectator(player, true);
                    }
                    else if (player.AccessLevel < AccessLevel.Counselor)
                    {
                        Eject(player, true);
                    }
                }
            }
        }