diff --git a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs index 80d8a5d..3e6f1b5 100644 --- a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs +++ b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs @@ -365,6 +365,12 @@ namespace MLAPI.MonoBehaviours.Core /// The NetworkingConfiguration to use public void StartServer() { + if (isServer || isClient) + { + Debug.LogWarning("MLAPI: Cannot start server while an instance is already running"); + return; + } + ConnectionConfig cConfig = Init(); if (NetworkConfig.ConnectionApproval) { @@ -389,6 +395,12 @@ namespace MLAPI.MonoBehaviours.Core /// The NetworkingConfiguration to use public void StartClient() { + if (isServer || isClient) + { + Debug.LogWarning("MLAPI: Cannot start client while an instance is already running"); + return; + } + ConnectionConfig cConfig = Init(); HostTopology hostTopology = new HostTopology(cConfig, NetworkConfig.MaxConnections); hostId = NetworkTransport.AddHost(hostTopology, 0, null); @@ -453,6 +465,11 @@ namespace MLAPI.MonoBehaviours.Core /// The NetworkingConfiguration to use public void StartHost() { + if (isServer || isClient) + { + Debug.LogWarning("MLAPI: Cannot start host while an instance is already running"); + return; + } ConnectionConfig cConfig = Init(); if (NetworkConfig.ConnectionApproval) { @@ -502,6 +519,7 @@ namespace MLAPI.MonoBehaviours.Core isListening = false; _isClient = false; _isServer = false; + SpawnManager.DestroyNonSceneObjects(); NetworkTransport.Shutdown(); } diff --git a/MLAPI/NetworkingManagerComponents/Core/SpawnManager.cs b/MLAPI/NetworkingManagerComponents/Core/SpawnManager.cs index 6704ae7..f9de52c 100644 --- a/MLAPI/NetworkingManagerComponents/Core/SpawnManager.cs +++ b/MLAPI/NetworkingManagerComponents/Core/SpawnManager.cs @@ -75,6 +75,15 @@ namespace MLAPI.NetworkingManagerComponents.Core } } + internal static void DestroyNonSceneObjects() + { + foreach (KeyValuePair netObject in spawnedObjects) + { + if (!netObject.Value.sceneObject) + MonoBehaviour.Destroy(netObject.Value.gameObject); + } + } + internal static GameObject SpawnObject(int spawnablePrefabIndex, uint networkId, int ownerId, Vector3 position, Quaternion rotation) { GameObject go = MonoBehaviour.Instantiate(netManager.SpawnablePrefabs[spawnablePrefabIndex]);