246 lines
6.5 KiB
Lua
246 lines
6.5 KiB
Lua
local E, L, V, P, G = unpack(ElvUI)
|
|
local EI = E:NewModule("Enhanced_EquipmentInfo", "AceHook-3.0", "AceEvent-3.0")
|
|
|
|
local _G = _G
|
|
local format = string.format
|
|
local pairs = pairs
|
|
|
|
local GetInventoryItemDurability = GetInventoryItemDurability
|
|
local GetInventoryItemID = GetInventoryItemID
|
|
local GetInventorySlotInfo = GetInventorySlotInfo
|
|
local GetItemInfo = GetItemInfo
|
|
local GetItemQualityColor = GetItemQualityColor
|
|
local InCombatLockdown = InCombatLockdown
|
|
local IsAddOnLoaded = IsAddOnLoaded
|
|
|
|
local slots = {
|
|
["HeadSlot"] = true,
|
|
["NeckSlot"] = false,
|
|
["ShoulderSlot"] = true,
|
|
["BackSlot"] = false,
|
|
["ChestSlot"] = true,
|
|
-- ["ShirtSlot"] = false,
|
|
-- ["TabardSlot"] = false,
|
|
["WristSlot"] = true,
|
|
["HandsSlot"] = true,
|
|
["WaistSlot"] = true,
|
|
["LegsSlot"] = true,
|
|
["FeetSlot"] = true,
|
|
["Finger0Slot"] = false,
|
|
["Finger1Slot"] = false,
|
|
["Trinket0Slot"] = false,
|
|
["Trinket1Slot"] = false,
|
|
["MainHandSlot"] = true,
|
|
["SecondaryHandSlot"] = true,
|
|
["RangedSlot"] = true,
|
|
-- ["AmmoSlot"] = false,
|
|
}
|
|
|
|
function EI:UpdatePaperDoll(unit)
|
|
if not self.initialized then return end
|
|
|
|
if unit == "player" and InCombatLockdown() then
|
|
self:RegisterEvent("PLAYER_REGEN_ENABLED", "OnEvent")
|
|
return
|
|
elseif unit ~= "player" then
|
|
if AscensionInspectFrame then
|
|
unit = AscensionInspectFrame.unit
|
|
|
|
if not unit then return end
|
|
else
|
|
return
|
|
end
|
|
end
|
|
|
|
local baseName = unit == "player" and "AscensionCharacter" or "AscensionInspect"
|
|
local frame, slotID, itemID
|
|
local _, rarity, itemLevel
|
|
local current, maximum, r, g, b
|
|
|
|
for slotName, durability in pairs(slots) do
|
|
frame = _G[format("%s%s", baseName, slotName)]
|
|
|
|
if frame then
|
|
slotID = GetInventorySlotInfo(slotName)
|
|
|
|
frame.ItemLevel:SetText()
|
|
|
|
if E.db.enhanced.equipment.itemlevel.enable then
|
|
itemID = GetInventoryItemID(unit, slotID)
|
|
|
|
if itemID then
|
|
_, _, rarity, itemLevel = GetItemInfo(itemID)
|
|
|
|
if itemLevel then
|
|
frame.ItemLevel:SetText(itemLevel)
|
|
|
|
if E.db.enhanced.equipment.itemlevel.qualityColor then
|
|
frame.ItemLevel:SetTextColor()
|
|
if rarity and rarity > 1 then
|
|
frame.ItemLevel:SetTextColor(GetItemQualityColor(rarity))
|
|
else
|
|
frame.ItemLevel:SetTextColor(1, 1, 1)
|
|
end
|
|
else
|
|
frame.ItemLevel:SetTextColor(1, 1, 1)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if unit == "player" and durability then
|
|
frame.DurabilityInfo:SetText()
|
|
|
|
if E.db.enhanced.equipment.durability.enable then
|
|
current, maximum = GetInventoryItemDurability(slotID)
|
|
|
|
if current and maximum and (not E.db.enhanced.equipment.durability.onlydamaged or current < maximum) then
|
|
r, g, b = E:ColorGradient((current / maximum), 1, 0, 0, 1, 1, 0, 0, 1, 0)
|
|
frame.DurabilityInfo:SetFormattedText("%s%.0f%%|r", E:RGBToHex(r, g, b), (current / maximum) * 100)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function EI:BuildInfoText(name)
|
|
local frame
|
|
|
|
for slotName, durability in pairs(slots) do
|
|
frame = _G[format("%s%s", name, slotName)]
|
|
|
|
frame.ItemLevel = frame:CreateFontString(nil, "OVERLAY")
|
|
|
|
if name == "AscensionCharacter" and durability then
|
|
frame.DurabilityInfo = frame:CreateFontString(nil, "OVERLAY")
|
|
end
|
|
end
|
|
|
|
self:UpdateInfoText(name)
|
|
end
|
|
|
|
function EI:UpdateInfoText(name)
|
|
local db = E.db.enhanced.equipment
|
|
local frame
|
|
|
|
for slotName, durability in pairs(slots) do
|
|
frame = _G[format("%s%s", name, slotName)]
|
|
|
|
if frame then
|
|
frame.ItemLevel:ClearAllPoints()
|
|
frame.ItemLevel:Point(db.itemlevel.position, frame, db.itemlevel.xOffset, db.itemlevel.yOffset)
|
|
frame.ItemLevel:FontTemplate(E.LSM:Fetch("font", db.font), db.fontSize, db.fontOutline)
|
|
|
|
if name == "AscensionCharacter" and durability then
|
|
frame.DurabilityInfo:ClearAllPoints()
|
|
frame.DurabilityInfo:Point(db.durability.position, frame, db.durability.xOffset, db.durability.yOffset)
|
|
frame.DurabilityInfo:FontTemplate(E.LSM:Fetch("font", db.font), db.fontSize, db.fontOutline)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function InspectFrameUpdate()
|
|
EI:UpdatePaperDoll()
|
|
end
|
|
|
|
function EI:OnEvent(event, unit)
|
|
if event == "UPDATE_INVENTORY_DURABILITY" then
|
|
self:UpdatePaperDoll("player")
|
|
elseif event == "UNIT_INVENTORY_CHANGED" then
|
|
if unit ~= "player" and AscensionInspectFrame and unit == AscensionInspectFrame.unit then
|
|
self:UpdatePaperDoll(unit)
|
|
end
|
|
elseif event == "PLAYER_REGEN_ENABLED" then
|
|
self:UnregisterEvent("PLAYER_REGEN_ENABLED")
|
|
self:UpdatePaperDoll("player")
|
|
elseif event == "ADDON_LOADED" and unit == "Ascension_InspectUI" then
|
|
self.initializedInspect = true
|
|
self:UnregisterEvent("ADDON_LOADED")
|
|
self:BuildInfoText("AscensionInspect")
|
|
self:HookScript(AscensionInspectFrame, "OnShow", InspectFrameUpdate)
|
|
self:SecureHook(AscensionInspectFrame,"UpdateCharacterInfo", InspectFrameUpdate)
|
|
end
|
|
end
|
|
|
|
function EI:InitialUpdatePaperDoll()
|
|
if self.initialized then return end
|
|
|
|
self:UnregisterEvent("PLAYER_ENTERING_WORLD")
|
|
self:BuildInfoText("AscensionCharacter")
|
|
|
|
self.initialized = true
|
|
end
|
|
|
|
function EI:UpdateText()
|
|
self:UpdatePaperDoll("player")
|
|
|
|
if self.initializedInspect and AscensionInspectFrame.unit then
|
|
self:UpdatePaperDoll()
|
|
end
|
|
end
|
|
|
|
function EI:UpdateTextSettings()
|
|
self:UpdateInfoText("AscensionCharacter")
|
|
|
|
if self.initializedInspect then
|
|
self:UpdateInfoText("AscensionInspect")
|
|
end
|
|
end
|
|
|
|
function EI:ToggleState(init)
|
|
if E.db.enhanced.equipment.enable then
|
|
if not self.initialized then
|
|
if init then
|
|
self:RegisterEvent("PLAYER_ENTERING_WORLD", "InitialUpdatePaperDoll")
|
|
else
|
|
self:InitialUpdatePaperDoll()
|
|
end
|
|
|
|
if IsAddOnLoaded("Ascension_InspectUI") or AscensionInspectFrame then
|
|
self:OnEvent("ADDON_LOADED", "Ascension_InspectUI")
|
|
else
|
|
self:RegisterEvent("ADDON_LOADED", "OnEvent")
|
|
end
|
|
end
|
|
|
|
self:UpdateText()
|
|
|
|
self:RegisterEvent("UPDATE_INVENTORY_DURABILITY", "OnEvent")
|
|
self:RegisterEvent("UNIT_INVENTORY_CHANGED", "OnEvent")
|
|
|
|
if not self.initializedInspect then
|
|
self:RegisterEvent("ADDON_LOADED", "OnEvent")
|
|
end
|
|
elseif self.initialized then
|
|
self:UnhookAll()
|
|
self:UnregisterAllEvents()
|
|
|
|
for slotName, durability in pairs(slots) do
|
|
_G["AscensionCharacter"..slotName].ItemLevel:SetText()
|
|
|
|
if durability then
|
|
_G["AscensionCharacter"..slotName].DurabilityInfo:SetText()
|
|
end
|
|
|
|
if self.initializedInspect then
|
|
if _G["AscensionInspect"..slotName].ItemLevel then
|
|
_G["AscensionInspect"..slotName].ItemLevel:SetText()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function EI:Initialize()
|
|
if not E.db.enhanced.equipment.enable then return end
|
|
|
|
self:ToggleState(true)
|
|
end
|
|
|
|
local function InitializeCallback()
|
|
EI:Initialize()
|
|
end
|
|
|
|
E:RegisterModule(EI:GetName(), InitializeCallback) |