diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-11-03 16:56:58 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-11-03 16:56:58 +0100 |
commit | b34904f4b5e9e2b8aecb09829edfa5578698b632 (patch) | |
tree | 76008b726a032669eaf590d378172c250f4fa7b4 /src | |
parent | 1cd38a56505431cd54ea091977f4236ffe1d79d2 (diff) |
Core/PacketIO: Fixed client crash with heirlooms
Closes #17964
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/CollectionMgr.cpp | 4 |
3 files changed, 5 insertions, 5 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index dce3f2828ad..c32d2086022 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1468,7 +1468,7 @@ void Item::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* { for (std::size_t v = 0; v < values.size(); ++v) { - if (updateType == UPDATETYPE_VALUES ? _dynamicChangesArrayMask[index][v] : values[v]) + if (updateType != UPDATETYPE_VALUES || _dynamicChangesArrayMask[index][v]) { UpdateMask::SetUpdateBit(data->contents() + arrayMaskPos, v); *data << uint32(values[v]); diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 36cc68b3ace..047966d710c 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -815,7 +815,7 @@ void Object::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player data->resize(data->size() + arrayBlockCount * sizeof(UpdateMask::BlockType)); for (std::size_t v = 0; v < values.size(); ++v) { - if (updateType == UPDATETYPE_VALUES ? _dynamicChangesArrayMask[index][v] : values[v]) + if (updateType != UPDATETYPE_VALUES || _dynamicChangesArrayMask[index][v]) { UpdateMask::SetUpdateBit(data->contents() + arrayMaskPos, v); *data << uint32(values[v]); @@ -1411,7 +1411,7 @@ void Object::SetDynamicValue(uint16 index, uint16 offset, uint32 value) if (_dynamicChangesArrayMask[index].size() <= offset) _dynamicChangesArrayMask[index].resize((offset / 32 + 1) * 32); - if (values[offset] != value) + if (values[offset] != value || changeType == UpdateMask::VALUE_AND_SIZE_CHANGED) { values[offset] = value; _dynamicChangesMask[index] = changeType; diff --git a/src/server/game/Entities/Player/CollectionMgr.cpp b/src/server/game/Entities/Player/CollectionMgr.cpp index b8b438ab64f..49973fe95f1 100644 --- a/src/server/game/Entities/Player/CollectionMgr.cpp +++ b/src/server/game/Entities/Player/CollectionMgr.cpp @@ -238,7 +238,7 @@ void CollectionMgr::UpgradeHeirloom(uint32 itemId, uint32 castItem) // Get heirloom offset to update only one part of dynamic field std::vector<uint32> const& fields = player->GetDynamicValues(PLAYER_DYNAMIC_FIELD_HEIRLOOMS); - uint8 offset = uint8(std::find(fields.begin(), fields.end(), itemId) - fields.begin()); + uint16 offset = uint16(std::find(fields.begin(), fields.end(), itemId) - fields.begin()); player->SetDynamicValue(PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, offset, flags); itr->second.flags = flags; @@ -278,7 +278,7 @@ void CollectionMgr::CheckHeirloomUpgrades(Item* item) if (newItemId) { std::vector<uint32> const& fields = player->GetDynamicValues(PLAYER_DYNAMIC_FIELD_HEIRLOOMS); - uint8 offset = uint8(std::find(fields.begin(), fields.end(), itr->first) - fields.begin()); + uint16 offset = uint16(std::find(fields.begin(), fields.end(), itr->first) - fields.begin()); player->SetDynamicValue(PLAYER_DYNAMIC_FIELD_HEIRLOOMS, offset, newItemId); player->SetDynamicValue(PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, offset, 0); |