annotate bossmods.lua @ 155:bfb53b311552

Added tag beta-l10n-1 for changeset 823a987ac492
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Sat, 21 Feb 2015 16:53:35 -0500
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