316 lines
8.1 KiB
Lua
316 lines
8.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 TableContains fun(table: table<any, any>, value: any): boolean
|
|
---@field Autoloot Autoloot
|
|
---@field CameraSettings CameraSettings
|
|
---@field SpellQSettings SpellQSettings
|
|
|
|
---@class CykaData
|
|
|
|
---@class CykaConfig
|
|
---@field autoloot CykaAutolootConfig
|
|
---@field camera { enabled: boolean, speed: number }
|
|
---@field spellQueue { enabled: boolean, queue: number }
|
|
|
|
---@class CykaAutolootConfig
|
|
---@field enabled boolean
|
|
---@field filter CykaAutoLootFilterConfig
|
|
|
|
---@class CykaAutoLootFilterConfig
|
|
---@field gold { enabled: boolean }
|
|
---@field orderResource { enabled: boolean }
|
|
---@field mount { enabled: boolean }
|
|
---@field ilvl { enabled: boolean, value: number }
|
|
---@field profession { enabled: boolean, professions: string }
|
|
---@field value { enabled: boolean, byStack: boolean, value: number }
|
|
---@field greyvalue { enabled: boolean, byStack: boolean, value: number }
|
|
---@field questItem { enabled: boolean }
|
|
---@field classGear { enabled: boolean, ilvlThreshold: number, qualityThreshold: number }
|
|
---@field name { enabled: boolean, exact: boolean, caseSensitive: boolean, whitelist: string }
|
|
---@field boe { enabled: boolean, ilvlThreshold: number, qualityThreshold: number }
|
|
---@field ap { enabled: boolean }
|
|
---@field everything { 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
|
|
|
|
---@param table table<any, any>
|
|
---@param value any
|
|
shared.TableContains = function(table, value)
|
|
for _, v in pairs(table) do
|
|
if v == value then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
shared.config = {
|
|
camera = {
|
|
enabled = shared.GetOrDefault(CykaPersistentData.config, { "camera", "enabled" }, true),
|
|
speed = shared.GetOrDefault(CykaPersistentData.config, { "camera", "speed" }, 30),
|
|
},
|
|
spellQueue = {
|
|
enabled = shared.GetOrDefault(CykaPersistentData.config, { "spellQueue", "enabled" }, true),
|
|
queue = shared.GetOrDefault(CykaPersistentData.config, { "spellQueue", "queue" }, 1),
|
|
},
|
|
autoloot = {
|
|
enabled = shared.GetOrDefault(CykaPersistentData.config, { "autoloot", "enabled" }, true),
|
|
filter = {
|
|
gold = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "gold", "enabled" },
|
|
true
|
|
),
|
|
},
|
|
orderResource = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "orderResource", "enabled" },
|
|
true
|
|
),
|
|
},
|
|
mount = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "mount", "enabled" },
|
|
true
|
|
),
|
|
},
|
|
ilvl = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "ilvl", "enabled" },
|
|
true
|
|
),
|
|
value = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "ilvl", "value" },
|
|
910
|
|
),
|
|
},
|
|
profession = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "profession", "enabled" },
|
|
true
|
|
),
|
|
professions = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "profession", "professions" },
|
|
""
|
|
),
|
|
},
|
|
value = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "value", "enabled" },
|
|
true
|
|
),
|
|
byStack = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "value", "byStack" },
|
|
false
|
|
),
|
|
value = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "value", "value" },
|
|
10000
|
|
),
|
|
},
|
|
greyvalue = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "greyvalue", "enabled" },
|
|
true
|
|
),
|
|
byStack = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "greyvalue", "byStack" },
|
|
false
|
|
),
|
|
value = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "greyvalue", "value" },
|
|
100000
|
|
),
|
|
},
|
|
questItem = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "questItem", "enabled" },
|
|
true
|
|
),
|
|
},
|
|
classGear = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "classGear", "enabled" },
|
|
true
|
|
),
|
|
ilvlThreshold = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "classGear", "ilvlThreshold" },
|
|
910
|
|
),
|
|
qualityThreshold = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "classGear", "qualityThreshold" },
|
|
3
|
|
),
|
|
},
|
|
boe = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "boe", "enabled" },
|
|
true
|
|
),
|
|
ilvlThreshold = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "boe", "ilvlThreshold" },
|
|
910
|
|
),
|
|
qualityThreshold = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "boe", "qualityThreshold" },
|
|
3
|
|
),
|
|
},
|
|
ap = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "ap", "enabled" },
|
|
true
|
|
),
|
|
},
|
|
name = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "name", "enabled" },
|
|
false
|
|
),
|
|
exact = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "name", "exact" },
|
|
false
|
|
),
|
|
caseSensitive = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "name", "caseSensitive" },
|
|
false
|
|
),
|
|
whitelist = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "name", "whitelist" },
|
|
""
|
|
),
|
|
},
|
|
everything = {
|
|
enabled = shared.GetOrDefault(
|
|
CykaPersistentData.config,
|
|
{ "autoloot", "filter", "everything", "enabled" },
|
|
true
|
|
),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
shared.Autoloot.Init()
|
|
shared.CameraSettings.Init()
|
|
shared.SpellQSettings.Init()
|
|
|
|
print("Cyka loaded!")
|
|
end
|
|
local loaded = 0
|
|
|
|
local loadedFrame = CreateFrame("Frame")
|
|
loadedFrame:RegisterEvent("ADDON_LOADED")
|
|
loadedFrame:SetScript("OnEvent", function(self, event, addonName)
|
|
if addonName == addonname then
|
|
init()
|
|
end
|
|
end)
|
|
|
|
local ticker
|
|
ticker = C_Timer.NewTicker(1, function()
|
|
-- IT JUST WONT FUCKING RUN JUST FUCKING RUN THE FUCKING FUNCTION GOD DAMN IT
|
|
loaded = loaded + 1
|
|
init()
|
|
if loaded > 100 then
|
|
ticker:Cancel()
|
|
end
|
|
end)
|
|
|
|
local logoutFrame = CreateFrame("Frame")
|
|
logoutFrame:RegisterEvent("PLAYER_LOGOUT")
|
|
logoutFrame:SetScript("OnEvent", function(self, event, ...)
|
|
CykaPersistentData.config = shared.config
|
|
end)
|