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 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)) 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(self, hex) displayString = strjoin('', '%s:', ' ', hex, '%d / %d|r') OnEvent(self) end DT:RegisterDatatext('S&L Item Level', 'S&L', {'LOADING_SCREEN_DISABLED', 'PLAYER_EQUIPMENT_CHANGED', 'UNIT_INVENTORY_CHANGED'}, OnEvent, nil, nil, OnEnter, nil, nil, nil, ValueColorUpdate)