forked from rockingdice/AutoCategory
-
Notifications
You must be signed in to change notification settings - Fork 6
/
AC_SavedVars.lua
61 lines (53 loc) · 2.02 KB
/
AC_SavedVars.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
AC=AutoCategory
SF=LibSFUtils
function onLogout()
for id, savedVarsManager in pairs(registry) do
if savedVarsManager.isDefaultsTrimmingEnabled then
local rawDataTable, _, _, rawSavedVarsTablePath = LSV_SavedVarsManager.LoadRawTableData(savedVarsManager)
local defaults = savedVarsManager.trimDefaults
if rawDataTable and defaults then
trimDefaults(rawDataTable, defaults)
local nextKey = nil
repeat
nextKey = next(rawDataTable, nextKey)
until nextKey ~= "version" and nextKey ~= "$LastCharacterName"
if nextKey == nil then
rawDataTable.version = nil
rawDataTable["$LastCharacterName"] = nil
protected.UnsetPath(savedVarsManager.table, unpack(rawSavedVarsTablePath))
end
end
end
end
end
function onLogoutCanceled()
for id, savedVarsManager in pairs(registry) do
if savedVarsManager.isDefaultsTrimmingEnabled then
local rawDataTable, _, _, rawSavedVarsTablePath = LSV_SavedVarsManager.LoadRawTableData(savedVarsManager)
local defaults = savedVarsManager.trimDefaults
if rawDataTable and defaults then
fillDefaults(rawDataTable, defaults)
end
end
end
end
function trimDefaults(table, defaults)
if table == nil or type(table) ~= "table" or defaults == nil then
return
end
for key, defaultValue in pairs(defaults) do
if type(defaultValue) == "table" then
if type(table[key]) == "table" then
trimDefaults(table[key], defaultValue)
if table[key] and next(table[key]) == nil then
table[key] = nil
end
end
elseif table[key] == defaultValue then
table[key] = nil
end
end
end
ZO_PreHook("Logout", onLogout)
ZO_PreHook("Quit", onLogout)
ZO_PreHook("CancelLogout", onLogoutCanceled)