From bb37e5c152963cdc4859ca1ba571c3c53ed98ec3 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Thu, 24 Dec 2020 15:30:36 +0000 Subject: Streamline ClientHandle chunk send a little - Removed RemoveFromAllChunks. On destruction cWorld::RemovePlayer calls RemoveClientFromChunks already, and there's no need to manually clear the chunk lists. --- src/ClientHandle.cpp | 37 ++++--------------------------------- 1 file changed, 4 insertions(+), 33 deletions(-) (limited to 'src/ClientHandle.cpp') diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp index f9b4fd327..916de10c7 100644 --- a/src/ClientHandle.cpp +++ b/src/ClientHandle.cpp @@ -127,7 +127,6 @@ cClientHandle::~cClientHandle() cWorld * World = m_Player->GetWorld(); if (World != nullptr) { - RemoveFromAllChunks(); m_Player->GetWorld()->RemoveClientFromChunkSender(this); } // Send the Offline PlayerList packet: @@ -634,32 +633,6 @@ void cClientHandle::StreamChunk(int a_ChunkX, int a_ChunkZ, cChunkSender::Priori -void cClientHandle::RemoveFromAllChunks() -{ - cWorld * World = m_Player->GetWorld(); - if (World != nullptr) - { - World->RemoveClientFromChunks(this); - } - - { - // Reset all chunk lists: - cCSLock Lock(m_CSChunkLists); - m_LoadedChunks.clear(); - m_ChunksToSend.clear(); - m_SentChunks.clear(); - - // Also reset the LastStreamedChunk coords to bogus coords, - // so that all chunks are streamed in subsequent StreamChunks() call (FS #407) - m_LastStreamedChunkX = 0x7fffffff; - m_LastStreamedChunkZ = 0x7fffffff; - } -} - - - - - void cClientHandle::HandleNPCTrade(int a_SlotNum) { // TODO @@ -2047,16 +2020,14 @@ void cClientHandle::SendData(const char * a_Data, size_t a_Size) void cClientHandle::RemoveFromWorld(void) { // Remove all associated chunks: - decltype(m_LoadedChunks) Chunks; { cCSLock Lock(m_CSChunkLists); - std::swap(Chunks, m_LoadedChunks); + m_LoadedChunks.clear(); m_ChunksToSend.clear(); + m_SentChunks.clear(); } - for (auto && Chunk : Chunks) - { - SendUnloadChunk(Chunk.m_ChunkX, Chunk.m_ChunkZ); - } // for itr - Chunks[] + + // No need to send Unload Chunk packets, the client unloads automatically. // Here, we set last streamed values to bogus ones so everything is resent m_LastStreamedChunkX = 0x7fffffff; -- cgit v1.2.3