void OnJoin(ICoreServerAPI api, IServerPlayer p) { if (IsPermaDeath(api.WorldManager.SaveGame, @p.PlayerUID)) { p.Disconnect("You've died."); } }
void OnDeath(ICoreServerAPI api, IServerPlayer p) { SetPermaDeath(api.WorldManager.SaveGame, @p.PlayerUID); //Small delay to prevent interfering with server updating api.Event.EnqueueMainThreadTask(() => p.Disconnect("You've died"), ""); api.BroadcastMessageToAllGroups("The life of " + p.ServerData.LastKnownPlayername.ToUpper() + " has been extinguished.", EnumChatType.Notification); }
/// <summary> /// Disconnects the specified server player. /// </summary> /// <param name="serverPlayer">The server player.</param> public void Disconnect(IServerPlayer serverPlayer) { // Ensure the connection is still valid. if (serverPlayer != null && serverPlayer.Connection != null && serverPlayer.Connection.Connected) { serverPlayer.Disconnect(); } if (this.Connections.Contains(serverPlayer)) { this.Connections.Remove(serverPlayer); } }
/// <summary> /// Disconnects everyone from the server. /// </summary> /// <exception cref="System.NotImplementedException">Throws an exception if the player is null</exception> public void DisconnectAll() { // Disconnect every client from the server. foreach (IServerPlayer serverPlayer in this.Connections.AsParallel()) { IServerPlayer player = serverPlayer; if (player != null && player.Connection != null && player.Connection.Connected) { player.Disconnect(); } } this.Connections.Clear(); }
/// <summary> /// Stops the server, shutting down the network connection. /// All IServerPlayer objects will be disconnected. /// </summary> public void Stop() { this.LogMessage("Stopping the network server."); // Loop through each connection in parallel and disconnect them. foreach (IServerPlayer connection in this.Connections.AsParallel()) { // Hold a locally scoped reference to avoid parallel issues. IServerPlayer client = connection; client.Disconnect(); } // If the server socket is still connected, we shut it down. if (this.serverSocket.Connected) { this.serverSocket.Shutdown(SocketShutdown.Both); } this.Status = ServerStatus.Stopped; this.IsEnabled = false; }