mirror of
				https://github.com/DarkflameUniverse/DarkflameServer.git
				synced 2025-11-04 14:42:02 +00:00 
			
		
		
		
	fix: ghost mis-matched pointer causing objects to not destruct (#1797)
This commit is contained in:
		@@ -320,7 +320,7 @@ const std::unordered_map<std::string, LWOOBJID>& EntityManager::GetSpawnPointEnt
 | 
			
		||||
	return m_SpawnPoints;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EntityManager::ConstructEntity(Entity* entity, const SystemAddress& sysAddr, const bool skipChecks) {
 | 
			
		||||
void EntityManager::ConstructEntity(Entity* entity, const SystemAddress& sysAddr) {
 | 
			
		||||
	if (!entity) {
 | 
			
		||||
		LOG("Attempted to construct null entity");
 | 
			
		||||
		return;
 | 
			
		||||
@@ -363,16 +363,12 @@ void EntityManager::ConstructEntity(Entity* entity, const SystemAddress& sysAddr
 | 
			
		||||
	entity->WriteComponents(stream, eReplicaPacketType::CONSTRUCTION);
 | 
			
		||||
 | 
			
		||||
	if (sysAddr == UNASSIGNED_SYSTEM_ADDRESS) {
 | 
			
		||||
		if (skipChecks) {
 | 
			
		||||
			Game::server->Send(stream, UNASSIGNED_SYSTEM_ADDRESS, true);
 | 
			
		||||
		} else {
 | 
			
		||||
			for (auto* player : PlayerManager::GetAllPlayers()) {
 | 
			
		||||
				if (player->GetPlayerReadyForUpdates()) {
 | 
			
		||||
					Game::server->Send(stream, player->GetSystemAddress(), false);
 | 
			
		||||
				} else {
 | 
			
		||||
					auto* ghostComponent = player->GetComponent<GhostComponent>();
 | 
			
		||||
					if (ghostComponent) ghostComponent->AddLimboConstruction(entity->GetObjectID());
 | 
			
		||||
				}
 | 
			
		||||
		for (auto* player : PlayerManager::GetAllPlayers()) {
 | 
			
		||||
			if (player->GetPlayerReadyForUpdates()) {
 | 
			
		||||
				Game::server->Send(stream, player->GetSystemAddress(), false);
 | 
			
		||||
			} else {
 | 
			
		||||
				auto* ghostComponent = player->GetComponent<GhostComponent>();
 | 
			
		||||
				if (ghostComponent) ghostComponent->AddLimboConstruction(entity->GetObjectID());
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ public:
 | 
			
		||||
	const std::unordered_map<LWOOBJID, Entity*> GetAllEntities() const { return m_Entities; }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	void ConstructEntity(Entity* entity, const SystemAddress& sysAddr = UNASSIGNED_SYSTEM_ADDRESS, bool skipChecks = false);
 | 
			
		||||
	void ConstructEntity(Entity* entity, const SystemAddress& sysAddr = UNASSIGNED_SYSTEM_ADDRESS);
 | 
			
		||||
	void DestructEntity(Entity* entity, const SystemAddress& sysAddr = UNASSIGNED_SYSTEM_ADDRESS);
 | 
			
		||||
	void SerializeEntity(Entity* entity);
 | 
			
		||||
	void SerializeEntity(const Entity& entity);
 | 
			
		||||
 
 | 
			
		||||
@@ -1045,7 +1045,7 @@ void HandlePacket(Packet* packet) {
 | 
			
		||||
 | 
			
		||||
				const auto respawnPoint = player->GetCharacter()->GetRespawnPoint(Game::zoneManager->GetZone()->GetWorldID());
 | 
			
		||||
 | 
			
		||||
				Game::entityManager->ConstructEntity(player, UNASSIGNED_SYSTEM_ADDRESS, true);
 | 
			
		||||
				Game::entityManager->ConstructEntity(player, UNASSIGNED_SYSTEM_ADDRESS);
 | 
			
		||||
 | 
			
		||||
				if (respawnPoint != NiPoint3Constant::ZERO) {
 | 
			
		||||
					GameMessages::SendPlayerReachedRespawnCheckpoint(player, respawnPoint, NiQuaternionConstant::IDENTITY);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user