annotate bossmods.lua @ 17:d929c40cdb09

Small boosts, better version display. Do not wedge when receiving initial boss broadcast of a wipe while outside a raid instance.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Thu, 25 Aug 2011 08:50:33 +0000
parents df3e27edbd60
children 4f1e71f62776
rev   line source
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@6 22 ------ Globals
farmbuyer@2 23 ------ Deadly Boss Mods
farmbuyer@2 24 ]]
farmbuyer@2 25
farmbuyer@2 26 ------ Constants
farmbuyer@2 27
farmbuyer@6 28 ------ Globals
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@6 33 local pairs, ipairs, tinsert, tremove = pairs, ipairs, table.insert, table.remove
farmbuyer@6 34 local tonumber = tonumber
farmbuyer@2 35
farmbuyer@2 36 -- WoW
farmbuyer@2 37 local GetRaidRosterInfo = GetRaidRosterInfo
farmbuyer@2 38
farmbuyer@2 39 -- OL
farmbuyer@2 40 local addon_do_boss
farmbuyer@2 41
farmbuyer@2 42
farmbuyer@2 43 ------ Deadly Boss Mods
farmbuyer@2 44 do
farmbuyer@2 45 local location
farmbuyer@2 46 local function DBMBossCallback (self, reason, mod, ...)
farmbuyer@2 47 if (not self.rebroadcast) and (not self.enabled) then return end
farmbuyer@2 48
farmbuyer@2 49 local name
farmbuyer@2 50 if mod.combatInfo and mod.combatInfo.name then
farmbuyer@2 51 name = mod.combatInfo.name
farmbuyer@2 52 elseif mod.id then
farmbuyer@2 53 name = mod.id
farmbuyer@2 54 else
farmbuyer@2 55 name = "Unknown Boss"
farmbuyer@2 56 end
farmbuyer@2 57
farmbuyer@2 58 local it = location or self.instance_tag()
farmbuyer@2 59 location = nil
farmbuyer@2 60
farmbuyer@2 61 local duration = 0
farmbuyer@2 62 if mod.combatInfo and mod.combatInfo.pull then
farmbuyer@2 63 duration = math.floor (GetTime() - mod.combatInfo.pull)
farmbuyer@2 64 end
farmbuyer@2 65
farmbuyer@2 66 -- attendance: maybe put people in groups 6,7,8 into a "backup/standby"
farmbuyer@2 67 -- list? probably too specific to guild practices.
farmbuyer@2 68 local raiders = {}
farmbuyer@2 69 for i = 1, GetNumRaidMembers() do
farmbuyer@17 70 local name = GetRaidRosterInfo(i)
farmbuyer@17 71 if name then
farmbuyer@17 72 tinsert (raiders, name)
farmbuyer@17 73 end
farmbuyer@2 74 end
farmbuyer@2 75 table.sort(raiders)
farmbuyer@2 76
farmbuyer@2 77 return addon_do_boss (self, reason, name, it, duration, raiders)
farmbuyer@2 78 end
farmbuyer@2 79
farmbuyer@2 80 local function callback(...) DBMBossCallback(addon,...) end
farmbuyer@2 81
farmbuyer@2 82 local function _registerDBM (self, OL_boss_worker)
farmbuyer@2 83 if _G.DBM then
farmbuyer@2 84 local rev = tonumber(DBM.Revision) or 0
farmbuyer@2 85 if rev < 1503 then
farmbuyer@2 86 self.status_text = "|cffff1010Deadly Boss Mods must be version 1.26 or newer to work with Ouro Loot.|r"
farmbuyer@2 87 return
farmbuyer@2 88 end
farmbuyer@2 89 addon_do_boss = OL_boss_worker
farmbuyer@2 90 local r = _G.DBM:RegisterCallback("kill", callback)
farmbuyer@2 91 _G.DBM:RegisterCallback("wipe", callback)
farmbuyer@2 92 _G.DBM:RegisterCallback("pull", function() location = self.instance_tag() end)
farmbuyer@2 93 return r > 0
farmbuyer@2 94 else
farmbuyer@2 95 self.status_text = "|cffff1010Ouro Loot cannot find Deadly Boss Mods, loot will not be grouped by boss.|r"
farmbuyer@2 96 end
farmbuyer@2 97 end
farmbuyer@2 98
farmbuyer@2 99 addon:register_boss_mod ("DBM", _registerDBM)
farmbuyer@2 100 end -- DBM tie-ins
farmbuyer@2 101
farmbuyer@2 102
farmbuyer@2 103 -- DXE, BigWigs, etc, need to be researched for this too
farmbuyer@2 104
farmbuyer@2 105 -- vim:noet