annotate bossmods.lua @ 115:289c7667adab

When fixing up missing item cache during load, make sure GUI displays from scratch. Put the bang back on UI tips checkbox (widget fixed). Revent r112, widgets both fixed now.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Tue, 14 Aug 2012 20:37:12 -0400
parents ce45011fab4c
children
rev   line source
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@109 127 addon.FILES_LOADED = addon.FILES_LOADED + 1
farmbuyer@2 128 -- vim:noet