From 90a5551cc242ba175c83a515f24b40f387d7a14a Mon Sep 17 00:00:00 2001 From: Lordron Date: Fri, 13 Jan 2023 14:29:19 -0600 Subject: [PATCH] [Core/PacketIO] Use ByteBuffer from UpdateData instead of copying to it after --- src/game/WorldHandlers/UpdateData.cpp | 11 ++++++++--- src/game/WorldHandlers/UpdateData.h | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/game/WorldHandlers/UpdateData.cpp b/src/game/WorldHandlers/UpdateData.cpp index 14d9ba72f..4afc5e861 100644 --- a/src/game/WorldHandlers/UpdateData.cpp +++ b/src/game/WorldHandlers/UpdateData.cpp @@ -102,14 +102,19 @@ void UpdateData::Compress(void* dst, uint32* dst_size, void* src, int src_size) *dst_size = c_stream.total_out; } -bool UpdateData::BuildPacket(WorldPacket* packet) +bool UpdateData::BuildPacket(WorldPacket* packet, bool hasTransport) { MANGOS_ASSERT(packet->empty()); // shouldn't happen +#if defined(CLASSIC) || defined(TBC) + ByteBuffer buf(4 + 1 + (m_outOfRangeGUIDs.empty() ? 0 : 1 + 4 + 9 * m_outOfRangeGUIDs.size()) + m_data.wpos()); +#else ByteBuffer buf(4 + (m_outOfRangeGUIDs.empty() ? 0 : 1 + 4 + 9 * m_outOfRangeGUIDs.size()) + m_data.wpos()); - +#endif buf << (uint32)(!m_outOfRangeGUIDs.empty() ? m_blockCount + 1 : m_blockCount); - +#if defined(CLASSIC) || defined(TBC) + buf << (uint8)(hasTransport ? 1 : 0); +#endif if (!m_outOfRangeGUIDs.empty()) { buf << (uint8) UPDATETYPE_OUT_OF_RANGE_OBJECTS; diff --git a/src/game/WorldHandlers/UpdateData.h b/src/game/WorldHandlers/UpdateData.h index 0fedc27cb..099d5358d 100644 --- a/src/game/WorldHandlers/UpdateData.h +++ b/src/game/WorldHandlers/UpdateData.h @@ -64,7 +64,7 @@ class UpdateData void AddOutOfRangeGUID(ObjectGuid const& guid); void AddUpdateBlock() { ++m_blockCount; } ByteBuffer& GetBuffer() { return m_data; } - bool BuildPacket(WorldPacket* packet); + bool BuildPacket(WorldPacket* packet, bool hasTransport = false); bool HasData() { return m_blockCount > 0 || !m_outOfRangeGUIDs.empty(); } void Clear();