-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcore.lua
More file actions
executable file
·132 lines (118 loc) · 3.66 KB
/
core.lua
File metadata and controls
executable file
·132 lines (118 loc) · 3.66 KB
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
local addonName, ns, _ = ...
Broker_DataStore = ns
ns.modules = {}
local initialize -- forward declaration
local frame, eventHooks = CreateFrame("Frame"), {}
local function eventHandler(frame, event, arg1, ...)
if event == 'ADDON_LOADED' and arg1 == addonName then
-- make sure core initializes before anyone else
initialize()
end
if eventHooks[event] then
for id, listener in pairs(eventHooks[event]) do
listener(frame, event, arg1, ...)
end
end
end
frame:SetScript("OnEvent", eventHandler)
ns.events = frame
function ns.RegisterEvent(event, callback, id, silentFail)
assert(callback and event and id, format("Usage: RegisterEvent(event, callback, id[, silentFail])"))
if not eventHooks[event] then
eventHooks[event] = {}
frame:RegisterEvent(event)
end
assert(silentFail or not eventHooks[event][id], format("Event %s already registered by id %s.", event, id))
eventHooks[event][id] = callback
end
function ns.UnregisterEvent(event, id)
if not eventHooks[event] or not eventHooks[event][id] then return end
eventHooks[event][id] = nil
if ns.Count(eventHooks[event]) < 1 then
eventHooks[event] = nil
frame:UnregisterEvent(event)
end
end
-- Util ---------------------------------------------------
function ns.Count(dataTable)
local count = 0
if dataTable then
for _ in pairs(dataTable) do
count = count + 1
end
end
return count
end
function ns.Print(text)
DEFAULT_CHAT_FRAME:AddMessage("|cffee6622Broker_DataStore|r "..text)
end
-- /spew DataStore_Currencies.db.global.Reference
function ns.GetColoredCharacterName(characterKey)
local _, _, characterName = strsplit('.', characterKey)
return characterName
end
function ns.GetFaction()
return UnitFactionGroup('player')
end
function ns.GetAverageItemLevel()
return GetAverageItemLevel()
end
-- Events -------------------------------------------------
local thisCharacter = DataStore:GetCharacter()
-- local function initialize(frame, event, addon)
initialize = function()
-- initialize saved variables
if not BDS_GlobalDB then BDS_GlobalDB = {} end
if not BDS_LocalDB then BDS_LocalDB = {} end
-- supply some fallbacks
if IsAddOnLoaded('DataStore_Characters') then
ns.GetColoredCharacterName = function(characterKey)
return (DataStore:GetColoredCharacterName(characterKey) or '') .. '|r'
end
ns.GetFaction = function(characterKey)
return DataStore:GetCharacterFaction(characterKey)
end
end
if IsAddOnLoaded('DataStore_Inventory') then
ns.GetAverageItemLevel = function(characterKey)
if characterKey == thisCharacter then
return GetAverageItemLevel()
else
return DataStore:GetAverageItemLevel(characterKey)
end
end
end
-- initialize addon variables
ns.characters = {}
for characterName, characterKey in pairs(DataStore:GetCharacters()) do
table.insert(ns.characters, {
name = characterName,
key = characterKey,
coloredName = ns.GetColoredCharacterName(characterKey),
-- itemLevel = ns.GetAverageItemLevel(characterKey),
})
end
table.sort(ns.characters, function(a,b) return a.name < b.name end)
-- initialize modules
local initFunc
for _, tab in pairs(ns.modules or {}) do
-- run module's init function
initFunc = tab[2]
if initFunc then
initFunc()
end
end
end
frame:RegisterEvent('ADDON_LOADED')
--[[ local function UpdateItemLevel()
for _, charData in ipairs(ns.characters) do
if charData.key == thisCharacter then
charData.itemLevel = ns.GetAverageItemLevel(thisCharacter)
break
end
end
end
ns.RegisterEvent('PLAYER_AVG_ITEM_LEVEL_READY', UpdateItemLevel, 'updateilvl_initial')
ns.RegisterEvent('PLAYER_EQUIPMENT_CHANGED', UpdateItemLevel, 'updateilvl_equipped')
ns.RegisterEvent('BAG_UPDATE_DELAYED', UpdateItemLevel, 'updateilvl_bags')
--]]