From d64c3393dbeb159d91b6daae979f3e708c5f6169 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 11 Apr 2018 21:07:39 +0200 Subject: Core/Items: Fixed saving and equipping sets with empty slots --- src/server/game/Handlers/CharacterHandler.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 61bf3850972..673ced13f10 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1625,16 +1625,20 @@ void WorldSession::HandleEquipmentSetSave(WorldPackets::EquipmentSet::SaveEquipm saveEquipmentSet.Set.Appearances[i] = 0; ObjectGuid const& itemGuid = saveEquipmentSet.Set.Pieces[i]; + if (!itemGuid.IsEmpty()) + { + Item* item = _player->GetItemByPos(INVENTORY_SLOT_BAG_0, i); - Item* item = _player->GetItemByPos(INVENTORY_SLOT_BAG_0, i); - - /// cheating check 1 (item equipped but sent empty guid) - if (!item && !itemGuid.IsEmpty()) - return; + /// cheating check 1 (item equipped but sent empty guid) + if (!item) + return; - /// cheating check 2 (sent guid does not match equipped item) - if (item && item->GetGUID() != itemGuid) - return; + /// cheating check 2 (sent guid does not match equipped item) + if (item->GetGUID() != itemGuid) + return; + } + else + saveEquipmentSet.Set.IgnoreMask |= 1 << i; } else { @@ -1649,6 +1653,8 @@ void WorldSession::HandleEquipmentSetSave(WorldPackets::EquipmentSet::SaveEquipm if (!hasAppearance) return; } + else + saveEquipmentSet.Set.IgnoreMask |= 1 << i; } } else @@ -1703,7 +1709,7 @@ void WorldSession::HandleDeleteEquipmentSet(WorldPackets::EquipmentSet::DeleteEq void WorldSession::HandleUseEquipmentSet(WorldPackets::EquipmentSet::UseEquipmentSet& useEquipmentSet) { ObjectGuid ignoredItemGuid; - ignoredItemGuid.SetRawValue(0, 1); + ignoredItemGuid.SetRawValue(0x0C00040000000000, 0xFFFFFFFFFFFFFFFF); for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i) { -- cgit v1.2.3