You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
4.0 KiB

local SLE, T, E, L, V, P, G = unpack(select(2, ...))
local DT = E.DataTexts
local GetEquippedArtifactRelicInfo = C_ArtifactUI.GetEquippedArtifactRelicInfo
local GetItemLevelIncreaseProvidedByRelic = C_ArtifactUI.GetItemLevelIncreaseProvidedByRelic
local GetAverageItemLevel = GetAverageItemLevel
local HEADSLOT, NECKSLOT, SHOULDERSLOT, BACKSLOT, CHESTSLOT, WRISTSLOT, HANDSSLOT, WAISTSLOT, LEGSSLOT, FEETSLOT, FINGER0SLOT_UNIQUE, FINGER1SLOT_UNIQUE, TRINKET0SLOT_UNIQUE, TRINKET1SLOT_UNIQUE, MAINHANDSLOT, SECONDARYHANDSLOT = HEADSLOT, NECKSLOT, SHOULDERSLOT, BACKSLOT, CHESTSLOT, WRISTSLOT, HANDSSLOT, WAISTSLOT, LEGSSLOT, FEETSLOT, FINGER0SLOT_UNIQUE, FINGER1SLOT_UNIQUE, TRINKET0SLOT_UNIQUE, TRINKET1SLOT_UNIQUE, MAINHANDSLOT, SECONDARYHANDSLOT
local ITEM_LEVEL_ABBR = ITEM_LEVEL_ABBR
local GMSURVEYRATING3 = GMSURVEYRATING3
local TOTAL = TOTAL
local displayString = ''
local lastPanel
local slots = {
[1] = { "HeadSlot", HEADSLOT, 1},
[2] = { "NeckSlot", NECKSLOT, 2},
[3] = { "ShoulderSlot", SHOULDERSLOT, 3},
[5] = { "ChestSlot", CHESTSLOT, 5},
[6] = { "WaistSlot", WAISTSLOT, 8},
[7] = { "LegsSlot", LEGSSLOT, 9},
[8] = { "FeetSlot", FEETSLOT, 10},
[9] = { "WristSlot", WRISTSLOT, 6},
[10] = { "HandsSlot", HANDSSLOT, 7},
[11] = { "Finger0Slot", FINGER0SLOT_UNIQUE, 11},
[12] = { "Finger1Slot", FINGER1SLOT_UNIQUE, 12},
[13] = { "Trinket0Slot", TRINKET0SLOT_UNIQUE, 13},
[14] = { "Trinket1Slot", TRINKET1SLOT_UNIQUE, 14},
[15] = { "BackSlot", BACKSLOT, 4},
[16] = { "MainHandSlot", MAINHANDSLOT, 15},
[17] = { "SecondaryHandSlot", SECONDARYHANDSLOT, 16},
}
local tooltipOrder = {}
local levelColors = {
[0] = { 1, 0, 0 },
[1] = { 0, 1, 0 },
[2] = { 1, 1, .5 },
}
local function OnEvent(self)
self.avgItemLevel, self.avgEquipItemLevel = GetAverageItemLevel()
self.text:SetFormattedText(displayString, ITEM_LEVEL_ABBR, floor(self.avgEquipItemLevel), floor(self.avgItemLevel))
lastPanel = self
end
local ArtifactsIlvl = {}
local function OnEnter(self)
DT.tooltip:ClearLines()
local avgItemLevel, avgEquipItemLevel = self.avgItemLevel, self.avgEquipItemLevel
wipe(tooltipOrder)
wipe(ArtifactsIlvl)
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 in pairs(slots) do
local ItemLink = GetInventoryItemLink('player', i)
if ItemLink then
local ItemRarity = select(3, GetItemInfo(ItemLink))
local isArtifact = (ItemRarity == 6)
local itemLevel = GetDetailedItemLevelInfo(ItemLink)
if itemLevel and avgEquipItemLevel and not isArtifact then
local color = levelColors[(itemLevel < avgEquipItemLevel - 10 and 0 or (itemLevel > avgEquipItemLevel + 10 and 1 or (2)))]
tooltipOrder[slots[i][3]] = {slots[i][2], itemLevel, 1, 1, 1, color[1], color[2], color[3]}
elseif itemLevel and avgEquipItemLevel and isArtifact then
ArtifactsIlvl[slots[i][3]] = {slots[i][3], slots[i][2], itemLevel}
end
end
end
if ArtifactsIlvl[15] then
if ArtifactsIlvl[16] then
if ArtifactsIlvl[15][3] > ArtifactsIlvl[16][3] then
ArtifactsIlvl[16][3] = ArtifactsIlvl[15][3]
elseif ArtifactsIlvl[15][3] < ArtifactsIlvl[16][3] then
ArtifactsIlvl[15][3] = ArtifactsIlvl[16][3]
end
end
for slot, data in pairs(ArtifactsIlvl) do
local itemLevel = data[3]
local color = levelColors[(itemLevel < avgEquipItemLevel - 10 and 0 or (itemLevel > avgEquipItemLevel + 10 and 1 or (2)))]
tooltipOrder[data[1]] = {data[2], data[3], 1, 1, 1, color[1], color[2], color[3]}
end
end
for i in pairs(tooltipOrder) do
if tooltipOrder[i] then DT.tooltip:AddDoubleLine(unpack(tooltipOrder[i])) end
end
DT.tooltip:Show()
end
local function ValueColorUpdate(hex, r, g, b)
displayString = strjoin("", "%s:", " ", hex, "%d / %d|r")
if lastPanel ~= nil then OnEvent(lastPanel) end
end
E["valueColorUpdateFuncs"][ValueColorUpdate] = true
DT:RegisterDatatext("S&L Item Level", 'S&L', {"LOADING_SCREEN_DISABLED", "PLAYER_EQUIPMENT_CHANGED", "UNIT_INVENTORY_CHANGED"}, OnEvent, nil, nil, OnEnter)