private void OnCheckValid(ValidateAuthTicketResponse_t callback, ref bool isValid)
        {
            var pendingPlayer = Provider.pending.FirstOrDefault(c => c.playerID.steamID.Equals(callback.m_SteamID));

            if (pendingPlayer == null)
            {
                return;
            }

            PreConnectUnturnedPlayer      player = new PreConnectUnturnedPlayer(container, pendingPlayer, playerManager);
            UnturnedPlayerPreConnectEvent @event = new UnturnedPlayerPreConnectEvent(player, callback);

            eventManager.Emit(this, @event);

            if (@event.UnturnedRejectionReason != null)
            {
                Provider.reject(callback.m_SteamID, @event.UnturnedRejectionReason.Value);
                isValid = false;
                return;
            }

            if (@event.IsCancelled)
            {
                Provider.reject(callback.m_SteamID, ESteamRejection.PLUGIN);
                isValid = false;
                return;
            }

            isValid = true;
        }
Beispiel #2
0
        public void HandleEvent(IEventEmitter emitter, UnturnedPlayerPreConnectEvent @event)
        {
            var player = @event.Player as UnturnedPlayer;

            if (player == null)
            {
                return;
            }

            if (!ConfigurationInstance.ReservedSlotEnable || ConfigurationInstance.ReservedSlotCount <= 0 ||
                ConfigurationInstance.Groups == null || ConfigurationInstance.Groups.Length <= 0)
            {
                return;
            }

            int  numPlayers = Provider.clients.Count;
            byte maxPlayers = Provider.maxPlayers;

            var playerManager = Container.Resolve <IPlayerManager>();

            // Run slot fill calculations, if it is enabled.
            if (ConfigurationInstance.AllowFill)
            {
                foreach (var onlinePlayer in playerManager.OnlinePlayers)
                {
                    if (CheckReserved((UnturnedPlayer)onlinePlayer))
                    {
                        numPlayers--;
                    }
                }
            }

            // Check to see if dynamic slots are enabled, and adjust the max slot count on the server if they are.
            if ((!ConfigurationInstance.AllowDynamicMaxSlot && numPlayers + ConfigurationInstance.ReservedSlotCount >= maxPlayers) || (ConfigurationInstance.AllowDynamicMaxSlot && numPlayers + ConfigurationInstance.ReservedSlotCount >= ConfigurationInstance.MaxSlotCount))
            {
                // Kick if they aren't a reserved player.
                if (!CheckReserved(player))
                {
                    @event.IsCancelled             = true;
                    @event.UnturnedRejectionReason = ESteamRejection.SERVER_FULL;
                }
            }
        }