comparison bossmods.lua @ 42:4f1e71f62776

Handle moving from one instance kill/loot into a new instance, and then getting loot from trash in the new instance before seeing any bosses.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Fri, 13 Jan 2012 01:12:36 +0000
parents d929c40cdb09
children fcc0d0ff5832
comparison
equal deleted inserted replaced
41:d6b8858c1b64 42:4f1e71f62776
1 local addon = select(2,...) 1 local addon = select(2,...)
2 2
3 --[[ 3 --[==[
4 Here's the control flow: 4 Here's the control flow:
5 (1) This file or another addon calls :register_boss_mod("Foo",register[,unregister]) 5 (1) This file or another addon calls
6 addon:register_boss_mod("Foo",register[,unregister])
6 (2) When OL decides it's time to register with a boss mod, it calls 7 (2) When OL decides it's time to register with a boss mod, it calls
7 register (addon, addon_do_boss) 8 register (addon, addon_do_boss)
8 which should do whatever's needed. This may happen more than once, if OL 9 which should do whatever's needed. This may happen more than once, if OL
9 is turned on/off, etc. 10 is turned on/off, etc. It should return a true value if successful.
10 (2b) If a boss mod is already in place, 11 (2b) If a boss mod is already in place,
11 unregister (addon) 12 unregister (addon)
12 will be called first, if such a function was given at the start. 13 will be called first, if such a function was given at the start.
13 (3) When the boss mod triggers a callback, this code should call 14 (3) When the boss mod triggers a callback, this code should call
14 addon_do_boss (.....) 15 addon_do_boss (.....)
19 - The callback for (3) must check if OL is appropriately active. 20 - The callback for (3) must check if OL is appropriately active.
20 21
21 ------ Constants 22 ------ Constants
22 ------ Globals 23 ------ Globals
23 ------ Deadly Boss Mods 24 ------ Deadly Boss Mods
24 ]] 25 ]==]
25 26
26 ------ Constants 27 ------ Constants
27 28
28 ------ Globals 29 ------ Globals
29 local flib = LibStub("LibFarmbuyer") 30 local flib = LibStub("LibFarmbuyer")
40 local addon_do_boss 41 local addon_do_boss
41 42
42 43
43 ------ Deadly Boss Mods 44 ------ Deadly Boss Mods
44 do 45 do
46 local DBM
45 local location 47 local location
48 local real_loadmod
49 -- When zoning into a raid instance not seen this session, make sure
50 -- we don't report a previous raid instance as current location. DBM
51 -- has no callback event for this, so we do a small hook instead.
52 local function resetting_loadmod (...)
53 addon.latest_instance = nil
54 return real_loadmod(...)
55 end
56
46 local function DBMBossCallback (self, reason, mod, ...) 57 local function DBMBossCallback (self, reason, mod, ...)
47 if (not self.rebroadcast) and (not self.enabled) then return end 58 if (not self.rebroadcast) and (not self.enabled) then return end
48 59
49 local name 60 local name
50 if mod.combatInfo and mod.combatInfo.name then 61 if mod.combatInfo and mod.combatInfo.name then
54 else 65 else
55 name = "Unknown Boss" 66 name = "Unknown Boss"
56 end 67 end
57 68
58 local it = location or self.instance_tag() 69 local it = location or self.instance_tag()
70 self.latest_instance = it
59 location = nil 71 location = nil
60 72
61 local duration = 0 73 local duration = 0
62 if mod.combatInfo and mod.combatInfo.pull then 74 if mod.combatInfo and mod.combatInfo.pull then
63 duration = math.floor (GetTime() - mod.combatInfo.pull) 75 duration = math.floor (GetTime() - mod.combatInfo.pull)
78 end 90 end
79 91
80 local function callback(...) DBMBossCallback(addon,...) end 92 local function callback(...) DBMBossCallback(addon,...) end
81 93
82 local function _registerDBM (self, OL_boss_worker) 94 local function _registerDBM (self, OL_boss_worker)
83 if _G.DBM then 95 DBM = _G.DBM
96 if DBM then
84 local rev = tonumber(DBM.Revision) or 0 97 local rev = tonumber(DBM.Revision) or 0
85 if rev < 1503 then 98 if rev < 1503 then
86 self.status_text = "|cffff1010Deadly Boss Mods must be version 1.26 or newer to work with Ouro Loot.|r" 99 self.status_text = "|cffff1010Deadly Boss Mods must be version 1.26 or newer to work with Ouro Loot.|r"
87 return 100 return
88 end 101 end
89 addon_do_boss = OL_boss_worker 102 addon_do_boss = OL_boss_worker
90 local r = _G.DBM:RegisterCallback("kill", callback) 103 local r = DBM:RegisterCallback("kill", callback)
91 _G.DBM:RegisterCallback("wipe", callback) 104 DBM:RegisterCallback("wipe", callback)
92 _G.DBM:RegisterCallback("pull", function() location = self.instance_tag() end) 105 DBM:RegisterCallback("pull", function() location = self.instance_tag() end)
106 real_loadmod = DBM.LoadMod
107 DBM.LoadMod = resetting_loadmod
93 return r > 0 108 return r > 0
94 else 109 else
95 self.status_text = "|cffff1010Ouro Loot cannot find Deadly Boss Mods, loot will not be grouped by boss.|r" 110 self.status_text = "|cffff1010Ouro Loot cannot find Deadly Boss Mods, loot will not be grouped by boss.|r"
96 end 111 end
97 end 112 end
98 113
99 addon:register_boss_mod ("DBM", _registerDBM) 114 local function _unregisterDBM (self)
115 self.latest_instance = nil
116 DBM.LoadMod = real_loadmod
117 end
118
119 addon:register_boss_mod ("DBM", _registerDBM, _unregisterDBM)
100 end -- DBM tie-ins 120 end -- DBM tie-ins
101 121
102 122
103 -- DXE, BigWigs, etc, need to be researched for this too 123 -- DXE, BigWigs, etc, need to be researched for this too
104 124