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;