mirror of
https://codeberg.org/Duvelcorp/MetaHunt.git
synced 2026-09-22 15:46:59 +00:00
162 lines
4.3 KiB
Lua
162 lines
4.3 KiB
Lua
------------------------------------------------------
|
|
-- MetaHunt: AutoBuy Module
|
|
-- Standalone module shell for vendor auto-buy features.
|
|
------------------------------------------------------
|
|
|
|
local MTH_AutoBuy = {
|
|
name = "autobuy",
|
|
enabled = false,
|
|
version = "1.0.3",
|
|
events = {
|
|
"VARIABLES_LOADED",
|
|
"MERCHANT_SHOW",
|
|
"MERCHANT_UPDATE",
|
|
"MERCHANT_CLOSED",
|
|
},
|
|
initialized = false,
|
|
}
|
|
|
|
local function AB_Log(message, severity)
|
|
if type(MTH_Log) == "function" then
|
|
MTH_Log("[AutoBuy] " .. tostring(message or ""), severity)
|
|
end
|
|
end
|
|
|
|
local AB_Engine
|
|
|
|
local function AB_Trace(message)
|
|
return
|
|
end
|
|
|
|
local function AB_EnsureBridgeFrame(moduleRef)
|
|
if MTH_AutoBuy._bridgeFrame then
|
|
return MTH_AutoBuy._bridgeFrame
|
|
end
|
|
|
|
local frame = CreateFrame("Frame", "MTH_AutoBuyBridgeFrame")
|
|
if not frame then
|
|
AB_Log("failed to create bridge frame", "error")
|
|
return nil
|
|
end
|
|
|
|
frame:RegisterEvent("VARIABLES_LOADED")
|
|
frame:RegisterEvent("MERCHANT_SHOW")
|
|
frame:RegisterEvent("MERCHANT_UPDATE")
|
|
frame:RegisterEvent("MERCHANT_CLOSED")
|
|
frame:SetScript("OnEvent", function(_, eventName)
|
|
eventName = eventName or event
|
|
local engine = AB_Engine()
|
|
if not engine then
|
|
AB_Trace("bridge event=" .. tostring(eventName) .. " engine missing")
|
|
return
|
|
end
|
|
|
|
if eventName == "VARIABLES_LOADED" then
|
|
engine:Init()
|
|
local store = engine:EnsureDefaults()
|
|
AB_Trace("bridge VARIABLES_LOADED store.enabled=" .. tostring(store and store.enabled)
|
|
.. " projectiles.enabled=" .. tostring(store and store.projectiles and store.projectiles.enabled))
|
|
return
|
|
end
|
|
|
|
if eventName == "MERCHANT_SHOW" or eventName == "MERCHANT_UPDATE" then
|
|
AB_Trace("bridge " .. tostring(eventName) .. " -> engine")
|
|
engine:OnMerchantEvent(eventName)
|
|
elseif eventName == "MERCHANT_CLOSED" then
|
|
AB_Trace("bridge MERCHANT_CLOSED -> engine")
|
|
if engine.OnMerchantClosed then
|
|
engine:OnMerchantClosed()
|
|
end
|
|
end
|
|
end)
|
|
|
|
MTH_AutoBuy._bridgeFrame = frame
|
|
MTH_AutoBuy._bridgeActive = true
|
|
return frame
|
|
end
|
|
|
|
AB_Engine = function()
|
|
return MTH_AutoBuyEngine
|
|
end
|
|
|
|
function MTH_AutoBuy:init()
|
|
local engine = AB_Engine()
|
|
if not engine then
|
|
AB_Log("init failed: engine missing", "error")
|
|
AB_Trace("init failed: engine missing")
|
|
return
|
|
end
|
|
engine:Init()
|
|
AB_EnsureBridgeFrame(self)
|
|
self.initialized = true
|
|
AB_Trace("init done")
|
|
if self.enabled then
|
|
AB_Log("module initialized", "debug")
|
|
end
|
|
end
|
|
|
|
function MTH_AutoBuy:setEnabled(enabled)
|
|
if not self.initialized then
|
|
self:init()
|
|
end
|
|
local engine = AB_Engine()
|
|
if not engine then
|
|
AB_Trace("setEnabled ignored: engine missing")
|
|
return
|
|
end
|
|
local store = engine:EnsureDefaults()
|
|
store.enabled = enabled and true or false
|
|
AB_EnsureBridgeFrame(self)
|
|
AB_Trace("setEnabled store.enabled=" .. tostring(store.enabled))
|
|
end
|
|
|
|
function MTH_AutoBuy:onEvent(event)
|
|
local engine = AB_Engine()
|
|
if not engine then
|
|
AB_Log("onEvent ignored: engine missing, event=" .. tostring(event), "debug")
|
|
AB_Trace("engine missing, event=" .. tostring(event))
|
|
return
|
|
end
|
|
if self._bridgeActive and (event == "MERCHANT_SHOW" or event == "MERCHANT_UPDATE" or event == "MERCHANT_CLOSED") then
|
|
return
|
|
end
|
|
|
|
AB_Log("onEvent event=" .. tostring(event) .. " module.enabled=" .. tostring(self.enabled), "debug")
|
|
|
|
if event == "VARIABLES_LOADED" then
|
|
engine:Init()
|
|
AB_EnsureBridgeFrame(self)
|
|
AB_Log("onEvent VARIABLES_LOADED -> engine init", "debug")
|
|
local store = engine:EnsureDefaults()
|
|
AB_Trace("VARIABLES_LOADED module.enabled=" .. tostring(self.enabled)
|
|
.. " store.enabled=" .. tostring(store and store.enabled)
|
|
.. " projectiles.enabled=" .. tostring(store and store.projectiles and store.projectiles.enabled))
|
|
return
|
|
end
|
|
|
|
if not self.enabled then
|
|
AB_Log("onEvent ignored: module disabled", "debug")
|
|
if event == "MERCHANT_SHOW" or event == "MERCHANT_UPDATE" then
|
|
AB_Trace(tostring(event) .. " ignored: module disabled")
|
|
end
|
|
return
|
|
end
|
|
|
|
if event == "MERCHANT_SHOW" or event == "MERCHANT_UPDATE" then
|
|
AB_Log("onEvent merchant event forwarded: " .. tostring(event), "debug")
|
|
AB_Trace("forwarding " .. tostring(event) .. " to engine")
|
|
engine:OnMerchantEvent(event)
|
|
elseif event == "MERCHANT_CLOSED" then
|
|
AB_Trace("forwarding MERCHANT_CLOSED to engine")
|
|
if engine.OnMerchantClosed then
|
|
engine:OnMerchantClosed()
|
|
end
|
|
end
|
|
end
|
|
|
|
function MTH_AutoBuy:cleanup()
|
|
AB_Log("module cleanup", "debug")
|
|
end
|
|
|
|
MTH:RegisterModule("autobuy", MTH_AutoBuy)
|