Quantcast

Overhaul on ilvl script to some what calculate heirlooms better.

Repooc [05-29-13 - 15:08]
Overhaul on ilvl script to some what calculate heirlooms better.
Filename
ElvUI_SLE/modules/characterframe/itemlevel.lua
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