Files
ShaguTweaks-ClassicAPI/mods/item-colors.lua
T
2026-08-12 15:59:46 +02:00

223 lines
7.1 KiB
Lua

local _G = ShaguTweaks.GetGlobalEnv()
local T = ShaguTweaks.T
local GetExpansion = ShaguTweaks.GetExpansion
local AddBorder = ShaguTweaks.AddBorder
local HookAddonOrVariable = ShaguTweaks.HookAddonOrVariable
local module = ShaguTweaks:register({
title = T["Item Rarity Borders"],
description = T["Show item rarity as the border color on bags, bank, character and inspect frames."],
expansions = { ["vanilla"] = true },
category = T["Tooltip & Items"],
enabled = true,
})
local defcolor = {}
local paperdoll_slots = {
[0] = "AmmoSlot", "HeadSlot",
"NeckSlot", "ShoulderSlot",
"ShirtSlot", "ChestSlot",
"WaistSlot", "LegsSlot",
"FeetSlot", "WristSlot",
"HandsSlot", "Finger0Slot",
"Finger1Slot", "Trinket0Slot",
"Trinket1Slot", "BackSlot",
"MainHandSlot", "SecondaryHandSlot",
"RangedSlot", "TabardSlot",
}
local inspect_slots = {
"HeadSlot", "NeckSlot",
"ShoulderSlot", "ShirtSlot",
"ChestSlot", "WaistSlot",
"LegsSlot", "FeetSlot",
"WristSlot", "HandsSlot",
"Finger0Slot", "Finger1Slot",
"Trinket0Slot", "Trinket1Slot",
"BackSlot", "MainHandSlot",
"SecondaryHandSlot", "RangedSlot",
"TabardSlot"
}
module.enable = function(self)
do -- paperdoll
local refresh_paperdoll = function()
for i, slot in pairs(paperdoll_slots) do
local button = _G["Character"..slot]
if button then
local border = button.ShaguTweaks_border
if not border then
border = AddBorder(button, 3, { r = .5, g = .5, b = .5 })
end
if not defcolor["paperdoll"] then
defcolor["paperdoll"] = { border:GetBackdropBorderColor() }
end
local quality = GetInventoryItemQuality("player", i)
if quality then
local r, g, b = GetItemQualityColor(quality)
border:SetBackdropBorderColor(r, g, b, 1)
else
border:SetBackdropBorderColor(defcolor["paperdoll"][1], defcolor["paperdoll"][2], defcolor["paperdoll"][3], 1)
end
end
end
end
local paperdoll = CreateFrame("Frame", nil, CharacterFrame)
paperdoll:RegisterEvent("UNIT_INVENTORY_CHANGED")
paperdoll:SetScript("OnEvent", refresh_paperdoll)
paperdoll:SetScript("OnShow", refresh_paperdoll)
end
do -- inspect
local refresh_inspect = function()
for i, v in pairs(inspect_slots) do
local button = _G["Inspect"..v]
local link = GetInventoryItemLink("target", i)
local border = button.ShaguTweaks_border
if not border then
border = AddBorder(button, 3, { r = .5, g = .5, b = .5 })
end
if not defcolor["inspect"] then
defcolor["inspect"] = { border:GetBackdropBorderColor() }
end
border:SetBackdropBorderColor(defcolor["inspect"][1], defcolor["inspect"][2], defcolor["inspect"][3], 1)
if link then
local _, _, istring = string.find(link, "|H(.+)|h")
local _, _, quality = GetItemInfo(istring)
if quality then
local r, g, b = GetItemQualityColor(quality)
border:SetBackdropBorderColor(r, g, b, 1)
end
end
end
end
HookAddonOrVariable("Blizzard_InspectUI", function()
local HookInspectPaperDollItemSlotButton_Update = InspectPaperDollItemSlotButton_Update
InspectPaperDollItemSlotButton_Update = function(arg)
HookInspectPaperDollItemSlotButton_Update(arg)
refresh_inspect()
end
end)
end
do -- bags
local color = { r = .5, g = .5, b = .46 }
for i = 0, 3 do
AddBorder(_G["CharacterBag"..i.."Slot"], 3, color)
end
for i = 1, 12 do
for k = 1, MAX_CONTAINER_ITEMS do
AddBorder(_G["ContainerFrame"..i.."Item"..k], 3, color)
end
end
local refresh_bags = function()
for i = 1, 12 do
local frame = _G["ContainerFrame"..i]
if frame then
local name = frame:GetName()
local id = frame:GetID()
for i = 1, MAX_CONTAINER_ITEMS do
local button = _G[name.."Item"..i]
if not defcolor["bag"] then
defcolor["bag"] = { button.ShaguTweaks_border:GetBackdropBorderColor() }
end
button.ShaguTweaks_border:SetBackdropBorderColor(defcolor["bag"][1], defcolor["bag"][2], defcolor["bag"][3], 1)
local link = GetContainerItemLink(id, button:GetID())
if button and button:IsShown() and link then
local _, _, istring = string.find(link, "|H(.+)|h")
local _, _, quality = GetItemInfo(istring)
if quality then
local r, g, b = GetItemQualityColor(quality)
button.ShaguTweaks_border:SetBackdropBorderColor(r,g,b)
end
end
end
end
end
end
local bags = CreateFrame("Frame", nil, ContainerFrame1)
bags:RegisterEvent("BAG_UPDATE")
bags:SetScript("OnEvent", refresh_bags)
local HookContainerFrame_OnShow = ContainerFrame_OnShow
function ContainerFrame_OnShow() refresh_bags() HookContainerFrame_OnShow() end
local HookContainerFrame_OnHide = ContainerFrame_OnHide
function ContainerFrame_OnHide() refresh_bags() HookContainerFrame_OnHide() end
end
do -- bank
for i = 1, 28 do
AddBorder(_G["BankFrameItem"..i], 3, color)
end
local refresh_bank = function()
for i = 1, 28 do
local button = _G["BankFrameItem"..i]
local link = GetContainerItemLink(-1, i)
if button then
if not defcolor["bank"] then
defcolor["bank"] = { button.ShaguTweaks_border:GetBackdropBorderColor() }
end
button.ShaguTweaks_border:SetBackdropBorderColor(defcolor["bank"][1], defcolor["bank"][2], defcolor["bank"][3], 1)
if link then
local _, _, istring = string.find(link, "|H(.+)|h")
local _, _, q = GetItemInfo(istring)
if q and q > 1 then
local r, g, b = GetItemQualityColor(q)
button.ShaguTweaks_border:SetBackdropBorderColor(r,g,b)
end
end
end
end
end
local bank = CreateFrame("Frame", nil, BankFrame)
bank:RegisterEvent("PLAYERBANKSLOTS_CHANGED")
bank:SetScript("OnEvent", refresh_bank)
bank:SetScript("OnShow", refresh_bank)
end
do -- weapon buff
AddBorder(TempEnchant1, 3, {.2,.2,.2})
AddBorder(TempEnchant2, 3, {.2,.2,.2})
local hookBuffFrame_Enchant_OnUpdate = BuffFrame_Enchant_OnUpdate
function BuffFrame_Enchant_OnUpdate(elapsed)
hookBuffFrame_Enchant_OnUpdate(elapsed)
-- return early without any weapon enchants
local mh, _, _, oh = GetWeaponEnchantInfo()
if not mh and not oh then return end
-- update weapon enchant 1
local r, g, b = GetItemQualityColor(GetInventoryItemQuality("player", TempEnchant1:GetID()) or 1)
TempEnchant1.ShaguTweaks_border:SetBackdropBorderColor(r,g,b,1)
TempEnchant1Border:SetAlpha(0)
-- update weapon enchant 2
local r, g, b = GetItemQualityColor(GetInventoryItemQuality("player", TempEnchant2:GetID()) or 1)
TempEnchant2.ShaguTweaks_border:SetBackdropBorderColor(r,g,b,1)
TempEnchant2Border:SetAlpha(0)
end
end
end