farmbuyer@2
|
1 local addon = select(2,...)
|
farmbuyer@67
|
2 if addon.NOLOAD then return end
|
farmbuyer@2
|
3
|
farmbuyer@42
|
4 --[==[
|
farmbuyer@2
|
5 Here's the control flow:
|
farmbuyer@42
|
6 (1) This file or another addon calls
|
farmbuyer@42
|
7 addon:register_boss_mod("Foo",register[,unregister])
|
farmbuyer@2
|
8 (2) When OL decides it's time to register with a boss mod, it calls
|
farmbuyer@2
|
9 register (addon, addon_do_boss)
|
farmbuyer@2
|
10 which should do whatever's needed. This may happen more than once, if OL
|
farmbuyer@42
|
11 is turned on/off, etc. It should return a true value if successful.
|
farmbuyer@2
|
12 (2b) If a boss mod is already in place,
|
farmbuyer@2
|
13 unregister (addon)
|
farmbuyer@2
|
14 will be called first, if such a function was given at the start.
|
farmbuyer@2
|
15 (3) When the boss mod triggers a callback, this code should call
|
farmbuyer@2
|
16 addon_do_boss (.....)
|
farmbuyer@2
|
17 with the crapton of data passed as in the DBM-related code below.
|
farmbuyer@2
|
18
|
farmbuyer@2
|
19 NOTA BENE:
|
farmbuyer@2
|
20 - 'register' will not be called multiple times in a row for the same boss mod.
|
farmbuyer@2
|
21 - The callback for (3) must check if OL is appropriately active.
|
farmbuyer@2
|
22
|
farmbuyer@2
|
23 ------ Constants
|
farmbuyer@6
|
24 ------ Globals
|
farmbuyer@2
|
25 ------ Deadly Boss Mods
|
farmbuyer@42
|
26 ]==]
|
farmbuyer@2
|
27
|
farmbuyer@2
|
28 ------ Constants
|
farmbuyer@2
|
29
|
farmbuyer@6
|
30 ------ Globals
|
farmbuyer@2
|
31 local flib = LibStub("LibFarmbuyer")
|
farmbuyer@2
|
32 local pprint, tabledump = addon.pprint, flib.tabledump
|
farmbuyer@2
|
33
|
farmbuyer@2
|
34 -- Lua
|
farmbuyer@6
|
35 local pairs, ipairs, tinsert, tremove = pairs, ipairs, table.insert, table.remove
|
farmbuyer@6
|
36 local tonumber = tonumber
|
farmbuyer@2
|
37
|
farmbuyer@2
|
38 -- WoW
|
farmbuyer@56
|
39 --local GetRaidRosterInfo = GetRaidRosterInfo
|
farmbuyer@2
|
40
|
farmbuyer@2
|
41 -- OL
|
farmbuyer@2
|
42 local addon_do_boss
|
farmbuyer@2
|
43
|
farmbuyer@2
|
44
|
farmbuyer@2
|
45 ------ Deadly Boss Mods
|
farmbuyer@2
|
46 do
|
farmbuyer@42
|
47 local DBM
|
farmbuyer@56
|
48 local location, maxsize
|
farmbuyer@42
|
49 local real_loadmod
|
farmbuyer@42
|
50 -- When zoning into a raid instance not seen this session, make sure
|
farmbuyer@42
|
51 -- we don't report a previous raid instance as current location. DBM
|
farmbuyer@42
|
52 -- has no callback event for this, so we do a small hook instead.
|
farmbuyer@42
|
53 local function resetting_loadmod (...)
|
farmbuyer@42
|
54 addon.latest_instance = nil
|
farmbuyer@42
|
55 return real_loadmod(...)
|
farmbuyer@42
|
56 end
|
farmbuyer@42
|
57
|
farmbuyer@2
|
58 local function DBMBossCallback (self, reason, mod, ...)
|
farmbuyer@2
|
59 if (not self.rebroadcast) and (not self.enabled) then return end
|
farmbuyer@2
|
60
|
farmbuyer@106
|
61 -- Behavior based on the first arg to DBM:NewMod. Old style is just
|
farmbuyer@106
|
62 -- a boss name, which is set as mod.id and *should* also be set as
|
farmbuyer@106
|
63 -- combatinfo.name. New style is the "encounter ID", fed through the
|
farmbuyer@106
|
64 -- EJ_GetEncounterInfo API to get the name, and then stripped down
|
farmbuyer@106
|
65 -- to the first comma (if any).
|
farmbuyer@2
|
66 local name
|
farmbuyer@2
|
67 if mod.combatInfo and mod.combatInfo.name then
|
farmbuyer@2
|
68 name = mod.combatInfo.name
|
farmbuyer@2
|
69 elseif mod.id then
|
farmbuyer@2
|
70 name = mod.id
|
farmbuyer@2
|
71 else
|
farmbuyer@2
|
72 name = "Unknown Boss"
|
farmbuyer@2
|
73 end
|
farmbuyer@2
|
74
|
farmbuyer@56
|
75 local it
|
farmbuyer@56
|
76 if location then
|
farmbuyer@56
|
77 it = location
|
farmbuyer@56
|
78 else
|
farmbuyer@56
|
79 it, maxsize = self.instance_tag()
|
farmbuyer@56
|
80 end
|
farmbuyer@42
|
81 self.latest_instance = it
|
farmbuyer@2
|
82 location = nil
|
farmbuyer@2
|
83
|
farmbuyer@2
|
84 local duration = 0
|
farmbuyer@2
|
85 if mod.combatInfo and mod.combatInfo.pull then
|
farmbuyer@2
|
86 duration = math.floor (GetTime() - mod.combatInfo.pull)
|
farmbuyer@2
|
87 end
|
farmbuyer@2
|
88
|
farmbuyer@56
|
89 return addon_do_boss (self, reason, name, it, maxsize, duration)
|
farmbuyer@2
|
90 end
|
farmbuyer@2
|
91
|
farmbuyer@2
|
92 local function callback(...) DBMBossCallback(addon,...) end
|
farmbuyer@2
|
93
|
farmbuyer@2
|
94 local function _registerDBM (self, OL_boss_worker)
|
farmbuyer@42
|
95 DBM = _G.DBM
|
farmbuyer@42
|
96 if DBM then
|
farmbuyer@2
|
97 local rev = tonumber(DBM.Revision) or 0
|
farmbuyer@2
|
98 if rev < 1503 then
|
farmbuyer@2
|
99 self.status_text = "|cffff1010Deadly Boss Mods must be version 1.26 or newer to work with Ouro Loot.|r"
|
farmbuyer@2
|
100 return
|
farmbuyer@2
|
101 end
|
farmbuyer@2
|
102 addon_do_boss = OL_boss_worker
|
farmbuyer@42
|
103 local r = DBM:RegisterCallback("kill", callback)
|
farmbuyer@42
|
104 DBM:RegisterCallback("wipe", callback)
|
farmbuyer@56
|
105 DBM:RegisterCallback("pull", function()
|
farmbuyer@56
|
106 location, maxsize = self.instance_tag()
|
farmbuyer@56
|
107 end)
|
farmbuyer@42
|
108 real_loadmod = DBM.LoadMod
|
farmbuyer@42
|
109 DBM.LoadMod = resetting_loadmod
|
farmbuyer@2
|
110 return r > 0
|
farmbuyer@2
|
111 else
|
farmbuyer@2
|
112 self.status_text = "|cffff1010Ouro Loot cannot find Deadly Boss Mods, loot will not be grouped by boss.|r"
|
farmbuyer@2
|
113 end
|
farmbuyer@2
|
114 end
|
farmbuyer@2
|
115
|
farmbuyer@42
|
116 local function _unregisterDBM (self)
|
farmbuyer@42
|
117 self.latest_instance = nil
|
farmbuyer@42
|
118 DBM.LoadMod = real_loadmod
|
farmbuyer@42
|
119 end
|
farmbuyer@42
|
120
|
farmbuyer@42
|
121 addon:register_boss_mod ("DBM", _registerDBM, _unregisterDBM)
|
farmbuyer@2
|
122 end -- DBM tie-ins
|
farmbuyer@2
|
123
|
farmbuyer@2
|
124
|
farmbuyer@2
|
125 -- DXE, BigWigs, etc, need to be researched for this too
|
farmbuyer@2
|
126
|
farmbuyer@2
|
127 -- vim:noet
|