Files
ShagaTweaks/main.lua
T
shaga 690c0b05ef Rename the addon to ShagaTweaks
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.
2026-10-13 17:09:02 +00:00

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