aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-11-01 11:45:47 +0100
committerShauren <shauren.trinity@gmail.com>2016-11-01 11:45:47 +0100
commit4d4842c9d57a7a1bc0d38f747e77923838dbaede (patch)
treed1108917794dff5d92d0710055f3f3bad0738601 /src
parent79ba0ef3d190cc11a7c9f9baa28ac68921dd2e06 (diff)
Core/PacketIO: Fixed building ITEM_DYNAMIC_FIELD_MODIFIERS
Closes #17942
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Item/Item.cpp5
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);
}