diff --git a/ElvUI_SLE/modules/characterframe/itemlevel.lua b/ElvUI_SLE/modules/characterframe/itemlevel.lua index 7b18cd8..5f7a6af 100755 --- a/ElvUI_SLE/modules/characterframe/itemlevel.lua +++ b/ElvUI_SLE/modules/characterframe/itemlevel.lua @@ -7,38 +7,39 @@ local ilvlSlots = { "HeadSlot","NeckSlot","ShoulderSlot","BackSlot","ChestSlot","WristSlot","MainHandSlot","SecondaryHandSlot", "HandsSlot","WaistSlot","LegsSlot","FeetSlot","Finger0Slot","Finger1Slot","Trinket0Slot","Trinket1Slot" } -local levelAdjust={ -- 11th item:id field and level adjustment - ["0"]=0,["1"]=8, - ["373"]=4,["374"]=8, - ["375"]=4,["376"]=4,["377"]=4,["379"]=4,["380"]=4, - ["445"]=0,["446"]=4,["447"]=8, - ["451"]=0,["452"]=8, - ["453"]=0,["454"]=4,["455"]=8, - ["456"]=0,["457"]=8, - ["458"]=0,["459"]=4,["460"]=8,["461"]=12,["462"]=16, - ["466"]=4,["467"]=8 +-- From http://www.wowhead.com/items?filter=qu=7;sl=16:18:5:8:11:10:1:23:7:21:2:22:13:24:15:28:14:4:3:19:25:12:17:6:9;minle=1;maxle=1;cr=166;crs=3;crv=0 +local WOW_Heirlooms = { + [80] = { + 44102,42944,44096,42943,42950,48677,42946,42948,42947,42992, + 50255,44103,44107,44095,44098,44097,44105,42951,48683,48685, + 42949,48687,42984,44100,44101,44092,48718,44091,42952,48689, + 44099,42991,42985,48691,44094,44093,42945,48716 + }, } +local actualItemLevel, itemLink function CFO:UpdateItemLevel() local frame = _G["CharacterFrame"] - if not frame:IsShown() then return end - local itemLink, slot, current, maximum, r, g, b + + if not frame:IsShown() then + return + end + for i = 1, #ilvlSlots do frame = _G[("Character%s"):format(ilvlSlots[i])] frame.ItemLevel:SetText() - local avgItemLevel, avgEquipItemLevel, actualItemLevel - avgItemLevel, avgEquipItemLevel = GetAverageItemLevel() - itemlink = GetInventoryItemLink("player",GetInventorySlotInfo(ilvlSlots[i])) - if itemlink then - local _, _, rarity, baseLevel = GetItemInfo(itemlink) - local linkLevel, upgrade = itemlink:match(":(%d+):%d+:(%d+)\124h%[") - if linkLevel and rarity == 7 then - actualItemLevel = (tonumber(linkLevel) == UnitLevel("player")) and avgEquipItemLevel or linkLevel - elseif baseLevel and upgrade and levelAdjust[upgrade] ~= nil then - actualItemLevel = baseLevel + levelAdjust[upgrade] - else - actualItemLevel = baseLevel - end + local avgItemLevel, avgEquipItemLevel = GetAverageItemLevel() + itemLink = GetInventoryItemLink("player",GetInventorySlotInfo(ilvlSlots[i])) + + if itemLink then + local itemLevel = self:GetActualItemLevel(itemLink); + local rarity = select(3,GetItemInfo(itemLink)) + if rarity == 7 then + actualItemLevel = self:Heirloom(itemLink); + else + actualItemLevel = itemLevel + end + if actualItemLevel and actualItemLevel <= avgEquipItemLevel - 10 then frame.ItemLevel:SetFormattedText("|cffff0000%i|r", actualItemLevel) elseif actualItemLevel and actualItemLevel >= avgEquipItemLevel + 10 then @@ -47,6 +48,7 @@ function CFO:UpdateItemLevel() frame.ItemLevel:SetFormattedText("|cffffff99%i|r", actualItemLevel) end end + if not E.db.sle.characterframeoptions.itemlevel.enable then frame.ItemLevel:Hide() else @@ -55,6 +57,56 @@ function CFO:UpdateItemLevel() end end +function CFO:Heirloom(itemLink) + local level = UnitLevel("player") + + if level > 80 then + local _, _, _, _, itemId = string.find(itemLink, "|?c?f?f?(%x*)|?H?([^:]*):?(%d+):?(%d*):?(%d*):?(%d*):?(%d*):?(%d*):?(%-?%d*):?(%-?%d*):?(%d*):?(%d*)|?h?%[?([^%[%]]*)%]?|?h?|?r?"); + itemId = tonumber(itemId); + + for k,iid in pairs(WOW_Heirlooms[80]) do + if iid == itemId then + level = 80; + end + end + + if level > 85 then + level = 85 + end + end + + if level > 80 then + return (( level - 80) * 26.6) + 200; + elseif level > 70 then + return (( level - 70) * 10) + 100; + elseif level > 60 then + return (( level - 60) * 4) + 60; + else + return level; + end +end + +function CFO:GetActualItemLevel(link) + local levelAdjust={ -- 11th item:id field and level adjustment + ["0"]=0,["1"]=8, + ["373"]=4,["374"]=8, + ["375"]=4,["376"]=4,["377"]=4,["379"]=4,["380"]=4, + ["445"]=0,["446"]=4,["447"]=8, + ["451"]=0,["452"]=8, + ["453"]=0,["454"]=4,["455"]=8, + ["456"]=0,["457"]=8, + ["458"]=0,["459"]=4,["460"]=8,["461"]=12,["462"]=16, + ["466"]=4,["467"]=8 + } + local baseLevel = select(4,GetItemInfo(link)) + local upgrade = link:match(":(%d+)\124h%[") + if baseLevel and upgrade and levelAdjust[upgrade] then + return baseLevel + levelAdjust[upgrade] + else + return baseLevel + end +end + function CFO:UpdateItemLevelFont() local frame for i = 1, #ilvlSlots do