From 3d461e59813e0acb0fc82cef141806f976041394 Mon Sep 17 00:00:00 2001 From: Mini Date: Wed, 7 Feb 2007 17:14:50 +0000 Subject: [PATCH] Added support for the UPDATETYPE_VALUES type from update objects. --- src/Client/World/UpdateData.cpp | 29 ++++++++++++++++++++--------- src/Client/World/UpdateMask.h | 1 + 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/Client/World/UpdateData.cpp b/src/Client/World/UpdateData.cpp index e48b417..8f3584c 100644 --- a/src/Client/World/UpdateData.cpp +++ b/src/Client/World/UpdateData.cpp @@ -58,16 +58,27 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket) case UPDATETYPE_VALUES: { - uguid = recvPacket.GetPackedGuid(); // not 100% sure if this is correct - uint8 maskblocks; - recvPacket >> maskblocks; - logdebug("UPDATETYPE_VALUES: guid="I64FMT" maskblocks=%u",uguid,maskblocks); - // need some help with the lines below, got no idea what to do now. - UpdateMask umask; - umask.SetCount(maskblocks*8); // ?? - std::vector udata; - //udata.resize(?) + uint8 blockcount, masksize, valuesCount = 1500; + uint32 value; + uguid = recvPacket.GetPackedGuid(); + recvPacket >> blockcount; + masksize = blockcount * 4; + logdebug("UPDATETYPE_VALUES: guid="I64FMT" blockcount=%u masksize=%d",uguid,blockcount, masksize); + UpdateMask umask; + umask.SetCount(masksize); + uint32 *updateMask = new uint32[100]; + recvPacket.read((uint8*)updateMask, masksize); + umask.SetMask(updateMask); + + for (int i = 0; i < valuesCount; i++) // How do i get valuesCount? + { + if (umask.GetBit(i)) + { + recvPacket >> value; + logdebug("Value (%d): %d", i, value); + } + } } break; diff --git a/src/Client/World/UpdateMask.h b/src/Client/World/UpdateMask.h index cc68163..6fddbba 100644 --- a/src/Client/World/UpdateMask.h +++ b/src/Client/World/UpdateMask.h @@ -53,6 +53,7 @@ class UpdateMask inline uint32 GetLength() { return mBlocks << 2; } inline uint32 GetCount() { return mCount; } inline uint8* GetMask() { return (uint8*)mUpdateMask; } + inline void SetMask(uint32 *updateMask) { mUpdateMask = updateMask; } inline void SetCount (uint32 valuesCount) {