void WorldSession::HandleEquipmentSetSave(WorldPacket& data) { CHECK_INWORLD_RETURN LOG_DEBUG("Received CMSG_EQUIPMENT_SET_SAVE"); WoWGuid GUID; uint32 setGUID; data >> GUID; setGUID = Arcemu::Util::GUID_LOPART(GUID.GetOldGuid()); if (setGUID == 0) setGUID = objmgr.GenerateEquipmentSetID(); Arcemu::EquipmentSet* set = new Arcemu::EquipmentSet(); set->SetGUID = setGUID; data >> set->SetID; data >> set->SetName; data >> set->IconName; for (uint32 i = EQUIPMENT_SLOT_START; i < EQUIPMENT_SLOT_END; ++i) { GUID.Clear(); data >> GUID; set->ItemGUID[i] = Arcemu::Util::GUID_LOPART(GUID.GetOldGuid()); } bool success; success = _player->GetItemInterface()->m_EquipmentSets.AddEquipmentSet(set->SetGUID, set); if (success) { LOG_DEBUG("Player %u successfully stored equipment set %u at slot %u ", _player->getGuidLow(), set->SetGUID, set->SetID); _player->SendEquipmentSetSaved(set->SetID, set->SetGUID); } else { LOG_DEBUG("Player %u couldn't store equipment set %u at slot %u ", _player->getGuidLow(), set->SetGUID, set->SetID); } }
void WorldSession::HandleEquipmentSetUse(WorldPacket& data) { CHECK_INWORLD_RETURN LOG_DEBUG("Received CMSG_EQUIPMENT_SET_USE"); WoWGuid GUID; int8 SrcBagID; uint8 SrcSlotID; uint8 result = 0; for (int8 i = EQUIPMENT_SLOT_START; i < EQUIPMENT_SLOT_END; ++i) { uint64 ItemGUID = 0; GUID.Clear(); data >> GUID; data >> SrcBagID; data >> SrcSlotID; ItemGUID = GUID.GetOldGuid(); // Let's see if we even have this item auto item = _player->GetItemInterface()->GetItemByGUID(ItemGUID); if (item == nullptr) { // Nope we don't probably WPE hack :/ result = 1; continue; } int8 dstslot = i; int8 dstbag = static_cast<int8>(INVALID_BACKPACK_SLOT); // This is the best case, we already have the item equipped if ((SrcBagID == dstbag) && (SrcSlotID == dstslot)) continue; // Let's see if we have an item in the destination slot auto dstslotitem = _player->GetItemInterface()->GetInventoryItem(dstslot); if (dstslotitem == nullptr) { // we have no item equipped in the slot, so let's equip AddItemResult additemresult; int8 EquipError = _player->GetItemInterface()->CanEquipItemInSlot(dstbag, dstslot, item->getItemProperties(), false, false); if (EquipError == INV_ERR_OK) { dstslotitem = _player->GetItemInterface()->SafeRemoveAndRetreiveItemFromSlot(SrcBagID, SrcSlotID, false); additemresult = _player->GetItemInterface()->SafeAddItem(item, dstbag, dstslot); if (additemresult != ADD_ITEM_RESULT_OK) { // We failed for w/e reason, so let's revert auto check = _player->GetItemInterface()->SafeAddItem(item, SrcBagID, SrcSlotID); if (!check) { LOG_ERROR("HandleEquipmentSetUse", "Error while adding item %u to player %s twice", item->getEntry(), _player->GetNameString()); result = 0; } else result = 1; } } else { result = 1; } } else { // There is something equipped so we need to swap if (!_player->GetItemInterface()->SwapItems(INVALID_BACKPACK_SLOT, dstslot, SrcBagID, SrcSlotID)) result = 1; } } _player->SendEquipmentSetUseResult(result); }