-- SageItem.lua ---------------------------------------------------------------------------------------------------- local Class = (sage and sage.class and sage.class.Class) or error("Need access to sage.class.Class") local Reforgings = sage.reforge and sage.reforge.Reforgings or error("Need Reforgings") ---------------------------------------------------------------------------------------------------- local Item do local class = Class:NewClass{name="Item"} function class:_Initialize(instance, ...) -- self is class local nArgs = select("#", ...) if nArgs == 1 then local item = select(1, ...) local _, itemLink = GetItemInfo(item) return self:_Initialize(instance, itemLink:match("item:(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%-?%d+):(%-?%d+):(%d+):(%d+)")) elseif nArgs == 10 then local itemId, enchantId, jewelId1, jewelId2, jewelId3, jewelId4, suffixId, uniqueId, linkLevel, reforgeId = ... instance.itemId = itemId instance.enchantId = enchantId instance.jewelId1 = jewelId1 instance.jewelId2 = jewelId2 instance.jewelId3 = jewelId3 instance.jewelId4 = jewelId4 instance.suffixId = suffixId instance.uniqueId = uniqueId instance.linkLevel = linkLevel instance.reforgeId = reforgeId instance.reforgings = Reforgings:New() else error("Could not initialize Item: " .. nArgs .. " " .. tostring(select(1, ...))) end end -- Fetches item stats, acounting for any reforging that has taken place function class:GetItemStats(optTable) local reforging = self.reforgings:Find(self:ItemString()) return reforging and self:GetReforgedItemStats(reforging, optTable) or GetItemStats(self:ItemString(), optTable) end -- Computes stats as if the item were forged with the specified reforging function class:GetReforgedItemStats(reforging, optTable) local stats = GetItemStats(self:ItemString(), optTable) reforging:AdjustStats(stats) return stats end function class:WithoutMods() return self.class:New(self.itemId, "0", -- enchantId "0", "0", "0", "0", -- jewelId1-4 self.suffixId, self.uniqueId, self.linkLevel, "0") -- reforgeId end function class:ItemLink() return select(2, GetItemInfo(self:ItemString())) end function class:ItemString() if not self.itemString then self.itemString = "item" .. ":" .. self.itemId .. ":" .. self.enchantId .. ":" .. self.jewelId1 .. ":" .. self.jewelId2 .. ":" .. self.jewelId3 .. ":" .. self.jewelId4 .. ":" .. self.suffixId .. ":" .. self.uniqueId .. ":" .. self.linkLevel .. ":" .. self.reforgeId end return self.itemString end Item = class end sage.item = sage.item or {} sage.item.Item = Item