From c6bbfdc7f0c45d085cf3a2e51287e8600bc45334 Mon Sep 17 00:00:00 2001 From: Wojciech Figat Date: Thu, 29 Dec 2022 13:56:25 +0100 Subject: [PATCH] Fixes for networking change in 762f460e2391ba750e61cb3b1fd94cafc95fb681 --- Source/Engine/Networking/NetworkManager.cpp | 2 +- Source/Engine/Networking/NetworkReplicator.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Source/Engine/Networking/NetworkManager.cpp b/Source/Engine/Networking/NetworkManager.cpp index a16d46ea3..3860a91d5 100644 --- a/Source/Engine/Networking/NetworkManager.cpp +++ b/Source/Engine/Networking/NetworkManager.cpp @@ -316,7 +316,6 @@ void NetworkManager::Stop() client->State = NetworkConnectionState::Disconnecting; StateChanged(); - NetworkInternal::NetworkReplicatorClear(); for (int32 i = Clients.Count() - 1; i >= 0; i--) { NetworkClient* client = Clients[i]; @@ -330,6 +329,7 @@ void NetworkManager::Stop() ClientDisconnected(LocalClient); LocalClient->State = NetworkConnectionState::Disconnected; } + NetworkInternal::NetworkReplicatorClear(); StopPeer(); if (LocalClient) { diff --git a/Source/Engine/Networking/NetworkReplicator.cpp b/Source/Engine/Networking/NetworkReplicator.cpp index 0b3202b60..532e148c1 100644 --- a/Source/Engine/Networking/NetworkReplicator.cpp +++ b/Source/Engine/Networking/NetworkReplicator.cpp @@ -735,7 +735,20 @@ void NetworkReplicator::DespawnObject(ScriptingObject* obj) ScopeLock lock(ObjectsLock); const auto it = Objects.Find(obj->GetID()); if (it == Objects.End()) + { + // Special case if we're just spawning this object + for (int32 i = 0; i < SpawnQueue.Count(); i++) + { + auto& item = SpawnQueue[i]; + if (item.Object == obj) + { + SpawnQueue.RemoveAt(i); + DeleteNetworkObject(obj); + break; + } + } return; + } auto& item = it->Item; if (item.Object != obj || !item.Spawned || item.OwnerClientId != NetworkManager::LocalClientId) return;