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, keys: string[], default: any): any ---@field DumpTable fun(table: table, 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)