From 32448a8556106938ae0293548cdb1f8e7c611d55 Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Mon, 28 Sep 2026 11:30:07 -0500 Subject: [PATCH] fix: taking an object down for one player leaves the other players' load queue alone DestructEntity for one player (ghosting, or a model constructed again for one player) also removed the object from the queue of every player still loading, so a player loading at that moment never got it. Now only the player it was taken down for loses it from their queue; taking an object down for everyone still clears it for all. Co-Authored-By: Claude Opus 5.5 --- dGame/EntityManager.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dGame/EntityManager.cpp b/dGame/EntityManager.cpp index 6dbcd6932..d7c1730a7 100644 --- a/dGame/EntityManager.cpp +++ b/dGame/EntityManager.cpp @@ -452,7 +452,10 @@ void EntityManager::DestructEntity(Entity* entity, const SystemAddress& sysAddr) Game::server->Send(stream, sysAddr, sysAddr == UNASSIGNED_SYSTEM_ADDRESS); + // Players still loading were to get it once loaded: only the ones it was taken down for (all of them, or the one + // player; taking it down for one player, e.g. out of their ghosting range, leaves the others' queue alone) for (auto* player : PlayerManager::GetAllPlayers()) { + if (sysAddr != UNASSIGNED_SYSTEM_ADDRESS && player->GetSystemAddress() != sysAddr) continue; if (!player->GetPlayerReadyForUpdates()) { auto* ghostComponent = player->GetComponent(); if (ghostComponent) ghostComponent->RemoveLimboConstruction(entity->GetObjectID());