local _G = _G or getfenv(0) SLASH_RELOAD1 = '/rl' function SlashCmdList.RELOAD(msg, editbox) ReloadUI() end local function ChatMessage(msg) DEFAULT_CHAT_FRAME:AddMessage("|cffffff00" .. tostring(msg or "nil")) end -- Keep the client's native message() function when available. Older clients -- without print() still get the historical ShaguTweaks chat fallback. message = message or ChatMessage print = print or ChatMessage local function ChatErrorHandler(msg) DEFAULT_CHAT_FRAME:AddMessage("|cffff0000" .. tostring(msg or "nil")) end -- Route uncaught Lua errors to chat without replacing Lua's global error(). -- Addons rely on error() to abort invalid execution paths. seterrorhandler(ChatErrorHandler) 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 -- Libraries that can stay dormant until a module actually consumes them -- get one final activation pass after every enabled module has registered -- its callbacks. if ShaguTweaks.libnameplate and ShaguTweaks.libnameplate.EnableIfNeeded then ShaguTweaks.libnameplate:EnableIfNeeded() 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 = "/st", "/stweaks", "/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("|cffffcc00Shagu|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