internal static void OnClientLevelLoaded(QNetMessage message, QNetMessageReader reader, ref bool disallowRecycle) { // SERVER: player loads level if (QNetManager.IsHostActive) { if (QNetManager.Client.ConnectionIdentity == reader.Connection.ConnectionIdentity) { // loaded level message has been send from host client, send only WORLD_SERIALIZATION message QNetManager.Server.Send(reader.Connection, QNetLocalChannel.DEFAULT, QNetMessageMethod.ReliableOrdered, QNetUnityLocalHeader.WORLD_SERIALIZATION); return; } } JEMLogger.Log($"Connection {reader.Connection} loads level. Sending world objects."); // send WORLD_SERIALIZING message to prepare client QNetManager.Server.Send(reader.Connection, QNetLocalChannel.DEFAULT, QNetMessageMethod.ReliableOrdered, QNetUnityLocalHeader.WORLD_SERIALIZING); // send all objects to client QNetServerObjects.SendAllObjectsToConnection(reader.Connection); // send WORLD_SERIALIZATION message to start object loading on client QNetManager.Server.Send(reader.Connection, QNetLocalChannel.DEFAULT, QNetMessageMethod.ReliableOrdered, QNetUnityLocalHeader.WORLD_SERIALIZATION); }
/// <summary> /// Tags this player as not ready. /// An actual unloading method. /// </summary> public void TagAsNotReady() { if (!Ready) { throw new InvalidOperationException("Unable to tag player as not ready while is already not ready."); } JEMLogger.Log($"> Tagging player {ToString()} as not ready."); Ready = false; JEMLogger.Log("> (Tagging) De-Initializing player on server side."); // destroy all owned objects QNetServerObjects.DestroyAllOwnedObjectsOfConnection(Connection); JEMLogger.Log($"> Player {ToString()} is now not ready."); }