Code refactory
This commit is contained in:
@@ -52,11 +52,70 @@ addon.Constants = {
|
|||||||
BUTTONS_PER_ROW = 10,
|
BUTTONS_PER_ROW = 10,
|
||||||
MIN_ICON_SIZE = 30,
|
MIN_ICON_SIZE = 30,
|
||||||
MAX_ICON_SIZE = 64,
|
MAX_ICON_SIZE = 64,
|
||||||
|
|
||||||
|
-- Backdrop configurations (to avoid duplication across UI files)
|
||||||
|
Backdrops = {
|
||||||
|
-- Standard frame backdrop (used for main windows)
|
||||||
|
DEFAULT_FRAME = {
|
||||||
|
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
||||||
|
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
|
||||||
|
tile = true,
|
||||||
|
tileSize = 32,
|
||||||
|
edgeSize = 32,
|
||||||
|
insets = { left = 11, right = 12, top = 12, bottom = 11 }
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Minimalist border (used when "hide borders" setting is enabled)
|
||||||
|
MINIMALIST_BORDER = {
|
||||||
|
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
||||||
|
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
|
||||||
|
tile = true,
|
||||||
|
tileSize = 32,
|
||||||
|
edgeSize = 2,
|
||||||
|
insets = { left = 0, right = 0, top = 0, bottom = 0 }
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Dropdown/popup backdrop (used for character selection dropdowns)
|
||||||
|
DROPDOWN = {
|
||||||
|
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
||||||
|
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
|
||||||
|
tile = true,
|
||||||
|
tileSize = 16,
|
||||||
|
edgeSize = 16,
|
||||||
|
insets = { left = 4, right = 4, top = 4, bottom = 4 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Backdrop colors (common configurations)
|
||||||
|
BackdropColors = {
|
||||||
|
DEFAULT = {r = 0, g = 0, b = 0, a = 0.9},
|
||||||
|
DROPDOWN = {r = 0, g = 0, b = 0, a = 0.95},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Initialize modules storage
|
-- Initialize modules storage
|
||||||
addon.Modules = {}
|
addon.Modules = {}
|
||||||
|
|
||||||
|
-- Helper to apply backdrop with color
|
||||||
|
function addon:ApplyBackdrop(frame, backdropType, colorType)
|
||||||
|
local backdrop = self.Constants.Backdrops[backdropType]
|
||||||
|
local color = self.Constants.BackdropColors[colorType or "DEFAULT"]
|
||||||
|
|
||||||
|
if not backdrop or not color then
|
||||||
|
self:Debug("Invalid backdrop type: %s or color type: %s",
|
||||||
|
tostring(backdropType), tostring(colorType))
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
frame:SetBackdrop(backdrop)
|
||||||
|
frame:SetBackdropColor(color.r, color.g, color.b, color.a)
|
||||||
|
|
||||||
|
-- Set border color to white for minimalist borders
|
||||||
|
if backdropType == "MINIMALIST_BORDER" then
|
||||||
|
frame:SetBackdropBorderColor(1, 1, 1, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Print function with addon prefix
|
-- Print function with addon prefix
|
||||||
function addon:Print(msg, a1, a2, a3, a4, a5)
|
function addon:Print(msg, a1, a2, a3, a4, a5)
|
||||||
local text = string.format(msg, a1, a2, a3, a4, a5)
|
local text = string.format(msg, a1, a2, a3, a4, a5)
|
||||||
|
|||||||
+37
-39
@@ -47,32 +47,34 @@ end
|
|||||||
-- Get item info with caching
|
-- Get item info with caching
|
||||||
local itemCache = {}
|
local itemCache = {}
|
||||||
|
|
||||||
local function DebugGetItemInfo(itemID, itemName)
|
-- Extract itemID from itemLink (Lua 5.0 compatible)
|
||||||
if not itemID then
|
-- Returns: itemID as number, or nil if extraction fails
|
||||||
addon:Print("NO ITEM ID for: " .. tostring(itemName))
|
function Utils:ExtractItemID(itemLink)
|
||||||
return
|
if not itemLink then return nil end
|
||||||
end
|
local _, _, itemID = string.find(itemLink, "item:(%d+)")
|
||||||
|
return itemID and tonumber(itemID) or nil
|
||||||
|
|
||||||
local itemName, itemLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount,
|
|
||||||
itemSubType, itemTexture, itemEquipLoc, itemSellPrice = GetItemInfo(itemID)
|
|
||||||
addon:Print("=== GetItemInfo DEBUG ===")
|
|
||||||
addon:Print(string.format("Input ItemID: %d", itemID))
|
|
||||||
addon:Print(string.format("Input Name: %s", tostring(itemName)))
|
|
||||||
addon:Print("--- Return Values ---")
|
|
||||||
addon:Print(string.format("1. itemName: '%s'", tostring(itemName)))
|
|
||||||
addon:Print(string.format("2. itemLink: '%s'", tostring(itemLink)))
|
|
||||||
addon:Print(string.format("3. itemRarity: %s", itemRarity or 0))
|
|
||||||
addon:Print(string.format("4. itemLevel: %s", itemLevel or 0))
|
|
||||||
addon:Print(string.format("5. itemMinLevel: %s", itemMinLevel or 0))
|
|
||||||
addon:Print(string.format("6. itemType: '%s'", tostring(itemType)))
|
|
||||||
addon:Print(string.format("7. itemSubType: '%s'", tostring(itemSubType)))
|
|
||||||
addon:Print(string.format("8. itemStackCount: %s", itemStackCount or 0))
|
|
||||||
addon:Print(string.format("9. itemEquipLoc: '%s'", tostring(itemEquipLoc)))
|
|
||||||
addon:Print(string.format("10. itemTexture: '%s'", tostring(itemTexture)))
|
|
||||||
addon:Print(string.format("11. itemSellPrice: %s", itemSellPrice or 0))
|
|
||||||
addon:Print("=====================")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Get item info with error handling (does not cache)
|
||||||
|
-- Turtle WoW GetItemInfo signature:
|
||||||
|
-- itemName, itemLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType, itemTexture, itemEquipLoc, itemSellPrice
|
||||||
|
function Utils:GetItemInfoSafe(itemID)
|
||||||
|
if not itemID then
|
||||||
|
addon:Debug("GetItemInfoSafe: nil itemID")
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local itemName, itemLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType, itemTexture, itemEquipLoc, itemSellPrice = GetItemInfo(itemID)
|
||||||
|
|
||||||
|
if not itemName then
|
||||||
|
addon:Debug("GetItemInfoSafe: GetItemInfo failed for itemID %d", itemID)
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
return itemName, itemLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType, itemTexture, itemEquipLoc, itemSellPrice
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Get item info with caching (wrapper for backward compatibility)
|
||||||
function Utils:GetItemInfo(itemLink)
|
function Utils:GetItemInfo(itemLink)
|
||||||
if not itemLink then return nil end
|
if not itemLink then return nil end
|
||||||
|
|
||||||
@@ -80,13 +82,11 @@ function Utils:GetItemInfo(itemLink)
|
|||||||
return unpack(itemCache[itemLink])
|
return unpack(itemCache[itemLink])
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Extract itemID from itemLink
|
local itemID = self:ExtractItemID(itemLink)
|
||||||
local _, _, itemID = string.find(itemLink, "item:(%d+)")
|
|
||||||
if not itemID then return nil end
|
if not itemID then return nil end
|
||||||
|
|
||||||
-- Turtle WoW GetItemInfo signature:
|
local itemName, retLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType, itemTexture, itemEquipLoc, itemSellPrice = self:GetItemInfoSafe(itemID)
|
||||||
-- itemName, itemLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType, itemTexture, itemEquipLoc, itemSellPrice
|
|
||||||
local itemName, retLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType, itemTexture, itemEquipLoc, itemSellPrice = GetItemInfo(tonumber(itemID))
|
|
||||||
if itemName then
|
if itemName then
|
||||||
itemCache[itemLink] = {itemName, retLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType, itemTexture, itemEquipLoc, itemSellPrice}
|
itemCache[itemLink] = {itemName, retLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType, itemTexture, itemEquipLoc, itemSellPrice}
|
||||||
return itemName, retLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType, itemTexture, itemEquipLoc, itemSellPrice
|
return itemName, retLink, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType, itemTexture, itemEquipLoc, itemSellPrice
|
||||||
@@ -259,14 +259,12 @@ function Utils:GetSpecializedBagType(bagID)
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Extract itemID from link
|
local itemID = self:ExtractItemID(link)
|
||||||
local _, _, itemID = string.find(link, "item:(%d+)")
|
|
||||||
if not itemID then
|
if not itemID then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Use GetItemInfo to get subType (Turtle WoW signature)
|
local itemName, _, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType = self:GetItemInfoSafe(itemID)
|
||||||
local itemName, _, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType = GetItemInfo(tonumber(itemID))
|
|
||||||
if itemType then
|
if itemType then
|
||||||
-- Check for exact subtype matches
|
-- Check for exact subtype matches
|
||||||
local typeLower = string.lower(itemType)
|
local typeLower = string.lower(itemType)
|
||||||
@@ -310,8 +308,8 @@ local SOUL_SHARD_ID = 6265
|
|||||||
-- Check if item is a Soul Shard
|
-- Check if item is a Soul Shard
|
||||||
function Utils:IsSoulShard(itemLink)
|
function Utils:IsSoulShard(itemLink)
|
||||||
if not itemLink then return false end
|
if not itemLink then return false end
|
||||||
local _, _, itemID = string.find(itemLink, "item:(%d+)")
|
local itemID = self:ExtractItemID(itemLink)
|
||||||
return tonumber(itemID) == SOUL_SHARD_ID
|
return itemID == SOUL_SHARD_ID
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Extract hyperlink from item link for tooltip scanning
|
-- Extract hyperlink from item link for tooltip scanning
|
||||||
@@ -344,11 +342,11 @@ function Utils:GetItemPreferredContainer(itemLink)
|
|||||||
return "soul"
|
return "soul"
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Extract itemID and get item info
|
-- Get item info using utility function
|
||||||
local _, _, itemID = string.find(itemLink, "item:(%d+)")
|
local itemID = self:ExtractItemID(itemLink)
|
||||||
if not itemID then return nil end
|
if not itemID then return nil end
|
||||||
|
|
||||||
local itemName, _, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType = GetItemInfo(tonumber(itemID))
|
local itemName, _, itemRarity, itemLevel, itemCategory, itemType, itemStackCount, itemSubType = self:GetItemInfoSafe(itemID)
|
||||||
if not itemType then return nil end
|
if not itemType then return nil end
|
||||||
|
|
||||||
-- Only route PROJECTILE category items that are specifically arrows or bullets
|
-- Only route PROJECTILE category items that are specifically arrows or bullets
|
||||||
|
|||||||
@@ -36,11 +36,10 @@ function EquipmentScanner:ScanEquippedItems()
|
|||||||
local itemLink = GetInventoryItemLink("player", slotID)
|
local itemLink = GetInventoryItemLink("player", slotID)
|
||||||
|
|
||||||
if itemLink then
|
if itemLink then
|
||||||
-- Extract itemID from link
|
local itemID = addon.Modules.Utils:ExtractItemID(itemLink)
|
||||||
local _, _, itemID = string.find(itemLink, "item:(%d+)")
|
|
||||||
local itemName
|
local itemName
|
||||||
if itemID then
|
if itemID then
|
||||||
itemName = GetItemInfo(tonumber(itemID))
|
itemName = addon.Modules.Utils:GetItemInfoSafe(itemID)
|
||||||
end
|
end
|
||||||
equipped[slotName] = {
|
equipped[slotName] = {
|
||||||
link = itemLink,
|
link = itemLink,
|
||||||
|
|||||||
+3
-59
@@ -1278,28 +1278,11 @@ function BagFrame:UpdateBorderVisibility()
|
|||||||
hideBorders = false
|
hideBorders = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Use helper function with constants
|
||||||
if hideBorders then
|
if hideBorders then
|
||||||
-- Hide decorative borders but add thin white border
|
addon:ApplyBackdrop(frame, "MINIMALIST_BORDER", "DEFAULT")
|
||||||
frame:SetBackdrop({
|
|
||||||
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
|
||||||
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
|
|
||||||
tile = true,
|
|
||||||
tileSize = 32,
|
|
||||||
edgeSize = 2,
|
|
||||||
insets = { left = 0, right = 0, top = 0, bottom = 0 }
|
|
||||||
})
|
|
||||||
frame:SetBackdropColor(0, 0, 0, 0.9)
|
|
||||||
frame:SetBackdropBorderColor(1, 1, 1, 1)
|
|
||||||
else
|
else
|
||||||
frame:SetBackdrop({
|
addon:ApplyBackdrop(frame, "DEFAULT_FRAME", "DEFAULT")
|
||||||
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
|
||||||
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
|
|
||||||
tile = true,
|
|
||||||
tileSize = 32,
|
|
||||||
edgeSize = 32,
|
|
||||||
insets = { left = 11, right = 12, top = 12, bottom = 11 }
|
|
||||||
})
|
|
||||||
frame:SetBackdropColor(0, 0, 0, 0.9)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1396,42 +1379,6 @@ local function ReplaceBagOpenFunctions()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Update your existing HookDefaultBags function to be more comprehensive
|
-- Update your existing HookDefaultBags function to be more comprehensive
|
||||||
local function HookDefaultBags()
|
|
||||||
-- Override ToggleBackpack
|
|
||||||
local originalToggleBackpack = ToggleBackpack
|
|
||||||
function ToggleBackpack()
|
|
||||||
BagFrame:Toggle()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Override OpenAllBags
|
|
||||||
local originalOpenAllBags = OpenAllBags
|
|
||||||
function OpenAllBags()
|
|
||||||
Guda_BagFrame:Show()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Override CloseAllBags
|
|
||||||
local originalCloseAllBags = CloseAllBags
|
|
||||||
function CloseAllBags()
|
|
||||||
Guda_BagFrame:Hide()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Use the container hook approach
|
|
||||||
HookBagContainers()
|
|
||||||
|
|
||||||
-- OR use the function replacement approach (comment out one)
|
|
||||||
ReplaceBagOpenFunctions()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Also add this to your initialization to ensure it runs after UI is loaded
|
|
||||||
local function DelayedHook()
|
|
||||||
-- Wait a bit for the UI to load completely
|
|
||||||
local frame = CreateFrame("Frame")
|
|
||||||
frame:SetScript("OnUpdate", function()
|
|
||||||
frame:SetScript("OnUpdate", nil)
|
|
||||||
HookBagContainers()
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Bag Slot Button Handlers
|
-- Bag Slot Button Handlers
|
||||||
|
|
||||||
-- OnLoad handler for bag slot buttons
|
-- OnLoad handler for bag slot buttons
|
||||||
@@ -1741,9 +1688,6 @@ function BagFrame:Initialize()
|
|||||||
-- Hook default bag functions
|
-- Hook default bag functions
|
||||||
HookDefaultBags()
|
HookDefaultBags()
|
||||||
|
|
||||||
-- Delayed hook for bag containers (runs after UI loads)
|
|
||||||
DelayedHook()
|
|
||||||
|
|
||||||
-- Update on bag changes
|
-- Update on bag changes
|
||||||
addon.Modules.Events:OnBagUpdate(function()
|
addon.Modules.Events:OnBagUpdate(function()
|
||||||
if not currentViewChar then
|
if not currentViewChar then
|
||||||
|
|||||||
+3
-20
@@ -754,28 +754,11 @@ function BankFrame:UpdateBorderVisibility()
|
|||||||
hideBorders = false
|
hideBorders = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Use helper function with constants
|
||||||
if hideBorders then
|
if hideBorders then
|
||||||
-- Hide decorative borders but add thin white border
|
addon:ApplyBackdrop(frame, "MINIMALIST_BORDER", "DEFAULT")
|
||||||
frame:SetBackdrop({
|
|
||||||
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
|
||||||
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
|
|
||||||
tile = true,
|
|
||||||
tileSize = 32,
|
|
||||||
edgeSize = 2,
|
|
||||||
insets = { left = 0, right = 0, top = 0, bottom = 0 }
|
|
||||||
})
|
|
||||||
frame:SetBackdropColor(0, 0, 0, 0.9)
|
|
||||||
frame:SetBackdropBorderColor(1, 1, 1, 1)
|
|
||||||
else
|
else
|
||||||
frame:SetBackdrop({
|
addon:ApplyBackdrop(frame, "DEFAULT_FRAME", "DEFAULT")
|
||||||
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
|
||||||
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
|
|
||||||
tile = true,
|
|
||||||
tileSize = 32,
|
|
||||||
edgeSize = 32,
|
|
||||||
insets = { left = 11, right = 12, top = 12, bottom = 11 }
|
|
||||||
})
|
|
||||||
frame:SetBackdropColor(0, 0, 0, 0.9)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+5
-41
@@ -364,58 +364,22 @@ function Guda_SettingsPopup_HideBordersCheckbox_OnClick(self)
|
|||||||
Guda.Modules.DB:SetSetting("hideBorders", isChecked)
|
Guda.Modules.DB:SetSetting("hideBorders", isChecked)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Update border visibility on both bag and bank frames
|
-- Update border visibility on both bag and bank frames using helper function
|
||||||
local bagFrame = getglobal("Guda_BagFrame")
|
local bagFrame = getglobal("Guda_BagFrame")
|
||||||
if bagFrame then
|
if bagFrame then
|
||||||
if isChecked then
|
if isChecked then
|
||||||
-- Hide decorative borders but add thin white border
|
Guda:ApplyBackdrop(bagFrame, "MINIMALIST_BORDER", "DEFAULT")
|
||||||
bagFrame:SetBackdrop({
|
|
||||||
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
|
||||||
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
|
|
||||||
tile = true,
|
|
||||||
tileSize = 12,
|
|
||||||
edgeSize = 2,
|
|
||||||
insets = { left = 0, right = 0, top = 0, bottom = 0 }
|
|
||||||
})
|
|
||||||
bagFrame:SetBackdropColor(0, 0, 0, 0.9)
|
|
||||||
bagFrame:SetBackdropBorderColor(1, 1, 1, 1)
|
|
||||||
else
|
else
|
||||||
bagFrame:SetBackdrop({
|
Guda:ApplyBackdrop(bagFrame, "DEFAULT_FRAME", "DEFAULT")
|
||||||
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
|
||||||
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
|
|
||||||
tile = true,
|
|
||||||
tileSize = 32,
|
|
||||||
edgeSize = 32,
|
|
||||||
insets = { left = 11, right = 12, top = 12, bottom = 11 }
|
|
||||||
})
|
|
||||||
bagFrame:SetBackdropColor(0, 0, 0, 0.9)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local bankFrame = getglobal("Guda_BankFrame")
|
local bankFrame = getglobal("Guda_BankFrame")
|
||||||
if bankFrame then
|
if bankFrame then
|
||||||
if isChecked then
|
if isChecked then
|
||||||
-- Hide decorative borders but add thin white border
|
Guda:ApplyBackdrop(bankFrame, "MINIMALIST_BORDER", "DEFAULT")
|
||||||
bankFrame:SetBackdrop({
|
|
||||||
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
|
||||||
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
|
|
||||||
tile = true,
|
|
||||||
tileSize = 32,
|
|
||||||
edgeSize = 2,
|
|
||||||
insets = { left = 0, right = 0, top = 0, bottom = 0 }
|
|
||||||
})
|
|
||||||
bankFrame:SetBackdropColor(0, 0, 0, 0.9)
|
|
||||||
bankFrame:SetBackdropBorderColor(1, 1, 1, 1)
|
|
||||||
else
|
else
|
||||||
bankFrame:SetBackdrop({
|
Guda:ApplyBackdrop(bankFrame, "DEFAULT_FRAME", "DEFAULT")
|
||||||
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
|
|
||||||
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
|
|
||||||
tile = true,
|
|
||||||
tileSize = 32,
|
|
||||||
edgeSize = 32,
|
|
||||||
insets = { left = 11, right = 12, top = 12, bottom = 11 }
|
|
||||||
})
|
|
||||||
bankFrame:SetBackdropColor(0, 0, 0, 0.9)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user