From f63a9a6bea706a83e089106a08b11e78b87bc163 Mon Sep 17 00:00:00 2001 From: David Markowitz <39972741+EmosewaMC@users.noreply.github.com> Date: Tue, 24 Jun 2025 20:03:13 -0700 Subject: [PATCH] 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 --- dGame/EntityManager.cpp | 13 ++++++++----- dGame/EntityManager.h | 4 ++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/dGame/EntityManager.cpp b/dGame/EntityManager.cpp index 4fb754d8..0d2c840c 100644 --- a/dGame/EntityManager.cpp +++ b/dGame/EntityManager.cpp @@ -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) { @@ -417,7 +417,7 @@ void EntityManager::DestructEntity(Entity* entity, const SystemAddress& sysAddr) void EntityManager::SerializeEntity(Entity* entity) { if (!entity) return; - + EntityManager::SerializeEntity(*entity); } @@ -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(); @@ -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()); } } } diff --git a/dGame/EntityManager.h b/dGame/EntityManager.h index 5d22280f..a0c0d186 100644 --- a/dGame/EntityManager.h +++ b/dGame/EntityManager.h @@ -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;