You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.1 KiB
153 lines
4.1 KiB
local XLoot = LibStub("AceAddon-3.0"):NewAddon(select(2, ...), "XLoot")
|
|
_G.XLoot = XLoot
|
|
local L = XLoot.L
|
|
local print, wprint = print, print
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- Settings
|
|
local defaults = {
|
|
profile = {
|
|
skin = "smooth",
|
|
skin_anchors = false,
|
|
}
|
|
}
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- Module helpers
|
|
|
|
-- Return module localization with new module
|
|
local _NewModule = XLoot.NewModule
|
|
function XLoot:NewModule(module_name, ...)
|
|
local new = _NewModule(self, module_name, ...)
|
|
return new, self["L_"..module_name]
|
|
end
|
|
|
|
local _GetModule = XLoot.GetModule
|
|
function XLoot:GetModule(module_name, ...)
|
|
return module_name == "Core" and XLoot or _GetModule(self, module_name, ...)
|
|
end
|
|
|
|
-- Set up basic event handler
|
|
local function SetEventHandler(addon, frame)
|
|
if not frame then
|
|
frame = CreateFrame("Frame")
|
|
addon.eframe = frame
|
|
end
|
|
frame:SetScript("OnEvent", function(self, event, ...)
|
|
if addon[event] then
|
|
addon[event](addon, ...)
|
|
end
|
|
end)
|
|
end
|
|
|
|
XLoot.slash_commands = {}
|
|
function XLoot:SetSlashCommand(slash, func)
|
|
local key = "XLOOT_"..slash
|
|
_G["SLASH_"..key.."1"] = "/"..slash
|
|
_G.SlashCmdList[key] = func
|
|
end
|
|
|
|
function XLoot:ShowOptionPanel(module)
|
|
if not XLootOptions then
|
|
EnableAddOn("XLoot_Options")
|
|
LoadAddOn("XLoot_Options")
|
|
end
|
|
XLootOptions:OpenPanel(module)
|
|
end
|
|
|
|
function XLoot:ApplyOptions(in_options)
|
|
self.opt = self.db.profile
|
|
-- Update skin
|
|
XLoot:SetSkin(self.opt.skin)
|
|
for _,v in ipairs(XLoot.skinners) do
|
|
v:Reskin()
|
|
end
|
|
-- Update all modules
|
|
for k,v in pairs(XLoot.modules) do
|
|
if v.db then
|
|
v.opt = v.db.profile
|
|
end
|
|
if v.ApplyOptions then
|
|
v:ApplyOptions(in_options)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Add shortcuts for modules
|
|
XLoot:SetDefaultModulePrototype({
|
|
InitializeModule = function(self, defaults, frame)
|
|
local module_name = self:GetName()
|
|
-- Set up DB namespace
|
|
self.db = XLoot.db:RegisterNamespace(module_name, defaults)
|
|
self.opt = self.db.profile
|
|
|
|
function self.ShowOptions()
|
|
XLoot:ShowOptionPanel(self)
|
|
end
|
|
-- Default slash command
|
|
XLoot:SetSlashCommand(("XLoot"..module_name):lower(), self.ShowOptions)
|
|
-- Set event handler
|
|
self:SetEventHandler(frame)
|
|
end,
|
|
SetEventHandler = SetEventHandler,
|
|
OnProfileChanged = XLoot.OnProfileChanged,
|
|
})
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- Prototype helper
|
|
|
|
function XLoot.Prototype_New(self, new)
|
|
local new = new or {}
|
|
for k,v in pairs(self) do
|
|
if k ~= "New" and k ~= "_New" then
|
|
if new[k] ~= nil then
|
|
new['_'..k] = new[k]
|
|
end
|
|
rawset(new, k, v)
|
|
end
|
|
end
|
|
return new
|
|
end
|
|
|
|
function XLoot.NewPrototype()
|
|
return { New = XLoot.Prototype_New, _New = XLoot.Prototype_New }
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- Addon init
|
|
|
|
function XLoot:OnInitialize()
|
|
-- Init DB
|
|
self.db = LibStub("AceDB-3.0"):New("XLootADB", defaults, true)
|
|
self.opt = self.db.profile
|
|
self.db.RegisterCallback(self, "OnProfileChanged", "ApplyOptions")
|
|
self.db.RegisterCallback(self, "OnProfileCopied", "ApplyOptions")
|
|
self.db.RegisterCallback(self, "OnProfileReset", "ApplyOptions")
|
|
-- Load skins, import Masque skins
|
|
self:SkinsOnInitialize()
|
|
end
|
|
|
|
function XLoot:OnEnable()
|
|
-- Check for old addons
|
|
for _,name in ipairs({ "XLoot1.0", "XLootGroup", "XLootMaster", "XLootMonitor" }) do
|
|
if IsAddOnLoaded(name) then
|
|
DisableAddOn(name)
|
|
wprint(("|c2244dd22XLoot|r now includes |c2244dd22%s|r - the old version will be disabled on next load, and no longer needs to be installed."):format(name))
|
|
end
|
|
end
|
|
|
|
-- Create option stub
|
|
if Settings then
|
|
EnableAddOn("XLoot_Options")
|
|
LoadAddOn("XLoot_Options")
|
|
else
|
|
local stub = CreateFrame("Frame", "XLootConfigPanel", UIParent)
|
|
stub.name = "XLoot"
|
|
stub:Hide()
|
|
InterfaceOptions_AddCategory(stub)
|
|
stub:SetScript("OnShow", function() self:ShowOptionPanel(self) end)
|
|
end
|
|
self:SetSlashCommand("xloot", function() self:ShowOptionPanel(self) end)
|
|
end
|
|
|
|
|