Files
coa-elvui/ElvUI/Modules/Skins/Blizzard/Merchant.lua
T
Anthony Narkevicius 714ca84456 Support for Extended Vendor (#49)
* Support for Extended Vendor

Accommodate the additional vendor slots and buyback slots.

* Adjust Repair Icons as well
2023-12-31 06:08:50 -07:00

258 lines
8.6 KiB
Lua

local E, L, V, P, G = unpack(select(2, ...)) --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local S = E:GetModule("Skins")
--Lua functions
local _G = _G
local unpack = unpack
--WoW API / Variables
local GetBuybackItemInfo = GetBuybackItemInfo
local GetItemInfo = GetItemInfo
local GetItemQualityColor = GetItemQualityColor
local GetMerchantNumItems = GetMerchantNumItems
S:AddCallback("Skin_Merchant", function()
if not E.private.skins.blizzard.enable or not E.private.skins.blizzard.merchant then return end
local extLoaded = IsAddOnLoaded("ExtVendor")
local MerchantFrame = _G.MerchantFrame
MerchantFrame:StripTextures(true)
MerchantFrame:CreateBackdrop("Transparent")
MerchantFrame.backdrop:Point("TOPLEFT", 11, -12)
MerchantFrame.backdrop:Point("BOTTOMRIGHT", -32, 76)
S:SetUIPanelWindowInfo(MerchantFrame, "width")
S:SetBackdropHitRect(MerchantFrame)
MerchantFrame:EnableMouseWheel(true)
MerchantFrame:SetScript("OnMouseWheel", function(_, value)
if value > 0 then
if MerchantPrevPageButton:IsShown() and MerchantPrevPageButton:IsEnabled() == 1 then
MerchantPrevPageButton_OnClick()
end
else
if MerchantNextPageButton:IsShown() and MerchantNextPageButton:IsEnabled() == 1 then
MerchantNextPageButton_OnClick()
end
end
end)
S:HandleCloseButton(MerchantFrameCloseButton, MerchantFrame.backdrop)
local function skinMerchantButton(buttonName, buyback)
local button = _G[buttonName]
local itemButton = _G[buttonName.."ItemButton"]
local icon = _G[buttonName.."ItemButtonIconTexture"]
local name = _G[buttonName.."Name"]
local nameFrame = _G[buttonName.."NameFrame"]
local money = _G[buttonName.."MoneyFrame"]
local slot = _G[buttonName.."SlotTexture"]
button:StripTextures(true)
button:CreateBackdrop("Default")
button.backdrop:Point("TOPLEFT", -2, 2)
if buyback then
button.backdrop:Point("BOTTOMRIGHT", 4, -13)
else
button.backdrop:Point("BOTTOMRIGHT", 4, -6)
end
itemButton:StripTextures()
itemButton:StyleButton()
itemButton:SetTemplate("Default", true)
itemButton:Size(40)
itemButton:Point("TOPLEFT", 4, -4)
icon:SetTexCoord(unpack(E.TexCoords))
icon:SetInside()
name:Point("LEFT", slot, "RIGHT", -4, 5)
nameFrame:Point("LEFT", slot, "RIGHT", -6, -17)
money:ClearAllPoints()
money:Point("BOTTOMLEFT", itemButton, "BOTTOMRIGHT", 3, 0)
if not buyback then
for j = 1, 2 do
local currencyItem = _G[buttonName.."AltCurrencyFrameItem"..j]
local currencyIcon = _G[buttonName.."AltCurrencyFrameItem"..j.."Texture"]
currencyIcon.backdrop = CreateFrame("Frame", nil, currencyItem)
currencyIcon.backdrop:SetTemplate("Default")
currencyIcon.backdrop:SetFrameLevel(currencyItem:GetFrameLevel())
currencyIcon.backdrop:SetOutside(currencyIcon)
currencyIcon:SetTexCoord(unpack(E.TexCoords))
currencyIcon:SetParent(currencyIcon.backdrop)
end
end
end
for i = 1, 20 do
if _G["MerchantItem"..i] then
skinMerchantButton("MerchantItem"..i)
if not extLoaded then
if i % 2 == 0 then
_G["MerchantItem"..i]:Point("TOPLEFT", _G["MerchantItem"..i-1], "TOPRIGHT", 13, 0)
end
end
end
end
skinMerchantButton("MerchantBuyBackItem", true)
S:HandleNextPrevButton(MerchantNextPageButton, nil, nil, true)
S:HandleNextPrevButton(MerchantPrevPageButton, nil, nil, true)
S:HandleCheckBox(MerchantFrameSellJunkFrameAutoSellCheck)
S:HandleButton(MerchantRepairItemButton)
if extLoaded then
S:HandleEditBox(MerchantFrameSearchBox)
S:HandleButton(MerchantFrameFilterButton)
end
MerchantRepairItemButton:StyleButton(false)
-- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 128, 64, 26, 26, 5, 6
MerchantRepairItemButton:GetRegions():SetTexCoord(0.0390625, 0.2421875, 0.09375, 0.5)
MerchantRepairItemButton:GetRegions():SetInside()
S:HandleButton(MerchantRepairAllButton)
MerchantRepairAllIcon:StyleButton(false)
-- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 128, 64, 26, 26, 41, 6
MerchantRepairAllIcon:SetTexCoord(0.3203125, 0.5234375, 0.09375, 0.5)
MerchantRepairAllIcon:SetInside()
S:HandleButton(MerchantGuildBankRepairButton)
MerchantGuildBankRepairButton:StyleButton()
-- texWidth, texHeight, cropWidth, cropHeight, offsetX, offsetY = 128, 64, 26, 26, 77, 6
MerchantGuildBankRepairButtonIcon:SetTexCoord(0.6015625, 0.8046875, 0.09375, 0.5)
MerchantGuildBankRepairButtonIcon:SetInside()
S:HandleTab(MerchantFrameTab1)
S:HandleTab(MerchantFrameTab2)
MerchantNameText:Point("TOP", -6, -22)
MerchantItem1:SetPoint("TOPLEFT", 21, -54)
MerchantFrameSellJunkFrameAutoSellCheck:Point("BOTTOMLEFT", MerchantFrame, "BOTTOMLEFT", 18, 80)
MerchantRepairSettingsButton:Point("BOTTOM", MerchantFrame, "BOTTOM", -38, 112)
if not extLoaded then
MerchantPrevPageButton:Point("CENTER", MerchantFrame, "BOTTOMLEFT", 37, 172)
MerchantNextPageButton:Point("CENTER", MerchantFrame, "BOTTOMLEFT", 324, 172)
MerchantPageText:Point("BOTTOM", -14, 166)
MerchantBuyBackItem:Point("TOPLEFT", MerchantItem10, "BOTTOMLEFT", 0, -39)
end
MerchantGuildBankRepairButton:Point("LEFT", MerchantRepairAllButton, "RIGHT", 5, 0)
MerchantRepairItemButton:Point("RIGHT", MerchantRepairAllButton, "LEFT", -5, 0)
MerchantRepairItemButton.SetPoint = E.noop
MerchantMoneyFrame:Point("BOTTOMRIGHT", -30, 86)
MerchantFrameTab1:Point("CENTER", MerchantFrame, "BOTTOMLEFT", 54, 62)
MerchantFrameTab2:Point("LEFT", MerchantFrameTab1, "RIGHT", -15, 0)
hooksecurefunc(MerchantRepairAllButton, "Show", function(self)
-- CanMerchantRepair && CanGuildBankRepair
if self:GetWidth() == 32 then
MerchantRepairText:SetPoint("CENTER", MerchantFrame, "BOTTOMLEFT", 82, 151)
MerchantRepairAllButton:Point("BOTTOMRIGHT", MerchantFrame, "BOTTOMLEFT", 100, 105)
else
MerchantRepairText:SetPoint("BOTTOMLEFT", MerchantFrame, "BOTTOMLEFT", 11, 125)
MerchantRepairAllButton:Point("BOTTOMRIGHT", MerchantFrame, "BOTTOMLEFT", 157, extLoaded and 103 or 113)
end
end)
hooksecurefunc("MerchantFrame_UpdateMerchantInfo", function()
local numMerchantItems = GetMerchantNumItems()
local index = (MerchantFrame.page - 1) * MERCHANT_ITEMS_PER_PAGE
local _, button, name, quality
-- for i = 1, BUYBACK_ITEMS_PER_PAGE do
for i = 1, MERCHANT_ITEMS_PER_PAGE do
index = index + 1
if index <= numMerchantItems then
button = _G["MerchantItem"..i.."ItemButton"]
name = _G["MerchantItem"..i.."Name"]
if button.link then
_, _, quality = GetItemInfo(button.link)
if quality then
local r, g, b = GetItemQualityColor(quality)
button:SetBackdropBorderColor(r, g, b)
name:SetTextColor(r, g, b)
else
button:SetBackdropBorderColor(unpack(E.media.bordercolor))
name:SetTextColor(1, 1, 1)
end
else
button:SetBackdropBorderColor(unpack(E.media.bordercolor))
name:SetTextColor(1, 1, 1)
end
end
local itemName = GetBuybackItemInfo(GetNumBuybackItems())
if itemName then
_, _, quality = GetItemInfo(itemName)
if quality then
local r, g, b = GetItemQualityColor(quality)
MerchantBuyBackItemItemButton:SetBackdropBorderColor(r, g, b)
MerchantBuyBackItemName:SetTextColor(r, g, b)
else
MerchantBuyBackItemItemButton:SetBackdropBorderColor(unpack(E.media.bordercolor))
MerchantBuyBackItemName:SetTextColor(1, 1, 1)
end
else
MerchantBuyBackItemItemButton:SetBackdropBorderColor(unpack(E.media.bordercolor))
end
end
if not extLoaded then
MerchantItem3:SetPoint("TOPLEFT", "MerchantItem1", "BOTTOMLEFT", 0, -11)
MerchantItem5:SetPoint("TOPLEFT", "MerchantItem3", "BOTTOMLEFT", 0, -11)
MerchantItem7:SetPoint("TOPLEFT", "MerchantItem5", "BOTTOMLEFT", 0, -11)
MerchantItem9:SetPoint("TOPLEFT", "MerchantItem7", "BOTTOMLEFT", 0, -11)
end
end)
hooksecurefunc("MerchantFrame_UpdateBuybackInfo", function()
local numBuybackItems = GetNumBuybackItems()
local _, button, name, quality
for i = 1, BUYBACK_ITEMS_PER_PAGE do
if i <= numBuybackItems then
local itemName = GetBuybackItemInfo(i)
if itemName then
button = _G["MerchantItem"..i.."ItemButton"]
name = _G["MerchantItem"..i.."Name"]
_, _, quality = GetItemInfo(itemName)
if quality then
local r, g, b = GetItemQualityColor(quality)
button:SetBackdropBorderColor(r, g, b)
name:SetTextColor(r, g, b)
else
button:SetBackdropBorderColor(unpack(E.media.bordercolor))
name:SetTextColor(1, 1, 1)
end
end
end
end
if not extLoaded then
MerchantItem3:SetPoint("TOPLEFT", "MerchantItem1", "BOTTOMLEFT", 0, -15)
MerchantItem5:SetPoint("TOPLEFT", "MerchantItem3", "BOTTOMLEFT", 0, -15)
MerchantItem7:SetPoint("TOPLEFT", "MerchantItem5", "BOTTOMLEFT", 0, -15)
MerchantItem9:SetPoint("TOPLEFT", "MerchantItem7", "BOTTOMLEFT", 0, -15)
end
end)
end)