init
This commit is contained in:
139
Bags/Features.lua
Normal file
139
Bags/Features.lua
Normal file
@@ -0,0 +1,139 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- S-Frames: Bag Module Features (Bags/Features.lua)
|
||||
-- Auto-sell grey + search apply (buttons are now built in Container.lua)
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
SFrames.Bags.Features = {}
|
||||
|
||||
function SFrames.Bags.Features:Initialize()
|
||||
self:SetupAutoSell()
|
||||
self:SetupAutoOpenBags()
|
||||
end
|
||||
|
||||
-- Auto Sell Grey Items when merchant opens
|
||||
function SFrames.Bags.Features:SetupAutoSell()
|
||||
local f = CreateFrame("Frame")
|
||||
f:RegisterEvent("MERCHANT_SHOW")
|
||||
f:SetScript("OnEvent", function()
|
||||
if not (SFramesDB and SFramesDB.Bags and SFramesDB.Bags.sellGrey) then return end
|
||||
for bag = 0, 4 do
|
||||
for slot = 1, GetContainerNumSlots(bag) do
|
||||
local link = GetContainerItemLink(bag, slot)
|
||||
if link then
|
||||
-- Extract item ID from link (format: item:XXXX:...)
|
||||
local _, _, itemString = string.find(link, "item:(%d+)")
|
||||
if itemString then
|
||||
local _, _, _, _, _, _, _, _, _, _, itemSellPrice = GetItemInfo("item:" .. itemString)
|
||||
-- GetItemInfo returns quality as 5th return
|
||||
local _, _, itemRarity = GetItemInfo("item:" .. itemString)
|
||||
-- safer: use a scan tooltip to get quality
|
||||
local scanName, _, scanRarity = GetItemInfo("item:" .. itemString)
|
||||
if scanRarity and scanRarity == 0 then
|
||||
local _, itemCount = GetContainerItemInfo(bag, slot)
|
||||
UseContainerItem(bag, slot)
|
||||
if scanName then
|
||||
SFrames:Print("售出: " .. scanName .. " x" .. (itemCount or 1))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Auto open/close bags at Bank, Merchant, Mail, AH, Trade
|
||||
function SFrames.Bags.Features:SetupAutoOpenBags()
|
||||
local f = CreateFrame("Frame")
|
||||
f:RegisterEvent("MERCHANT_SHOW")
|
||||
f:RegisterEvent("BANKFRAME_OPENED")
|
||||
f:RegisterEvent("MAIL_SHOW")
|
||||
f:RegisterEvent("AUCTION_HOUSE_SHOW")
|
||||
f:RegisterEvent("TRADE_SHOW")
|
||||
|
||||
f:RegisterEvent("MERCHANT_CLOSED")
|
||||
f:RegisterEvent("BANKFRAME_CLOSED")
|
||||
f:RegisterEvent("MAIL_CLOSED")
|
||||
f:RegisterEvent("AUCTION_HOUSE_CLOSED")
|
||||
f:RegisterEvent("TRADE_CLOSED")
|
||||
|
||||
local autoOpened = false
|
||||
|
||||
f:SetScript("OnEvent", function()
|
||||
if not (SFramesDB and SFramesDB.Bags and SFramesDB.Bags.enable) then return end
|
||||
|
||||
-- Shows
|
||||
if event == "MERCHANT_SHOW" or event == "BANKFRAME_OPENED" or event == "MAIL_SHOW" or event == "AUCTION_HOUSE_SHOW" or event == "TRADE_SHOW" then
|
||||
if SFramesBagFrame and not SFramesBagFrame:IsVisible() then
|
||||
autoOpened = true
|
||||
SFrames.Bags.Container:Open()
|
||||
end
|
||||
-- Closes
|
||||
elseif event == "MERCHANT_CLOSED" or event == "BANKFRAME_CLOSED" or event == "MAIL_CLOSED" or event == "AUCTION_HOUSE_CLOSED" or event == "TRADE_CLOSED" then
|
||||
if autoOpened then
|
||||
SFrames.Bags.Container:Close()
|
||||
autoOpened = false
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Search filter - called from the search EditBox OnTextChanged
|
||||
function SFrames.Bags.Features:ApplySearch(query)
|
||||
-- In WoW 1.12 Chinese client, text is GBK encoded.
|
||||
-- using string.lower on GBK strings corrupts Chinese characters because the 2nd byte
|
||||
-- of Chinese characters can hit the ASCII uppercase range (A-Z).
|
||||
local safeQuery = query or ""
|
||||
safeQuery = string.gsub(safeQuery, "^%s+", "")
|
||||
safeQuery = string.gsub(safeQuery, "%s+$", "")
|
||||
if not string.find(safeQuery, "%S") then
|
||||
safeQuery = ""
|
||||
end
|
||||
|
||||
local function ProcessSlots(prefix)
|
||||
for i = 1, 250 do
|
||||
local btn = _G[prefix .. i]
|
||||
if not btn then break end
|
||||
|
||||
local icon = _G[btn:GetName() .. "IconTexture"]
|
||||
|
||||
if btn:IsShown() and icon then
|
||||
if safeQuery == "" then
|
||||
icon:SetVertexColor(1, 1, 1)
|
||||
if btn.border then btn.border:SetAlpha(1) end
|
||||
if btn.junkIcon then btn.junkIcon:SetAlpha(1) end
|
||||
if btn.qualGlow then btn.qualGlow:SetAlpha(0.8) end
|
||||
elseif btn.bagID ~= nil and btn.slotID ~= nil then
|
||||
local link = GetContainerItemLink(btn.bagID, btn.slotID)
|
||||
if link then
|
||||
local name = GetItemInfo(link)
|
||||
if not name then
|
||||
local _, _, parsedName = string.find(link, "%[(.+)%]")
|
||||
name = parsedName
|
||||
end
|
||||
|
||||
-- Exact substring match (safe for GBK)
|
||||
if name and string.find(name, safeQuery, 1, true) then
|
||||
icon:SetVertexColor(1, 1, 1)
|
||||
if btn.border then btn.border:SetAlpha(1) end
|
||||
if btn.junkIcon then btn.junkIcon:SetAlpha(1) end
|
||||
if btn.qualGlow then btn.qualGlow:SetAlpha(0.8) end
|
||||
else
|
||||
icon:SetVertexColor(0.45, 0.45, 0.45)
|
||||
if btn.border then btn.border:SetAlpha(0.4) end
|
||||
if btn.junkIcon then btn.junkIcon:SetAlpha(0.4) end
|
||||
if btn.qualGlow then btn.qualGlow:SetAlpha(0.15) end
|
||||
end
|
||||
else
|
||||
icon:SetVertexColor(0.45, 0.45, 0.45)
|
||||
if btn.border then btn.border:SetAlpha(0.4) end
|
||||
if btn.junkIcon then btn.junkIcon:SetAlpha(0.4) end
|
||||
if btn.qualGlow then btn.qualGlow:SetAlpha(0.15) end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ProcessSlots("SFramesBagSlot")
|
||||
end
|
||||
Reference in New Issue
Block a user