diff --git a/ElvUI_SLE/modules/datatexts/itemlevel.lua b/ElvUI_SLE/modules/datatexts/itemlevel.lua new file mode 100644 index 0000000..1d67e6b --- /dev/null +++ b/ElvUI_SLE/modules/datatexts/itemlevel.lua @@ -0,0 +1,263 @@ +local E, L, V, P, G = unpack(ElvUI) +local DT = E:GetModule('DataTexts') + +local displayString = '' +local lastPanel +local floor = floor +local GetInventoryItemLink, GetInventorySlotInfo = GetInventoryItemLink, GetInventorySlotInfo + +local slots = { + [1] = { "HeadSlot", HEADSLOT }, + [2] = { "NeckSlot", NECKSLOT }, + [3] = { "ShoulderSlot", SHOULDERSLOT }, + [4] = { "BackSlot", BACKSLOT }, + [5] = { "ChestSlot", CHESTSLOT }, + [6] = { "WristSlot", WRISTSLOT }, + [7] = { "HandsSlot", HANDSSLOT }, + [8] = { "WaistSlot", WAISTSLOT }, + [9] = { "LegsSlot", LEGSSLOT }, + [10] = { "FeetSlot", FEETSLOT }, + [11] = { "Finger0Slot", FINGER0SLOT_UNIQUE }, + [12] = { "Finger1Slot", FINGER1SLOT_UNIQUE }, + [13] = { "Trinket0Slot", TRINKET0SLOT_UNIQUE }, + [14] = { "Trinket1Slot", TRINKET1SLOT_UNIQUE }, + [15] = { "MainHandSlot", MAINHANDSLOT }, + [16] = { "SecondaryHandSlot", SECONDARYHANDSLOT }, +} + +local levelColors = { + [0] = { 1, 0, 0 }, + [1] = { 0, 1, 0 }, + [2] = { 1, 1, .5 }, +} + +local levelAdjust = { + ["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, + ["465"]=0,["466"]=4,["467"]=8,["468"] = 0,["469"] = 4,["470"] = 8,["471"] = 12,["472"] = 16, + ["491"]=0,["492"]=4,["493"]=8,["494"]=4,["495"]=8,["496"]=8,["497"]=12,["498"]=16 +} + +local heirlooms = { + [80] = { + 42943, --Bloodied Arcanite Reaper + 42944, --Balanced Heartseeker + 42945, --Venerable Dal'Rend's Sacred Charge + 42946, --Charmed Ancient Bone Bow + 42947, --Dignified Headmaster's Charge + 42948, --Devout Aurastone Hammer + 42949, --Polished Spaulders of Valor + 42950, --Champion Herod's Shoulder + 42951, --Mystical Pauldrons of Elements + 42952, --Stained Shadowcraft Spaulders + 42984, --Preened Ironfeather Shoulders + 42985, --Tattered Dreadmist Mantle + 42991, --Swift Hand of Justice + 42992, --Discerning Eye of the Beast + 44091, --Sharpened Scarlet Kris + 44092, --Reforged Truesilver Champion + 44093, --Upgraded Dwarven Hand Cannon + 44094, --The Blessed Hammer of Grace + 44095, --Grand Staff of Jordan + 44096, --Battleworn Thrash Blade + 44097, --Inherited Insignia of the Horde + 44098, --Inherited Insignia of the Alliance + 44099, --Strengthened Stockade Pauldrons + 44100, --Pristine Lightforge Spaulders + 44101, --Prized Beastmaster's Mantle + 44102, --Aged Pauldrons of The Five Thunders + 44103, --Exceptional Stormshroud Shoulders + 44105, --Lasting Feralheart Spaulders + 44107, --Exquisite Sunderseer Mantle + 48677, --Champion's Deathdealer Breastplate + 48683, --Mystical Vest of Elements + 48685, --Polished Breastplate of Valor + 48687, --Preened Ironfeather Breastplate + 48689, --Stained Shadowcraft Tunic + 48691, --Tattered Dreadmist Robe + 48716, --Venerable Mass of McGowan + 48718, --Repurposed Lava Dredger + 50255, --Dread Pirate Ring + 69889, --Burnished Breastplate of Might + 69890, --Burnished Pauldrons of Might + 69893, --Bloodsoaked Skullforge Reaver + 79131, --Burnished Warden Staff + }, + [85] = { + 61931, --Polished Helm of Valor + 61935, --Tarnished Raging Berserker's Helm + 61936, --Mystical Coif of Elements + 61937, --Stained Shadowcraft Cap + 61942, --Preened Tribal War Feathers + 61958, --Tattered Dreadmist Mask + 62023, --Polished Legplates of Valor + 62024, --Tarnished Leggings of Destruction + 62025, --Mystical Kilt of Elements + 62026, --Stained Shadowcraft Pants + 62027, --Preened Wildfeather Leggings + 62029, --Tattered Dreadmist Leggings + 62038, --Worn Stoneskin Gargoyle Cape + 62039, --Inherited Cape of the Black Baron + 62040, --Ancient Bloodmoon Cloak + 69887, --Burnished Helm of Might + 69888, --Burnished Legplates of Might + 69892, --Ripped Sandstorm Cloak + 93841, --Smoothbore Dwarven Hand Cannon + 93843, --Hardened Arcanite Reaper + 93844, --Refinished Warden Staff + 93845, --Gore-Steeped Skullforge Reaver + 93846, --Re-Engineered Lava Dredger + 93847, --Crushing Mass of McGowan + 93848, --Battle-Hardened Thrash Blade + 93849, --Elder Staff of Jordan + 93850, --The Sanctified hammer of Grace + 93851, --Battle-Forged Truesilver Champion + 93852, --Deadly Scarlet Kris + 93853, --Pious Aurastone hammer + 93854, --Scholarly Headmaster's Charge + 93855, --War-Torn Ancient Bone Bow + 93856, --Noble Dal'Rend's Sacred Charge + 93857, --Vengeful Heartseeker + 93859, --Bloodstained Dreadmist Mantle + 93860, --Bloodstained Dreadmist Robe + 93861, --Prestigious Sunderseer Mantle + 93862, --Supple Shadowcraft Spaulders + 93863, --Supple Shadowcraft Tunic + 93864, --Majestic Ironfeather Shoulders + 93865, --Majestic Ironfeather Breastplate + 93866, --Wild Feralheart Spaulders + 93867, --Superior Stormshroud Shoulders + 93876, --Awakened Pauldrons of Elements + 93885, --Awakened Vest of Elements + 93886, --Adorned Beastmaster's Mantle + 93887, --Grand Champion Herod's Shoulder + 93888, --Furious Deathdealer Breastplate + 93889, --Venerated Pauldrons of The Five Thunders + 93890, --Gleaming Spaulders of Valor + 93891, --Gleaming Breastplate of Valor + 93892, --Brushed Breaastplate of Might + 93893, --Brushed Pauldrons of Might + 93894, --Immaculate Lightforge Spaulders + 93895, --Reinforced Stockade Pauldrons + 93896, --Forceful Hand of Justice + 93897, --Piercing Eye of the Beast + 93899, --Bequeathed Insignia of the Alliance + 93900, --Inherited Mark of Tyranny + 93902, --Flamescarred Draconian Deflector + 93903, --Weathered Observer's Shield + 93904, --Musty Tome of the Lost + }, + [90] = { + 104399, --Hellscream's Warbow (Normal) + 104400, --Hellscream's Razor (Normal) + 104401, --Hellscream's Doomblade (Normal) + 104402, --Hellscream's Warmace (Normal) + 104403, --Hellscream's Pig Sticker (Normal) + 104404, --Hellscream's Cleaver (Normal) + 104405, --Hellscream's Decapitator (Normal) + 104406, --Hellscream's War Staff (Normal) + 104407, --Hellscream's Shield Wall (Normal) + 104408, --Hellscream's Tome of Destruction (Normal) + 104409, --Hellscream's Barrier (Normal) + 105670, --Hellscream's Warbow (Flex) + 105671, --Hellscream's Razor (Flex) + 105672, --Hellscream's Cleaver (Flex) + 105673, --Hellscream's Pig Sticker (Flex) + 105674, --Hellscream's Barrier (Flex) + 105675, --Hellscream's Warmace (Flex) + 105676, --Hellscream's Tome of Destruction (Flex) + 105677, --Hellscream's War Staff (Flex) + 105678, --Hellscream's Doomblade (Flex) + 105679, --Hellscream's Decapitator (Flex) + 105680, --Hellscream's Shield Wall (Flex) + 105683, --Hellscream's Warbow (Heroic) + 105684, --Hellscream's Razor (Heroic) + 105685, --Hellscream's Cleaver (Heroic) + 105686, --Hellscream's Pig Sticker (Heroic) + 105687, --Hellscream's Barrier (Heroic) + 105688, --Hellscream's Warmace (Heroic) + 105689, --Hellscream's Tome of Destruction (Heroic) + 105690, --Hellscream's War Staff (Heroic) + 105691, --Hellscream's Doomblade (Heroic) + 105692, --Hellscream's Decapitator (Heroic) + 105693, --Hellscream's Shield Wall (Heroic) + }, +} + +local function HeirLoomLevel(itemLink) + local ItemID, _, _, _, _, _, _, _, level = strmatch(itemLink, '|Hitem:(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+)') + ItemID, level = tonumber(ItemID), tonumber(level) + for _, ID in pairs(heirlooms[90]) do + if ID == ItemID then + return select(4, GetItemInfo(itemLink)) + end + end + for _, ID in pairs(heirlooms[85]) do + if ID == ItemID and level > 85 then + level = 85 + break + end + end + for _, ID in pairs(heirlooms[80]) do + if ID == ItemID and level > 80 then + level = 80 + break + end + end + + if level > 80 then + return (( level - 81) * 12) + 285; + elseif level > 67 then + return (( level - 68) * 6) + 115; + elseif level > 59 then + return (( level - 60) * 3) + 85; + else + return level + end +end + +local function GetItemLevel(itemLink) + local rarity, itemLevel = select(3, GetItemInfo(itemLink)) + if rarity == 7 then + itemLevel = HeirLoomLevel(itemLink) + end + local upgrade = strmatch(itemLink, ":(%d+)\124h%[") + if itemLevel and upgrade and levelAdjust[upgrade] then + itemLevel = itemLevel + levelAdjust[upgrade] + end + return itemLevel +end + +local function OnEvent(self) + self.avgItemLevel, self.avgEquipItemLevel = GetAverageItemLevel() + self.text:SetFormattedText(displayString, ITEM_LEVEL_ABBR, floor(self.avgEquipItemLevel), floor(self.avgItemLevel)) +end + +local function OnEnter(self) + local avgItemLevel, avgEquipItemLevel = self.avgItemLevel, self.avgEquipItemLevel + + DT:SetupTooltip(self) + DT.tooltip:AddDoubleLine(TOTAL, floor(avgItemLevel), 1, 1, 1, 0, 1, 0) + DT.tooltip:AddDoubleLine(GMSURVEYRATING3, floor(avgEquipItemLevel), 1, 1, 1, 0, 1, 0) + DT.tooltip:AddLine(" ") + for i = 1, 16 do + local itemLink = GetInventoryItemLink("player", GetInventorySlotInfo(slots[i][1])) + if itemLink then + itemLevel = GetItemLevel(itemLink) + if itemLevel and avgEquipItemLevel then + local color = levelColors[(itemLevel < avgEquipItemLevel - 10 and 0 or (itemLevel > avgEquipItemLevel + 10 and 1 or (2)))] + DT.tooltip:AddDoubleLine(slots[i][2], itemLevel, 1, 1, 1, color[1], color[2], color[3]) + end + end + end + DT.tooltip:Show() +end + +local function ValueColorUpdate(hex, r, g, b) + displayString = string.join("", "|cffffffff%s:|r", " ", hex, "%d / %d|r") + if lastPanel ~= nil then OnEvent(lastPanel) end +end +E["valueColorUpdateFuncs"][ValueColorUpdate] = true + +DT:RegisterDatatext("S&L "..L["Item Level"], {"PLAYER_ENTERING_WORLD", "PLAYER_EQUIPMENT_CHANGED", "UNIT_INVENTORY_CHANGED"}, OnEvent, nil, nil, OnEnter) diff --git a/ElvUI_SLE/modules/datatexts/load_datatexts.xml b/ElvUI_SLE/modules/datatexts/load_datatexts.xml index 9f711d2..b008e5d 100755 --- a/ElvUI_SLE/modules/datatexts/load_datatexts.xml +++ b/ElvUI_SLE/modules/datatexts/load_datatexts.xml @@ -7,6 +7,7 @@ <Script file='add_panels.lua'/> <Script file='friends.lua'/> <Script file='guild.lua'/> + <Script file='itemlevel.lua'/> <Script file='played.lua'/> <Script file='mail.lua'/> <Script file='currency.lua'/>