diff --git a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs index 1a20f3e..0c54a5a 100644 --- a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs +++ b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs @@ -71,13 +71,6 @@ namespace MLAPI MessageManager.reverseMessageTypes = new Dictionary(); SpawnManager.spawnedObjects = new Dictionary(); SpawnManager.releasedNetworkObjectIds = new Stack(); - if(NetworkConfig.AllowPassthroughMessages) - { - for (int i = 0; i < NetworkConfig.PassthroughMessageTypes.Count; i++) - { - NetworkConfig.RegisteredPassthroughMessageTypes.Add(MessageManager.messageTypes[NetworkConfig.PassthroughMessageTypes[i]]); - } - } if (NetworkConfig.HandleObjectSpawning) { NetworkedObject[] sceneObjects = FindObjectsOfType(); @@ -119,10 +112,19 @@ namespace MLAPI ushort messageId = 32; for (ushort i = 0; i < NetworkConfig.MessageTypes.Count; i++) { - MessageManager.reverseMessageTypes.Add(messageId, NetworkConfig.MessageTypes[i]); MessageManager.messageTypes.Add(NetworkConfig.MessageTypes[i], messageId); + MessageManager.reverseMessageTypes.Add(messageId, NetworkConfig.MessageTypes[i]); messageId++; } + + if (NetworkConfig.AllowPassthroughMessages) + { + for (int i = 0; i < NetworkConfig.PassthroughMessageTypes.Count; i++) + { + NetworkConfig.RegisteredPassthroughMessageTypes.Add(MessageManager.messageTypes[NetworkConfig.PassthroughMessageTypes[i]]); + } + } + return cConfig; } @@ -373,12 +375,16 @@ namespace MLAPI Debug.LogWarning("MLAPI: Server tried to send a passthrough message for a messageType not registered as passthrough"); return; } - else if(isServer && NetworkConfig.AllowPassthroughMessages && connectedClients.ContainsKey(passthroughTarget)) + else if(isServer && isPassthrough) { + if (!connectedClients.ContainsKey(passthroughTarget)) + { + Debug.LogWarning("MLAPI: Passthrough message was sent with invalid target: " + passthroughTarget + " from client " + clientId); + return; + } uint? netIdTarget = null; if (targeted) netIdTarget = targetNetworkId; - PassthroughSend(passthroughTarget, clientId, messageType, channelId, incommingData, netIdTarget); return; } diff --git a/MLAPI/NetworkingManagerComponents/SpawnManager.cs b/MLAPI/NetworkingManagerComponents/SpawnManager.cs index bcf08a5..4ef1282 100644 --- a/MLAPI/NetworkingManagerComponents/SpawnManager.cs +++ b/MLAPI/NetworkingManagerComponents/SpawnManager.cs @@ -83,7 +83,7 @@ namespace MLAPI.NetworkingManagerComponents internal static void OnDestroyObject(uint networkId, bool destroyGameObject) { - if (!spawnedObjects.ContainsKey(networkId) || !netManager.NetworkConfig.HandleObjectSpawning) + if (!spawnedObjects.ContainsKey(networkId) || (netManager != null && !netManager.NetworkConfig.HandleObjectSpawning)) return; GameObject go = spawnedObjects[networkId].gameObject; if (netManager != null && netManager.isServer) @@ -98,7 +98,7 @@ namespace MLAPI.NetworkingManagerComponents writer.Write(networkId); } //If we are host, send to everyone except ourselves. Otherwise, send to all - if (netManager.isHost) + if (netManager != null && netManager.isHost) netManager.Send("MLAPI_DESTROY_OBJECT", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", stream.GetBuffer(), -1); else netManager.Send("MLAPI_DESTROY_OBJECT", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", stream.GetBuffer());