From 4d4842c9d57a7a1bc0d38f747e77923838dbaede Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 1 Nov 2016 11:45:47 +0100 Subject: Core/PacketIO: Fixed building ITEM_DYNAMIC_FIELD_MODIFIERS Closes #17942 --- src/server/game/Entities/Item/Item.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index af06bf4da8f..dce3f2828ad 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1447,6 +1447,8 @@ void Item::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* std::size_t maskPos = data->wpos(); data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); + using DynamicFieldChangeTypeUT = std::underlying_type::type; + for (uint16 index = 0; index < _dynamicValuesCount; ++index) { std::vector const& values = _dynamicValues[index]; @@ -1456,7 +1458,7 @@ void Item::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* UpdateMask::SetUpdateBit(data->contents() + maskPos, index); std::size_t arrayBlockCount = UpdateMask::GetBlockCount(values.size()); - *data << uint16(UpdateMask::EncodeDynamicFieldChangeType(arrayBlockCount, _dynamicChangesMask[index], updateType)); + *data << DynamicFieldChangeTypeUT(UpdateMask::EncodeDynamicFieldChangeType(arrayBlockCount, _dynamicChangesMask[index], updateType)); if (updateType == UPDATETYPE_VALUES && _dynamicChangesMask[index] == UpdateMask::VALUE_AND_SIZE_CHANGED) *data << uint32(values.size()); @@ -1480,6 +1482,7 @@ void Item::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* // work around stupid item modifier field requirements - push back values mask by sizeof(m) bytes if size was not appended yet if (updateType == UPDATETYPE_VALUES && _dynamicChangesMask[index] != UpdateMask::VALUE_AND_SIZE_CHANGED && _changesMask[ITEM_FIELD_MODIFIERS_MASK]) { + data->put(arrayMaskPos - sizeof(DynamicFieldChangeTypeUT), data->read(arrayMaskPos - sizeof(DynamicFieldChangeTypeUT)) | UpdateMask::VALUE_AND_SIZE_CHANGED); *data << m; arrayMaskPos += sizeof(m); } -- cgit v1.2.3