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.
160 lines
5.2 KiB
Lua
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
|