Files
wow_cyka/Cyka.lua

296 lines
8.0 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 loadedFrame = CreateFrame("Frame")
loadedFrame:RegisterEvent("ADDON_LOADED")
loadedFrame:SetScript("OnEvent", function(self, event, addonName)
if addonName == addonname then init() end
end)
-- local loaded = 0
-- 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)