fix: don't construct zone control twice on player loadin (#1828)

checked that the logs no longer have an error about zone control mis matched pointers

Update EntityManager.cpp
This commit is contained in:
David Markowitz 2025-06-24 20:03:13 -07:00 committed by GitHub
parent f0f98a6108
commit f63a9a6bea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 7 deletions

View File

@ -394,7 +394,7 @@ void EntityManager::ConstructAllEntities(const SystemAddress& sysAddr) {
}
}
UpdateGhosting(PlayerManager::GetPlayer(sysAddr));
UpdateGhosting(PlayerManager::GetPlayer(sysAddr), true);
}
void EntityManager::DestructEntity(Entity* entity, const SystemAddress& sysAddr) {
@ -463,7 +463,7 @@ void EntityManager::UpdateGhosting() {
m_PlayersToUpdateGhosting.clear();
}
void EntityManager::UpdateGhosting(Entity* player) {
void EntityManager::UpdateGhosting(Entity* player, const bool constructAll) {
if (!player) return;
auto* missionComponent = player->GetComponent<MissionComponent>();
@ -511,9 +511,12 @@ void EntityManager::UpdateGhosting(Entity* player) {
ghostComponent->ObserveEntity(id);
ConstructEntity(entity, player->GetSystemAddress());
entity->SetObservers(entity->GetObservers() + 1);
// TODO: figure out if zone control should be ghosted at all
if (constructAll && entity->GetObjectID() == GetZoneControlEntity()->GetObjectID()) continue;
ConstructEntity(entity, player->GetSystemAddress());
}
}
}

View File

@ -9,7 +9,7 @@
#include "dCommonVars.h"
class Entity;
class EntityInfo;
struct EntityInfo;
class Player;
class User;
enum class eReplicaComponentType : uint32_t;
@ -54,7 +54,7 @@ public:
void SetGhostDistanceMin(float value);
void QueueGhostUpdate(LWOOBJID playerID);
void UpdateGhosting();
void UpdateGhosting(Entity* player);
void UpdateGhosting(Entity* player, const bool constructAll = false);
void CheckGhosting(Entity* entity);
Entity* GetGhostCandidate(LWOOBJID id) const;
bool GetGhostingEnabled() const;