mirror of
https://codeberg.org/Duvelcorp/MetaHunt.git
synced 2026-09-25 09:06:07 +00:00
Unify SavedVariables into two clean roots with one-time migration
Collapse all legacy/scattered SavedVariables from absorbed standalone
addons (FeedOMatic, ZHunter/zButtons, SmartAmmo, AutoQuest, AntiDaze,
AutoStrip, MinimapButton) into two persisted globals with clean per-module
nesting under .modules.<id>.
Migration engine (api/savedvariables.lua):
- MTH_SV_EnsureSchema() with schemaVersion gate, idempotent + non-destructive
- Per-module migrators map old locations -> canonical nested stores
- Driven by an ADDON_LOADED("MetaHunt") handler so it runs only AFTER WoW
loads the real SavedVariables (fixes announce-every-session bug that ran
the migration on empty pre-load defaults)
- One-time player-facing chat announce, gated on real legacy data present
Framework/config:
- core-framework InitSavedVariables no longer runs migration at file-load;
unconditionally strips account-root module aliases
- config.lua stops re-creating root[module] aliases (was duplicating data
onto disk); canonical store stays under .modules.<id>
Modules:
- feedomatic: bind FOM_* globals as runtime aliases into nested store,
drop persisted duplicates and .legacy blob
- zhunter: ZHunterMod_Saved re-pointed at .modules.zhunter
- smartammo/autoquest/antidaze/autostrip/minimapbutton read nested store
TOC trimmed to MTH_SavedVariables + MTH_CharSavedVariables only.
Profiles unchanged (already snapshot/apply the nested .modules structure).
Also includes pet-scan refinements: canonical pet key derivation and
level-independent pet signature (schema v3).
This commit is contained in:
@@ -1,7 +1,3 @@
|
||||
local function MTHSmartAmmo_GetSaved()
|
||||
return MTH_SA_GetSavedTable("MTHSmartAmmo")
|
||||
end
|
||||
|
||||
local function MTHSmartAmmo_GetModuleStore()
|
||||
if MTH and MTH.GetModuleCharSavedVariables then
|
||||
return MTH:GetModuleCharSavedVariables("smartammo")
|
||||
@@ -9,40 +5,43 @@ local function MTHSmartAmmo_GetModuleStore()
|
||||
return nil
|
||||
end
|
||||
|
||||
local function MTHSmartAmmo_IsSmartEnabled()
|
||||
-- Single source of truth: moduleStore.settings.{smartEnabled,reloadEnabled,weaponSwapEnabled}
|
||||
local function MTHSmartAmmo_GetSettings()
|
||||
local moduleStore = MTHSmartAmmo_GetModuleStore()
|
||||
if type(moduleStore) == "table" and moduleStore.smartEnabled ~= nil then
|
||||
return moduleStore.smartEnabled and true or false
|
||||
if type(moduleStore) ~= "table" then
|
||||
return nil
|
||||
end
|
||||
local saved = MTHSmartAmmo_GetSaved()
|
||||
if saved["enabled"] == nil then
|
||||
return true
|
||||
if type(moduleStore.settings) ~= "table" then
|
||||
moduleStore.settings = {}
|
||||
end
|
||||
return saved["enabled"] and true or false
|
||||
return moduleStore.settings
|
||||
end
|
||||
|
||||
local function MTHSmartAmmo_ReadFlag(key)
|
||||
local settings = MTHSmartAmmo_GetSettings()
|
||||
if settings and settings[key] ~= nil then
|
||||
return settings[key] and true or false
|
||||
end
|
||||
return true -- default enabled
|
||||
end
|
||||
|
||||
local function MTHSmartAmmo_WriteFlag(key, enabled)
|
||||
local settings = MTHSmartAmmo_GetSettings()
|
||||
if settings then
|
||||
settings[key] = enabled and true or false
|
||||
end
|
||||
end
|
||||
|
||||
local function MTHSmartAmmo_IsSmartEnabled()
|
||||
return MTHSmartAmmo_ReadFlag("smartEnabled")
|
||||
end
|
||||
|
||||
local function MTHSmartAmmo_IsReloadEnabled()
|
||||
local moduleStore = MTHSmartAmmo_GetModuleStore()
|
||||
if type(moduleStore) == "table" and moduleStore.reloadEnabled ~= nil then
|
||||
return moduleStore.reloadEnabled and true or false
|
||||
end
|
||||
local saved = MTHSmartAmmo_GetSaved()
|
||||
if saved["reload"] == nil then
|
||||
return true
|
||||
end
|
||||
return saved["reload"] and true or false
|
||||
return MTHSmartAmmo_ReadFlag("reloadEnabled")
|
||||
end
|
||||
|
||||
local function MTHSmartAmmo_IsWeaponSwapEnabled()
|
||||
local moduleStore = MTHSmartAmmo_GetModuleStore()
|
||||
if type(moduleStore) == "table" and moduleStore.weaponSwapEnabled ~= nil then
|
||||
return moduleStore.weaponSwapEnabled and true or false
|
||||
end
|
||||
local saved = MTHSmartAmmo_GetSaved()
|
||||
if saved["weaponSwap"] == nil then
|
||||
return true
|
||||
end
|
||||
return saved["weaponSwap"] and true or false
|
||||
return MTHSmartAmmo_ReadFlag("weaponSwapEnabled")
|
||||
end
|
||||
|
||||
local MTHSmartAmmo_InitializeHooks
|
||||
@@ -58,9 +57,7 @@ local MTH_SA_SPELL_EVENTS = {
|
||||
}
|
||||
|
||||
function MTHSmartAmmo_SetSmartEnabled(enabled, silent)
|
||||
local saved = MTHSmartAmmo_GetSaved()
|
||||
if enabled then
|
||||
saved["enabled"] = 1
|
||||
local evFrame = getglobal("MTH_SA_EventFrame")
|
||||
if evFrame then
|
||||
for _, ev in ipairs(MTH_SA_SPELL_EVENTS) do
|
||||
@@ -77,7 +74,6 @@ function MTHSmartAmmo_SetSmartEnabled(enabled, silent)
|
||||
MTH_SA_Print("Smart Ammo Enabled.")
|
||||
end
|
||||
else
|
||||
saved["enabled"] = false
|
||||
local evFrame = getglobal("MTH_SA_EventFrame")
|
||||
if evFrame then
|
||||
for _, ev in ipairs(MTH_SA_SPELL_EVENTS) do
|
||||
@@ -89,10 +85,7 @@ function MTHSmartAmmo_SetSmartEnabled(enabled, silent)
|
||||
end
|
||||
end
|
||||
|
||||
local moduleStore = MTHSmartAmmo_GetModuleStore()
|
||||
if type(moduleStore) == "table" then
|
||||
moduleStore.smartEnabled = enabled and true or false
|
||||
end
|
||||
MTHSmartAmmo_WriteFlag("smartEnabled", enabled and true or false)
|
||||
end
|
||||
|
||||
function MTHSmartAmmo_GetSmartEnabled()
|
||||
@@ -100,16 +93,7 @@ function MTHSmartAmmo_GetSmartEnabled()
|
||||
end
|
||||
|
||||
function MTHSmartAmmo_SetReloadEnabled(enabled, silent)
|
||||
local saved = MTHSmartAmmo_GetSaved()
|
||||
if enabled then
|
||||
saved["reload"] = 1
|
||||
else
|
||||
saved["reload"] = false
|
||||
end
|
||||
local moduleStore = MTHSmartAmmo_GetModuleStore()
|
||||
if type(moduleStore) == "table" then
|
||||
moduleStore.reloadEnabled = enabled and true or false
|
||||
end
|
||||
MTHSmartAmmo_WriteFlag("reloadEnabled", enabled and true or false)
|
||||
if not silent and DEFAULT_CHAT_FRAME then
|
||||
MTH_SA_Print("Smart Ammo reload fallback " .. (enabled and "Enabled." or "Disabled."))
|
||||
end
|
||||
@@ -120,16 +104,7 @@ function MTHSmartAmmo_GetReloadEnabled()
|
||||
end
|
||||
|
||||
function MTHSmartAmmo_SetWeaponSwapEnabled(enabled, silent)
|
||||
local saved = MTHSmartAmmo_GetSaved()
|
||||
if enabled then
|
||||
saved["weaponSwap"] = 1
|
||||
else
|
||||
saved["weaponSwap"] = false
|
||||
end
|
||||
local moduleStore = MTHSmartAmmo_GetModuleStore()
|
||||
if type(moduleStore) == "table" then
|
||||
moduleStore.weaponSwapEnabled = enabled and true or false
|
||||
end
|
||||
MTHSmartAmmo_WriteFlag("weaponSwapEnabled", enabled and true or false)
|
||||
if not silent and DEFAULT_CHAT_FRAME then
|
||||
MTH_SA_Print("Smart Ammo weapon-swap auto-equip " .. (enabled and "Enabled." or "Disabled."))
|
||||
end
|
||||
@@ -807,15 +782,15 @@ SlashCmdList["MTHSmartAmmo"] = function(msg)
|
||||
return
|
||||
end
|
||||
|
||||
local saved = MTHSmartAmmo_GetSaved()
|
||||
local smartEnabled = MTHSmartAmmo_GetSmartEnabled()
|
||||
|
||||
if msg == "status" then
|
||||
local castHook, actionHook, byNameHook = MTHSmartAmmo_AreHooksInstalled()
|
||||
MTH_SA_Print("Smart Ammo status: smart=" .. tostring(saved["enabled"] and true or false) .. ", module=" .. tostring(MTH_SA_IsModuleEnabled()) .. ", hooks=" .. tostring(castHook) .. "/" .. tostring(actionHook) .. "/" .. tostring(byNameHook))
|
||||
MTH_SA_Print("Smart Ammo status: smart=" .. tostring(smartEnabled) .. ", module=" .. tostring(MTH_SA_IsModuleEnabled()) .. ", hooks=" .. tostring(castHook) .. "/" .. tostring(actionHook) .. "/" .. tostring(byNameHook))
|
||||
return
|
||||
end
|
||||
|
||||
if saved["enabled"] then
|
||||
|
||||
if smartEnabled then
|
||||
MTHSmartAmmo_SetSmartEnabled(nil)
|
||||
else
|
||||
MTHSmartAmmo_SetSmartEnabled(1)
|
||||
|
||||
Reference in New Issue
Block a user