Core/PacketIO: Fixed building ITEM_DYNAMIC_FIELD_MODIFIERS
Closes #17942
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user