103 lines
2.7 KiB
Lua
103 lines
2.7 KiB
Lua
function()
|
|
--- @class Item
|
|
--- @field id number
|
|
--- @field name string
|
|
--- @field ilvl number
|
|
--- @field type string
|
|
|
|
--- @field new function
|
|
Item = {
|
|
--- @param self Item
|
|
--- @return Item
|
|
new = function(self)
|
|
local obj = {}
|
|
obj.id = id or -1
|
|
obj.name = name or ""
|
|
obj.ilvl = ilvl or -1
|
|
obj.type = type or ""
|
|
setmetatable(obj, self)
|
|
self.__index = self
|
|
return obj
|
|
end,
|
|
}
|
|
|
|
--- @class ItemSet
|
|
--- @field items Item[]
|
|
|
|
--- @field new function
|
|
--- @field equip function
|
|
ItemSet = {
|
|
--- @param self ItemSet
|
|
--- @return ItemSet
|
|
new = function(self, items)
|
|
local obj = {}
|
|
obj.items = items or {}
|
|
setmetatable(obj, self)
|
|
self.__index = self
|
|
return obj
|
|
end,
|
|
|
|
equip = function(self)
|
|
local equippedItems = getEquippedItems()
|
|
print(#equippedItems .. " items equipped")
|
|
|
|
for itemSlot, eqItem in pairs(equippedItems) do
|
|
local item = self.items[itemSlot]
|
|
|
|
if (eqItem.id ~= item.id and eqItem.ilvl ~= item.ilvl) then
|
|
print("Unequip " .. itemSlot)
|
|
PickupInventoryItem(itemSlot)
|
|
PutItemInBag(22)
|
|
print("Equip " .. item.id)
|
|
EquipItemByName(item.id, itemSlot)
|
|
end
|
|
end
|
|
end
|
|
}
|
|
|
|
--- @return string
|
|
function getItemName(itemLink)
|
|
return select(1, GetItemInfo(itemLink))
|
|
end
|
|
|
|
--- @return number
|
|
function getItemIlvl(itemLink)
|
|
return select(4, GetItemInfo(itemLink))
|
|
end
|
|
|
|
--- @return string
|
|
function getItemType(itemLink)
|
|
return select(9, GetItemInfo(itemLink))
|
|
end
|
|
|
|
--- @return Item[]
|
|
function getEquippedItems()
|
|
--- @type Item[]
|
|
local items = {}
|
|
|
|
for i = 1, 19 do
|
|
--- @type Item
|
|
local item = Item:new()
|
|
--- @type string
|
|
local eqItemLink = GetInventoryItemLink("player", i)
|
|
--- @type number
|
|
local eqItemId = GetInventoryItemID("player", i)
|
|
|
|
if (eqItemLink ~= nil) then
|
|
item.name = getItemName(eqItemLink)
|
|
item.ilvl = getItemIlvl(eqItemLink)
|
|
item.type = getItemType(eqItemLink)
|
|
item.id = eqItemId
|
|
|
|
items[i] = item
|
|
end
|
|
end
|
|
|
|
return items
|
|
end
|
|
|
|
--- @type ItemSet
|
|
local set = ItemSet:new(getEquippedItems())
|
|
set:equip()
|
|
end
|