89 lines
2.1 KiB
Lua
89 lines
2.1 KiB
Lua
local addonname, shared = ...
|
|
---@cast shared CykaShared
|
|
---@cast addonname string
|
|
|
|
---@class CykaPersistentData
|
|
---@field config CykaConfig
|
|
---@field data CykaData
|
|
|
|
---@class CykaShared
|
|
---@field config CykaConfig
|
|
---@field data CykaData
|
|
---@field GetOrDefault fun(table: table<any, any>, keys: string[], default: any): any
|
|
---@field DumpTable fun(table: table<any, any>, depth: number)
|
|
---@field Autoloot Autoloot
|
|
|
|
---@class CykaData
|
|
|
|
---@class CykaConfig
|
|
---@field autoloot CykaAutolootConfig
|
|
|
|
---@class CykaAutolootConfig
|
|
---@field enabled boolean
|
|
|
|
local function init()
|
|
if not CykaPersistentData then CykaPersistentData = {} end
|
|
if not CykaPersistentData.config then CykaPersistentData.config = {} end
|
|
|
|
shared.GetOrDefault = function(table, keys, default)
|
|
local value = default
|
|
if not table then return value end
|
|
if not keys then return value end
|
|
|
|
local traverse = table
|
|
for i = 1, #keys do
|
|
local key = keys[i]
|
|
if traverse[key] ~= nil then
|
|
traverse = traverse[key]
|
|
else
|
|
break
|
|
end
|
|
|
|
if i == #keys then
|
|
value = traverse
|
|
end
|
|
end
|
|
return value
|
|
end
|
|
|
|
---@param table table
|
|
---@param depth number?
|
|
shared.DumpTable = function(table, depth)
|
|
if not table then
|
|
print(tostring(table))
|
|
return
|
|
end
|
|
if depth == nil then
|
|
depth = 0
|
|
end
|
|
if (depth > 200) then
|
|
print("Error: Depth > 200 in dumpTable()")
|
|
return
|
|
end
|
|
for k, v in pairs(table) do
|
|
if (type(v) == "table") then
|
|
print(string.rep(" ", depth) .. k .. ":")
|
|
shared.DumpTable(v, depth + 1)
|
|
else
|
|
print(string.rep(" ", depth) .. k .. ": ", v)
|
|
end
|
|
end
|
|
end
|
|
|
|
shared.config = {
|
|
autoloot = {
|
|
enabled = shared.GetOrDefault(CykaPersistentData.config, { "autoloot", "enabled" }, true),
|
|
}
|
|
}
|
|
|
|
print("Cyka loaded!")
|
|
end
|
|
|
|
local loadedFrame = CreateFrame("Frame")
|
|
loadedFrame:RegisterEvent("ADDON_LOADED")
|
|
loadedFrame:SetScript("OnEvent", function(self, event, addonName)
|
|
if addonName == addonname then
|
|
init()
|
|
end
|
|
end)
|