Files
shaga fa37f641e5 Take over from ShaguTweaks when both are installed
ShagaTweaks and the original ShaguTweaks share the ShaguTweaks namespace,
so running both applies every tweak twice. When the original is loaded too,
ShagaTweaks now stays idle for that session and turns ShaguTweaks and
ShaguTweaks-extras off, so from the next login or /reload only ShagaTweaks
runs. Settings carry over: both addons save ShaguTweaks_config and
ShaguTweaks_cache, so the session that has both writes the original's
settings into ShagaTweaks' saved variables.
2026-10-15 04:30:27 +00:00

160 lines
5.2 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
-- ShagaTweaks replaces ShaguTweaks: when the original is loaded as well, it
-- runs this session and is turned off from the next one. Its settings carry
-- over, as both addons save ShaguTweaks_config and ShaguTweaks_cache.
if IsAddOnLoaded("ShaguTweaks") then
DisableAddOn("ShaguTweaks")
DisableAddOn("ShaguTweaks-extras")
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