diff --git a/dGame/dUtilities/UgcManifest.h b/dGame/dUtilities/UgcManifest.h index 9c561f84c..68fc721cc 100644 --- a/dGame/dUtilities/UgcManifest.h +++ b/dGame/dUtilities/UgcManifest.h @@ -66,7 +66,7 @@ namespace UgcManifest { // clients to served meshes that are due void Update(); - // A client left: its waiting requests are dropped + // A client left (or went back to character select): its waiting requests and pending switches are dropped void OnDisconnect(const SystemAddress& sysAddr); // The UGC server made these models' meshes (again, with a new checksum): each one placed in this world is sent the diff --git a/dWorldServer/WorldServer.cpp b/dWorldServer/WorldServer.cpp index 373a5fd90..62d180c6e 100644 --- a/dWorldServer/WorldServer.cpp +++ b/dWorldServer/WorldServer.cpp @@ -1229,6 +1229,8 @@ namespace { auto user = UserManager::Instance()->GetUser(sysAddr); if (!user || !user->GetLastUsedChar()) return; Game::entityManager->DestroyEntity(user->GetLastUsedChar()->GetEntity()); + // Back at character select on the same connection: forget this client's UGC requests and switches + UgcManifest::OnDisconnect(sysAddr); } //This loops prevents users who aren't authenticated to double-request the char list, which