farmbuyer@2
|
1 local addon = select(2,...)
|
farmbuyer@2
|
2
|
farmbuyer@2
|
3 --[[
|
farmbuyer@2
|
4 Here's the control flow:
|
farmbuyer@2
|
5 (1) This file or another addon calls :register_boss_mod("Foo",register[,unregister])
|
farmbuyer@2
|
6 (2) When OL decides it's time to register with a boss mod, it calls
|
farmbuyer@2
|
7 register (addon, addon_do_boss)
|
farmbuyer@2
|
8 which should do whatever's needed. This may happen more than once, if OL
|
farmbuyer@2
|
9 is turned on/off, etc.
|
farmbuyer@2
|
10 (2b) If a boss mod is already in place,
|
farmbuyer@2
|
11 unregister (addon)
|
farmbuyer@2
|
12 will be called first, if such a function was given at the start.
|
farmbuyer@2
|
13 (3) When the boss mod triggers a callback, this code should call
|
farmbuyer@2
|
14 addon_do_boss (.....)
|
farmbuyer@2
|
15 with the crapton of data passed as in the DBM-related code below.
|
farmbuyer@2
|
16
|
farmbuyer@2
|
17 NOTA BENE:
|
farmbuyer@2
|
18 - 'register' will not be called multiple times in a row for the same boss mod.
|
farmbuyer@2
|
19 - The callback for (3) must check if OL is appropriately active.
|
farmbuyer@2
|
20
|
farmbuyer@2
|
21 ------ Constants
|
farmbuyer@2
|
22 ------ Locals
|
farmbuyer@2
|
23 ------ Deadly Boss Mods
|
farmbuyer@2
|
24 ]]
|
farmbuyer@2
|
25
|
farmbuyer@2
|
26 ------ Constants
|
farmbuyer@2
|
27
|
farmbuyer@2
|
28 ------ Locals
|
farmbuyer@2
|
29 local flib = LibStub("LibFarmbuyer")
|
farmbuyer@2
|
30 local pprint, tabledump = addon.pprint, flib.tabledump
|
farmbuyer@2
|
31
|
farmbuyer@2
|
32 -- Lua
|
farmbuyer@2
|
33 local pairs, ipairs, tinsert, tremove, tonumber = pairs, ipairs, table.insert, table.remove, tonumber
|
farmbuyer@2
|
34
|
farmbuyer@2
|
35 -- WoW
|
farmbuyer@2
|
36 local GetRaidRosterInfo = GetRaidRosterInfo
|
farmbuyer@2
|
37
|
farmbuyer@2
|
38 -- OL
|
farmbuyer@2
|
39 local addon_do_boss
|
farmbuyer@2
|
40
|
farmbuyer@2
|
41
|
farmbuyer@2
|
42 ------ Deadly Boss Mods
|
farmbuyer@2
|
43 do
|
farmbuyer@2
|
44 local location
|
farmbuyer@2
|
45 local function DBMBossCallback (self, reason, mod, ...)
|
farmbuyer@2
|
46 if (not self.rebroadcast) and (not self.enabled) then return end
|
farmbuyer@2
|
47
|
farmbuyer@2
|
48 local name
|
farmbuyer@2
|
49 if mod.combatInfo and mod.combatInfo.name then
|
farmbuyer@2
|
50 name = mod.combatInfo.name
|
farmbuyer@2
|
51 elseif mod.id then
|
farmbuyer@2
|
52 name = mod.id
|
farmbuyer@2
|
53 else
|
farmbuyer@2
|
54 name = "Unknown Boss"
|
farmbuyer@2
|
55 end
|
farmbuyer@2
|
56
|
farmbuyer@2
|
57 local it = location or self.instance_tag()
|
farmbuyer@2
|
58 location = nil
|
farmbuyer@2
|
59
|
farmbuyer@2
|
60 local duration = 0
|
farmbuyer@2
|
61 if mod.combatInfo and mod.combatInfo.pull then
|
farmbuyer@2
|
62 duration = math.floor (GetTime() - mod.combatInfo.pull)
|
farmbuyer@2
|
63 end
|
farmbuyer@2
|
64
|
farmbuyer@2
|
65 -- attendance: maybe put people in groups 6,7,8 into a "backup/standby"
|
farmbuyer@2
|
66 -- list? probably too specific to guild practices.
|
farmbuyer@2
|
67 local raiders = {}
|
farmbuyer@2
|
68 for i = 1, GetNumRaidMembers() do
|
farmbuyer@2
|
69 tinsert(raiders, (GetRaidRosterInfo(i)))
|
farmbuyer@2
|
70 end
|
farmbuyer@2
|
71 table.sort(raiders)
|
farmbuyer@2
|
72
|
farmbuyer@2
|
73 return addon_do_boss (self, reason, name, it, duration, raiders)
|
farmbuyer@2
|
74 end
|
farmbuyer@2
|
75
|
farmbuyer@2
|
76 local function callback(...) DBMBossCallback(addon,...) end
|
farmbuyer@2
|
77
|
farmbuyer@2
|
78 local function _registerDBM (self, OL_boss_worker)
|
farmbuyer@2
|
79 if _G.DBM then
|
farmbuyer@2
|
80 local rev = tonumber(DBM.Revision) or 0
|
farmbuyer@2
|
81 if rev < 1503 then
|
farmbuyer@2
|
82 self.status_text = "|cffff1010Deadly Boss Mods must be version 1.26 or newer to work with Ouro Loot.|r"
|
farmbuyer@2
|
83 return
|
farmbuyer@2
|
84 end
|
farmbuyer@2
|
85 addon_do_boss = OL_boss_worker
|
farmbuyer@2
|
86 local r = _G.DBM:RegisterCallback("kill", callback)
|
farmbuyer@2
|
87 _G.DBM:RegisterCallback("wipe", callback)
|
farmbuyer@2
|
88 _G.DBM:RegisterCallback("pull", function() location = self.instance_tag() end)
|
farmbuyer@2
|
89 return r > 0
|
farmbuyer@2
|
90 else
|
farmbuyer@2
|
91 self.status_text = "|cffff1010Ouro Loot cannot find Deadly Boss Mods, loot will not be grouped by boss.|r"
|
farmbuyer@2
|
92 end
|
farmbuyer@2
|
93 end
|
farmbuyer@2
|
94
|
farmbuyer@2
|
95 addon:register_boss_mod ("DBM", _registerDBM)
|
farmbuyer@2
|
96 end -- DBM tie-ins
|
farmbuyer@2
|
97
|
farmbuyer@2
|
98
|
farmbuyer@2
|
99 -- DXE, BigWigs, etc, need to be researched for this too
|
farmbuyer@2
|
100
|
farmbuyer@2
|
101 -- vim:noet
|