The addon folder, toc files and title are now ShagaTweaks, and the modules that load their own textures look them up in the ShagaTweaks folder. The Lua namespace (ShaguTweaks) and the saved variables (ShaguTweaks_config, ShaguTweaks_cache) keep their names, so existing settings carry over and addons that integrate with ShaguTweaks keep working. /st also answers to /shagatweaks.
151 lines
4.9 KiB
Lua
151 lines
4.9 KiB
Lua
local _G = _G or getfenv(0)
|
|
|
|
SLASH_RELOAD1 = '/rl'
|
|
function SlashCmdList.RELOAD(msg, editbox) ReloadUI() end
|
|
|
|
message = function(msg)
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffffff00" .. ( msg or "nil" ))
|
|
end
|
|
print = print or message
|
|
|
|
error = function(msg)
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffff0000".. (msg or "nil" ))
|
|
end
|
|
seterrorhandler(error)
|
|
|
|
ShaguTweaks = CreateFrame("Frame")
|
|
ShaguTweaks.mods = {}
|
|
ShaguTweaks.overwrites = {}
|
|
|
|
-- flag official modules
|
|
local official = true
|
|
|
|
-- load translation tables
|
|
ShaguTweaks.L = (ShaguTweaks_locale[GetLocale()] or ShaguTweaks_locale["enUS"])
|
|
ShaguTweaks.T = (ShaguTweaks_translation[GetLocale()] or ShaguTweaks_translation["enUS"])
|
|
|
|
-- use table index key as translation fallback
|
|
ShaguTweaks.T = setmetatable(ShaguTweaks.T, { __index = function(tab,key)
|
|
local value = tostring(key)
|
|
rawset(tab, key, value)
|
|
return value
|
|
end})
|
|
|
|
ShaguTweaks:RegisterEvent("ADDON_LOADED")
|
|
ShaguTweaks:RegisterEvent("VARIABLES_LOADED")
|
|
ShaguTweaks:SetScript("OnEvent", function()
|
|
-- flag all external modules as unofficial
|
|
if event == "ADDON_LOADED" then
|
|
ShaguTweaks.provider = nil
|
|
official = false
|
|
return
|
|
end
|
|
|
|
-- load current expansion
|
|
local expansion = ShaguTweaks:GetExpansion()
|
|
|
|
-- initialize empty config
|
|
if not ShaguTweaks_config then ShaguTweaks_config = {} end
|
|
|
|
-- initialize overwrites
|
|
ShaguTweaks_config.overwrites = ShaguTweaks_config.overwrites or {}
|
|
|
|
-- read all registered mods
|
|
for title, mod in pairs(ShaguTweaks.mods) do
|
|
-- write initial default config
|
|
if not ShaguTweaks_config[title] then
|
|
ShaguTweaks_config[title] = mod.enabled and 1 or 0
|
|
end
|
|
|
|
-- load possible overwrites
|
|
if mod.config then
|
|
for name, value in pairs(mod.config) do
|
|
ShaguTweaks.overwrites[name] = value
|
|
end
|
|
end
|
|
|
|
-- apply custom overwrites
|
|
if mod.config and ShaguTweaks_config.overwrites then
|
|
for name, value in pairs(ShaguTweaks_config.overwrites) do
|
|
ShaguTweaks.overwrites[name] = value
|
|
mod.config[name] = value
|
|
end
|
|
end
|
|
|
|
-- load enabled mods
|
|
if mod.expansions[expansion] and ShaguTweaks_config[title] == 1 then
|
|
mod:enable()
|
|
end
|
|
end
|
|
end)
|
|
|
|
ShaguTweaks.register = function(self, mod)
|
|
-- add fallback captions and providers to categories
|
|
local provider = ShaguTweaks.provider or "|cffFF5555Mods:|r"
|
|
local category = mod.category or ShaguTweaks.T["General"]
|
|
mod.category = official and category or provider .. " " .. category
|
|
|
|
-- register mod
|
|
ShaguTweaks.mods[mod.title] = mod
|
|
return ShaguTweaks.mods[mod.title]
|
|
end
|
|
|
|
local GetConfigValue = function(conf)
|
|
if type(conf) == "table" and conf.r and conf.g and conf.b then
|
|
return string.format("%s,%s,%s,%s", conf.r, conf.g, conf.b, (conf.a or 1))
|
|
elseif type(conf) == "number" or type(conf) == "string" then
|
|
return conf
|
|
end
|
|
|
|
return ""
|
|
end
|
|
|
|
-- print message without applied hooks
|
|
local originalAddMessage = DEFAULT_CHAT_FRAME.AddMessage
|
|
local stdout = function(msg)
|
|
originalAddMessage(DEFAULT_CHAT_FRAME, msg)
|
|
end
|
|
|
|
-- add /st slash command for custom config overwrites
|
|
SLASH_STWEAKS1, SLASH_STWEAKS2, SLASH_STWEAKS3, SLASH_STWEAKS4 = "/st", "/stweaks", "/shagatweaks", "/shagutweaks"
|
|
SlashCmdList["STWEAKS"] = function(msg)
|
|
local cmd = { ShaguTweaks.strsplit(" ", msg) }
|
|
if cmd[1] == "reset" then
|
|
ShaguTweaks_config.overwrites = {}
|
|
ReloadUI()
|
|
elseif cmd[1] then
|
|
local index = cmd[1]
|
|
local input = cmd[2] or ""
|
|
|
|
-- detect best value format
|
|
local value
|
|
local rgba, _, r, g, b, a = string.find(input, "(.+),(.+),(.+),(.+)")
|
|
|
|
value = rgba and { r = r, g = g, b = b, a = a }
|
|
value = value or tonumber(input) and tonumber(input)
|
|
value = value or input
|
|
|
|
-- validate input and set config
|
|
if not ShaguTweaks.overwrites[index] then
|
|
local text = "|cffff5555Error:|r Overwrite |cffffcc00%s|r does not exists.|r"
|
|
stdout(string.format(text, index), 1, 1, 1, 1)
|
|
elseif type(ShaguTweaks.overwrites[index]) ~= type(value) then
|
|
local text = "|cffff5555Error:|r Overwrite |cffffcc00%s|r requires to be type: |cffffcc00%s|r"
|
|
stdout(string.format(text, index, type(ShaguTweaks.overwrites[index])), 1, 1, 1, 1)
|
|
else
|
|
ShaguTweaks_config.overwrites[index] = value
|
|
local text = "Overwrite |cffffcc00%s|r is now set to: |cffffcc00%s|r"
|
|
stdout(string.format(text, index, input), 1, 1, 1, 1)
|
|
end
|
|
else
|
|
stdout("|cffffcc00Shaga|rTweaks overwrites:", 1, 1, 1, 1)
|
|
stdout("|cffffcc00|r", 1, 1, 1, 1)
|
|
stdout("|cffff5555Warning:|r This is for experienced users only. Do not change values unless you know what you're doing. Use '/st reset' before submitting any bug.", 1, .8, .8, 1)
|
|
stdout("|cffffcc00|r", 1, 1, 1, 1)
|
|
for name, value in ShaguTweaks.spairs(ShaguTweaks.overwrites) do
|
|
stdout(" |cffaaaaaa/st|r " .. name .. " |cffffcc00" .. GetConfigValue(value), 1, 1, 1, 1)
|
|
end
|
|
stdout(" |cffaaaaaa/st|r reset", 1, 1, 1, 1)
|
|
end
|
|
end
|