94 lines
2.3 KiB
Lua
94 lines
2.3 KiB
Lua
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
local DT = E:GetModule("DataTexts")
|
|
|
|
--Lua functions
|
|
local ipairs = ipairs
|
|
local format, join = string.format, string.join
|
|
--WoW API / Variables
|
|
local GetInventoryItemDurability = GetInventoryItemDurability
|
|
local GetInventorySlotInfo = GetInventorySlotInfo
|
|
local ToggleCharacter = ToggleCharacter
|
|
local DURABILITY = DURABILITY
|
|
|
|
local displayString = ""
|
|
local tooltipString = "%d%%"
|
|
local lastPanel
|
|
local totalDurability, current, maxDur
|
|
local invDurability = {}
|
|
|
|
local slots = {
|
|
"HeadSlot",
|
|
"ShoulderSlot",
|
|
"ChestSlot",
|
|
"WristSlot",
|
|
"HandsSlot",
|
|
"WaistSlot",
|
|
"LegsSlot",
|
|
"FeetSlot",
|
|
"MainHandSlot",
|
|
"SecondaryHandSlot",
|
|
"RangedSlot",
|
|
}
|
|
|
|
local slotsLocales = {
|
|
["HeadSlot"] = HEADSLOT,
|
|
["ShoulderSlot"] = SHOULDERSLOT,
|
|
["ChestSlot"] = CHESTSLOT,
|
|
["WristSlot"] = WRISTSLOT,
|
|
["HandsSlot"] = HANDSSLOT,
|
|
["WaistSlot"] = WAISTSLOT,
|
|
["LegsSlot"] = LEGSSLOT,
|
|
["FeetSlot"] = FEETSLOT,
|
|
["MainHandSlot"] = MAINHANDSLOT,
|
|
["SecondaryHandSlot"] = SECONDARYHANDSLOT,
|
|
["RangedSlot"] = RANGEDSLOT,
|
|
}
|
|
|
|
local function OnEvent(self)
|
|
lastPanel = self
|
|
totalDurability = 100
|
|
|
|
for _, sType in ipairs(slots) do
|
|
local slot = GetInventorySlotInfo(sType)
|
|
current, maxDur = GetInventoryItemDurability(slot)
|
|
|
|
if current then
|
|
invDurability[sType] = (current / maxDur) * 100
|
|
|
|
if invDurability[sType] < totalDurability then
|
|
totalDurability = invDurability[sType]
|
|
end
|
|
else
|
|
invDurability[sType] = nil
|
|
end
|
|
end
|
|
|
|
self.text:SetFormattedText(displayString, totalDurability)
|
|
end
|
|
|
|
local function OnClick()
|
|
ToggleCharacter("PaperDollFrame")
|
|
end
|
|
|
|
local function OnEnter(self)
|
|
DT:SetupTooltip(self)
|
|
|
|
for _, sType in ipairs(slots) do
|
|
if invDurability[sType] then
|
|
DT.tooltip:AddDoubleLine(slotsLocales[sType], format(tooltipString, invDurability[sType]), 1, 1, 1, E:ColorGradient(invDurability[sType] * 0.01, 1, 0, 0, 1, 1, 0, 0, 1, 0))
|
|
end
|
|
end
|
|
|
|
DT.tooltip:Show()
|
|
end
|
|
|
|
local function ValueColorUpdate(hex)
|
|
displayString = join("", DURABILITY, ": ", hex, "%d%%|r")
|
|
|
|
if lastPanel ~= nil then
|
|
OnEvent(lastPanel, "ELVUI_COLOR_UPDATE")
|
|
end
|
|
end
|
|
E.valueColorUpdateFuncs[ValueColorUpdate] = true
|
|
|
|
DT:RegisterDatatext("Durability", {"PLAYER_ENTERING_WORLD", "UPDATE_INVENTORY_DURABILITY", "MERCHANT_SHOW"}, OnEvent, nil, OnClick, OnEnter, nil, DURABILITY) |