diff --git a/MLAPI/Data/NetworkPool.cs b/MLAPI/Data/NetworkPool.cs index dee869e..01eb489 100644 --- a/MLAPI/Data/NetworkPool.cs +++ b/MLAPI/Data/NetworkPool.cs @@ -15,7 +15,7 @@ namespace MLAPI.Data for (int i = 0; i < size; i++) { GameObject go = Object.Instantiate(NetworkingManager.singleton.SpawnablePrefabs[prefabIndex], Vector3.zero, Quaternion.identity); - go.GetComponent().IsPooledObject = true; + go.GetComponent().isPooledObject = true; go.GetComponent().PoolId = poolId; go.GetComponent().Spawn(); go.name = "Pool Id: " + poolId + " #" + i; diff --git a/MLAPI/MonoBehaviours/Core/NetworkedObject.cs b/MLAPI/MonoBehaviours/Core/NetworkedObject.cs index caaed7c..d7ba9ee 100644 --- a/MLAPI/MonoBehaviours/Core/NetworkedObject.cs +++ b/MLAPI/MonoBehaviours/Core/NetworkedObject.cs @@ -15,7 +15,7 @@ namespace MLAPI public bool isPlayerObject = false; public bool ServerOnly = false; [HideInInspector] - public bool IsPooledObject = false; + public bool isPooledObject = false; [HideInInspector] public ushort PoolId; public bool isLocalPlayer diff --git a/MLAPI/NetworkingManagerComponents/SpawnManager.cs b/MLAPI/NetworkingManagerComponents/SpawnManager.cs index ca8b3c1..57137c2 100644 --- a/MLAPI/NetworkingManagerComponents/SpawnManager.cs +++ b/MLAPI/NetworkingManagerComponents/SpawnManager.cs @@ -33,6 +33,7 @@ namespace MLAPI.NetworkingManagerComponents internal static void RemoveOwnership(uint netId) { NetworkedObject netObject = SpawnManager.spawnedObjects[netId]; + NetworkingManager.singleton.connectedClients[netObject.OwnerClientId].OwnedObjects.RemoveAll(x => x.NetworkId == netId); netObject.OwnerClientId = -2; using (MemoryStream stream = new MemoryStream(8)) { @@ -48,6 +49,8 @@ namespace MLAPI.NetworkingManagerComponents internal static void ChangeOwnership(uint netId, int clientId) { NetworkedObject netObject = SpawnManager.spawnedObjects[netId]; + NetworkingManager.singleton.connectedClients[netObject.OwnerClientId].OwnedObjects.RemoveAll(x => x.NetworkId == netId); + NetworkingManager.singleton.connectedClients[clientId].OwnedObjects.Add(netObject); netObject.OwnerClientId = clientId; using (MemoryStream stream = new MemoryStream(8)) { @@ -114,6 +117,11 @@ namespace MLAPI.NetworkingManagerComponents { if (!spawnedObjects.ContainsKey(networkId) || (netManager != null && !netManager.NetworkConfig.HandleObjectSpawning)) return; + if (spawnedObjects[networkId].OwnerClientId > -2 && !spawnedObjects[networkId].isPlayerObject) + { + //Someone owns it. + NetworkingManager.singleton.connectedClients[spawnedObjects[networkId].OwnerClientId].OwnedObjects.RemoveAll(x => x.NetworkId == networkId); + } GameObject go = spawnedObjects[networkId].gameObject; if (netManager != null && netManager.isServer) { @@ -170,7 +178,10 @@ namespace MLAPI.NetworkingManagerComponents spawnedObjects.Add(netId, netObject); netObject.isSpawned = true; if (clientOwnerId != null) + { netObject.OwnerClientId = clientOwnerId.Value; + NetworkingManager.singleton.connectedClients[clientOwnerId.Value].OwnedObjects.Add(netObject); + } using (MemoryStream stream = new MemoryStream(13)) { using (BinaryWriter writer = new BinaryWriter(stream))