private void DetachEvents() { TimerRegistry.Close(); Sandbox.Game.MyVisualScriptLogicProvider.PlayerConnected = null; Sandbox.Game.MyVisualScriptLogicProvider.PlayerDropped = null; Sandbox.Game.MyVisualScriptLogicProvider.PlayerDisconnected = null; // servers: listen and dedicated, MP if (ServerCfg != null) { MyAPIGateway.Multiplayer.UnregisterMessageHandler(ConnectionHelper.ConnectionId, MessageHandler); ProtectionHandler.Close(); Logger.Debug("Unregistered MessageHandler"); } if (MyAPIGateway.Utilities != null && MyAPIGateway.Multiplayer != null && MyAPIGateway.Multiplayer.IsServer && MyAPIGateway.Utilities.IsDedicated) { return; } if (MyAPIGateway.Multiplayer != null && MyAPIGateway.Multiplayer.MultiplayerActive || (ServerCfg != null && ServerConfig.ServerIsClient)) { // all clients, including hosts, MP if (PermissionRequestTimer != null) { PermissionRequestTimer.Stop(); PermissionRequestTimer.Close(); } MyAPIGateway.Session.OnSessionReady -= Session_OnSessionReady; Logger.Debug("Detached Session_OnSessionReady"); // only clients, not the host if (ServerCfg == null) { MyAPIGateway.Multiplayer.UnregisterMessageHandler(ConnectionHelper.ConnectionId, MessageHandler); Logger.Debug("Unregistered MessageHandler"); } } if (MyAPIGateway.Utilities != null) { MyAPIGateway.Utilities.MessageEntered -= Utilities_MessageEntered; Logger.Debug("Detached MessageEntered"); } }