annotate bossmods.lua @ 60:45d2b153c2df

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