Core/Items: Fixed saving and equipping sets with empty slots

This commit is contained in:
Shauren
2018-04-11 21:07:39 +02:00
parent 960fdd4ded
commit d64c3393db

View File

@@ -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)
return;
/// cheating check 1 (item equipped but sent empty guid)
if (!item && !itemGuid.IsEmpty())
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)
{