Skip to content

Commit f1bb0f4

Browse files
committed
fix(spawning): Fixed ownership indexing for server instances
1 parent 25ff6bb commit f1bb0f4

File tree

3 files changed

+27
-23
lines changed

3 files changed

+27
-23
lines changed

MLAPI/MonoBehaviours/Core/NetworkedObject.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ internal set
5454
_ownerClientId = value;
5555
}
5656
}
57-
private ulong? _ownerClientId = null;
57+
58+
internal ulong? _ownerClientId = null;
5859

5960
/// <summary>
6061
/// InstanceId is the id that is unique to the object and scene for a scene object when UsePrefabSync is false.
@@ -236,7 +237,7 @@ public void Spawn(Stream spawnPayload = null, bool destroyWithScene = false)
236237
if (spawnPayload != null)
237238
spawnPayload.Position = 0;
238239

239-
SpawnManager.SpawnNetworkedObjectLocally(this, SpawnManager.GetNetworkObjectId(), false, false, NetworkingManager.Singleton.ServerClientId, spawnPayload, spawnPayload != null, spawnPayload == null ? 0 : (int)spawnPayload.Length, false, destroyWithScene);
240+
SpawnManager.SpawnNetworkedObjectLocally(this, SpawnManager.GetNetworkObjectId(), false, false, null, spawnPayload, spawnPayload != null, spawnPayload == null ? 0 : (int)spawnPayload.Length, false, destroyWithScene);
240241

241242
for (int i = 0; i < NetworkingManager.Singleton.ConnectedClientsList.Count; i++)
242243
{

MLAPI/NetworkingManagerComponents/Core/NetworkSceneManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ private static void OnSceneUnloadServer(Guid switchSceneGuid)
198198
{
199199
if (networkedObjects[i].IsSceneObject == null)
200200
{
201-
SpawnManager.SpawnNetworkedObjectLocally(networkedObjects[i], SpawnManager.GetNetworkObjectId(), true, false, NetworkingManager.Singleton.ServerClientId, null, false, 0, false, true);
201+
SpawnManager.SpawnNetworkedObjectLocally(networkedObjects[i], SpawnManager.GetNetworkObjectId(), true, false, null, null, false, 0, false, true);
202202

203203
newSceneObjects.Add(networkedObjects[i]);
204204
}

MLAPI/NetworkingManagerComponents/Core/SpawnManager.cs

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ internal static NetworkedObject CreateLocalNetworkedObject(bool softCreate, ulon
255255
}
256256

257257
// Ran on both server and client
258-
internal static void SpawnNetworkedObjectLocally(NetworkedObject netObject, ulong networkId, bool sceneObject, bool playerObject, ulong ownerClientId, Stream dataStream, bool readPayload, int payloadLength, bool readNetworkedVar, bool destroyWithScene)
258+
internal static void SpawnNetworkedObjectLocally(NetworkedObject netObject, ulong networkId, bool sceneObject, bool playerObject, ulong? ownerClientId, Stream dataStream, bool readPayload, int payloadLength, bool readNetworkedVar, bool destroyWithScene)
259259
{
260260
if (netObject == null)
261261
{
@@ -279,34 +279,37 @@ internal static void SpawnNetworkedObjectLocally(NetworkedObject netObject, ulon
279279

280280
netObject.DestroyWithScene = sceneObject || destroyWithScene;
281281

282-
netObject.OwnerClientId = ownerClientId;
282+
netObject._ownerClientId = ownerClientId;
283283
netObject.IsPlayerObject = playerObject;
284284

285285
SpawnedObjects.Add(netObject.NetworkId, netObject);
286286
SpawnedObjectsList.Add(netObject);
287287

288-
if (NetworkingManager.Singleton.IsServer)
288+
if (ownerClientId != null)
289289
{
290-
if (playerObject)
290+
if (NetworkingManager.Singleton.IsServer)
291291
{
292-
NetworkingManager.Singleton.ConnectedClients[ownerClientId].PlayerObject = netObject;
293-
}
294-
else
295-
{
296-
NetworkingManager.Singleton.ConnectedClients[ownerClientId].OwnedObjects.Add(netObject);
297-
}
298-
299-
for (int i = 0; i < NetworkingManager.Singleton.ConnectedClientsList.Count; i++)
300-
{
301-
if (netObject.CheckObjectVisibility == null || netObject.CheckObjectVisibility(NetworkingManager.Singleton.ConnectedClientsList[i].ClientId))
292+
if (playerObject)
293+
{
294+
NetworkingManager.Singleton.ConnectedClients[ownerClientId.Value].PlayerObject = netObject;
295+
}
296+
else
302297
{
303-
netObject.observers.Add(NetworkingManager.Singleton.ConnectedClientsList[i].ClientId);
298+
NetworkingManager.Singleton.ConnectedClients[ownerClientId.Value].OwnedObjects.Add(netObject);
299+
}
300+
301+
for (int i = 0; i < NetworkingManager.Singleton.ConnectedClientsList.Count; i++)
302+
{
303+
if (netObject.CheckObjectVisibility == null || netObject.CheckObjectVisibility(NetworkingManager.Singleton.ConnectedClientsList[i].ClientId))
304+
{
305+
netObject.observers.Add(NetworkingManager.Singleton.ConnectedClientsList[i].ClientId);
306+
}
304307
}
305308
}
306-
}
307-
else if (playerObject && ownerClientId == NetworkingManager.Singleton.LocalClientId)
308-
{
309-
NetworkingManager.Singleton.ConnectedClients[ownerClientId].PlayerObject = netObject;
309+
else if (playerObject && ownerClientId.Value == NetworkingManager.Singleton.LocalClientId)
310+
{
311+
NetworkingManager.Singleton.ConnectedClients[ownerClientId.Value].PlayerObject = netObject;
312+
}
310313
}
311314

312315
if (readPayload)
@@ -467,7 +470,7 @@ internal static void ServerSpawnSceneObjectsOnStartSweep()
467470
{
468471
if (networkedObjects[i].IsSceneObject == null)
469472
{
470-
SpawnNetworkedObjectLocally(networkedObjects[i], GetNetworkObjectId(), true, false, NetworkingManager.Singleton.ServerClientId, null, false, 0, false, true);
473+
SpawnNetworkedObjectLocally(networkedObjects[i], GetNetworkObjectId(), true, false, null, null, false, 0, false, true);
471474
}
472475
}
473476
}

0 commit comments

Comments
 (0)