diff options
author | xinef1 <w.szyszko2@gmail.com> | 2016-12-26 14:25:32 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-12-26 14:25:32 +0100 |
commit | bf7e95bd5703f1690d8d181f39961e2aa6bee085 (patch) | |
tree | 359af1416abf661a01d35c54e68bc7d6a30301b9 /src | |
parent | 7c3961244d83503191881cfd64745781cc1253ab (diff) |
Core/Items: Fixed empty slots handling in equipment manager (#18613)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 19 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 21d1f25bf42..a827ed46edf 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -25455,6 +25455,7 @@ void Player::SendEquipmentSetList() { if (itr->second.state == EQUIPMENT_SET_DELETED) continue; + data.appendPackGUID(itr->second.Guid); data << uint32(itr->first); data << itr->second.Name; @@ -25464,8 +25465,10 @@ void Player::SendEquipmentSetList() // ignored slots stored in IgnoreMask, client wants "1" as raw GUID, so no HighGuid::Item if (itr->second.IgnoreMask & (1 << i)) data.appendPackGUID(uint64(1)); - else + else if (itr->second.Items[i] > 0) // send proper data (do not append 0 with high guid) data << ObjectGuid(HighGuid::Item, 0, itr->second.Items[i]).WriteAsPacked(); + else + data.appendPackGUID(uint64(0)); } ++count; // client have limit but it checked at loading and set diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 46cab0f63ad..1d92f1d2c0b 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1488,6 +1488,13 @@ void WorldSession::HandleEquipmentSetSave(WorldPacket& recvData) ObjectGuid itemGuid; recvData >> itemGuid.ReadAsPacked(); + // if client sends 0, it means empty slot + if (itemGuid.IsEmpty()) + { + eqSet.Items[i] = 0; + continue; + } + // equipment manager sends "1" (as raw GUID) for slots set to "ignore" (don't touch slot at equip set) if (itemGuid.GetRawValue() == 1) { @@ -1496,13 +1503,13 @@ void WorldSession::HandleEquipmentSetSave(WorldPacket& recvData) continue; } + // some cheating checks Item* item = _player->GetItemByPos(INVENTORY_SLOT_BAG_0, i); - - if (!item && itemGuid) // cheating check 1 - return; - - if (item && item->GetGUID() != itemGuid) // cheating check 2 - return; + if (!item || item->GetGUID() != itemGuid) + { + eqSet.Items[i] = 0; + continue; + } eqSet.Items[i] = itemGuid.GetCounter(); } |