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; }
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; } } }