diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-11-01 11:45:47 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-11-01 11:45:47 +0100 |
commit | 4d4842c9d57a7a1bc0d38f747e77923838dbaede (patch) | |
tree | d1108917794dff5d92d0710055f3f3bad0738601 /src | |
parent | 79ba0ef3d190cc11a7c9f9baa28ac68921dd2e06 (diff) |
Core/PacketIO: Fixed building ITEM_DYNAMIC_FIELD_MODIFIERS
Closes #17942
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
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<UpdateMask::DynamicFieldChangeType>::type; + for (uint16 index = 0; index < _dynamicValuesCount; ++index) { std::vector<uint32> 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<uint16>(arrayMaskPos - sizeof(DynamicFieldChangeTypeUT)) | UpdateMask::VALUE_AND_SIZE_CHANGED); *data << m; arrayMaskPos += sizeof(m); } |