Mercurial > wow > ouroloot
view bossmods.lua @ 66:43913e02a1ef
Detect LFR loot as best we can, and bundle it into the same warning given for heroic loot formatted by name only. Less tedious method of bumping data revisions.
author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
---|---|
date | Fri, 27 Apr 2012 10:11:56 +0000 |
parents | fcc0d0ff5832 |
children | c01875b275ca |
line wrap: on
line source
local addon = select(2,...) --[==[ Here's the control flow: (1) This file or another addon calls addon:register_boss_mod("Foo",register[,unregister]) (2) When OL decides it's time to register with a boss mod, it calls register (addon, addon_do_boss) which should do whatever's needed. This may happen more than once, if OL is turned on/off, etc. It should return a true value if successful. (2b) If a boss mod is already in place, unregister (addon) will be called first, if such a function was given at the start. (3) When the boss mod triggers a callback, this code should call addon_do_boss (.....) with the crapton of data passed as in the DBM-related code below. NOTA BENE: - 'register' will not be called multiple times in a row for the same boss mod. - The callback for (3) must check if OL is appropriately active. ------ Constants ------ Globals ------ Deadly Boss Mods ]==] ------ Constants ------ Globals local flib = LibStub("LibFarmbuyer") local pprint, tabledump = addon.pprint, flib.tabledump -- Lua local pairs, ipairs, tinsert, tremove = pairs, ipairs, table.insert, table.remove local tonumber = tonumber -- WoW --local GetRaidRosterInfo = GetRaidRosterInfo -- OL local addon_do_boss ------ Deadly Boss Mods do local DBM local location, maxsize local real_loadmod -- When zoning into a raid instance not seen this session, make sure -- we don't report a previous raid instance as current location. DBM -- has no callback event for this, so we do a small hook instead. local function resetting_loadmod (...) addon.latest_instance = nil return real_loadmod(...) end local function DBMBossCallback (self, reason, mod, ...) if (not self.rebroadcast) and (not self.enabled) then return end local name if mod.combatInfo and mod.combatInfo.name then name = mod.combatInfo.name elseif mod.id then name = mod.id else name = "Unknown Boss" end local it if location then it = location else it, maxsize = self.instance_tag() end self.latest_instance = it location = nil local duration = 0 if mod.combatInfo and mod.combatInfo.pull then duration = math.floor (GetTime() - mod.combatInfo.pull) end return addon_do_boss (self, reason, name, it, maxsize, duration) end local function callback(...) DBMBossCallback(addon,...) end local function _registerDBM (self, OL_boss_worker) DBM = _G.DBM if DBM then local rev = tonumber(DBM.Revision) or 0 if rev < 1503 then self.status_text = "|cffff1010Deadly Boss Mods must be version 1.26 or newer to work with Ouro Loot.|r" return end addon_do_boss = OL_boss_worker local r = DBM:RegisterCallback("kill", callback) DBM:RegisterCallback("wipe", callback) DBM:RegisterCallback("pull", function() location, maxsize = self.instance_tag() end) real_loadmod = DBM.LoadMod DBM.LoadMod = resetting_loadmod return r > 0 else self.status_text = "|cffff1010Ouro Loot cannot find Deadly Boss Mods, loot will not be grouped by boss.|r" end end local function _unregisterDBM (self) self.latest_instance = nil DBM.LoadMod = real_loadmod end addon:register_boss_mod ("DBM", _registerDBM, _unregisterDBM) end -- DBM tie-ins -- DXE, BigWigs, etc, need to be researched for this too -- vim:noet