You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

413 lines
12 KiB

--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Antorus Trash", 1712)
if not mod then return end
mod.displayName = CL.trash
mod:RegisterEnableMob(
-- [[ Before Garothi Worldbreaker ]] --
123478, -- Antoran Felguard
123398, -- Garothi Annihilator
123402, -- Garothi Decimator
-- [[ After Garothi Worldbreaker ]] --
127233, -- Flameweaver
-- [[ Before Antoran High Command ]] --
126764, -- Bladesworn Ravager
127723, -- Imperator Deconix
127732, -- Clobex
-- [[ Before Portal Keeper Hasabel ]] --
125549, -- Hungering Stalker
-- [[ Imonar to Kin'garoth ]] --
127235, -- Garothi Demolisher
127231, -- Garothi Decimator
127230, -- Garothi Annihilator
-- [[ Before Varimathras / Coven of Shivarra ]] --
123533, -- Tarneth
128060, -- Priestess of Delirium
-- [[ Before Aggramar ]] --
123680 -- Dark Keeper Aedis
)
--------------------------------------------------------------------------------
-- Locals
--
local list = mod:NewTargetList()
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
-- [[ Before Garothi Worldbreaker ]] --
L.felguard = "Antoran Felguard"
-- [[ After Garothi Worldbreaker ]] --
L.flameweaver = "Flameweaver"
-- [[ Before Antoran High Command ]] --
L.ravager = "Bladesworn Ravager"
L.deconix = "Imperator Deconix"
L.clobex = "Clobex"
-- [[ Before Portal Keeper Hasabel ]] --
L.stalker = "Hungering Stalker"
-- [[ Before Varimathras / Coven of Shivarra ]] --
L.tarneth = "Tarneth"
L.priestess = "Priestess of Delirium"
-- [[ Before Aggramar ]] --
L.aedis = "Dark Keeper Aedis"
end
--------------------------------------------------------------------------------
-- Initialization
--
function mod:GetOptions()
return {
-- [[ Before Garothi Worldbreaker ]] --
245861, -- Searing Rend
-- [[ After Garothi Worldbreaker ]] --
{252621, "ME_ONLY"}, -- Bound by Fel
-- [[ Before Antoran High Command ]] --
251612, -- Bladestorm (Felsworn Ravager)
254500, -- Fearsome Leap
254512, -- Bladestorm (Imperator Deconix)
{253600, "SAY", "SAY_COUNTDOWN"}, -- Soulburn
-- [[ Before Portal Keeper Hasabel ]] --
249212, -- Howling Shadows
-- [[ Imonar to Kin'garoth ]] --
{252760, "SAY", "SAY_COUNTDOWN"}, -- Demolish
252743, -- Annihilation
{252797, "SAY", "SAY_COUNTDOWN"}, -- Decimation
-- [[ Before Varimathras / Coven of Shivarra ]] --
{249297, "SAY"}, -- Flames of Reorigination
{254122, "SAY", "SAY_COUNTDOWN"}, -- Cloud of Confusion
-- [[ Before Aggramar ]] --
246209, -- Punishing Flame
246199, -- Burning Winds
}, {
[245861] = L.felguard,
[252621] = L.flameweaver,
[251612] = L.ravager,
[254500] = L.deconix,
[253600] = L.clobex,
[249212] = L.stalker,
[252760] = -16145, -- Garothi Demolisher
[252743] = -16143, -- Garothi Annihilator
[252797] = -16144, -- Garothi Decimator
[249297] = L.tarneth,
[254122] = L.priestess,
[246209] = L.aedis,
}
end
function mod:OnBossEnable()
--[[ General ]]--
self:RegisterMessage("BigWigs_OnBossEngage", "Disable")
-- Searing Rend, Burning Winds
self:Log("SPELL_AURA_APPLIED", "GroundEffectDamage", 245861, 246199)
self:Log("SPELL_PERIODIC_DAMAGE", "GroundEffectDamage", 245861, 246199)
self:Log("SPELL_PERIODIC_MISSED", "GroundEffectDamage", 245861, 246199)
-- [[ Before Garothi Worldbreaker ]] --
self:Log("SPELL_CAST_START", "Annihilation", 245807)
-- [[ After Garothi Worldbreaker ]] --
self:Log("SPELL_AURA_APPLIED", "BoundByFel", 252621)
self:Death("FlameweaverDeath", 127233)
-- [[ Before Antoran High Command ]] --
self:Log("SPELL_DAMAGE", "Whirlwind", 251612, 254512) -- Felsworn Ravager, Imperator Deconix
self:Log("SPELL_MISSED", "Whirlwind", 251612, 254512)
self:Log("SPELL_CAST_START", "FearsomeLeap", 254500)
self:Death("DeconixDeath", 127723)
self:Log("SPELL_CAST_SUCCESS", "SoulburnCastSuccess", 253599)
self:Log("SPELL_AURA_APPLIED", "Soulburn", 253600)
self:Log("SPELL_AURA_REMOVED", "SoulburnRemoved", 253600)
self:Log("SPELL_DISPEL", "SoulburnDispelled", "*")
-- [[ Before Portal Keeper Hasabel ]] --
self:Log("SPELL_CAST_START", "HowlingShadows", 249212)
-- [[ Imonar to Kin'garoth ]] --
self:Log("SPELL_AURA_APPLIED", "Demolish", 252760)
self:Log("SPELL_AURA_REMOVED", "DemolishRemoved", 252760)
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
self:RegisterEvent("UNIT_AURA")
-- [[ Before Varimathras / Coven of Shivarra ]] --
self:Log("SPELL_AURA_APPLIED", "FlamesOfReorigination", 249297)
self:Log("SPELL_AURA_REFRESH", "FlamesOfReoriginationRefreshed", 249297)
self:Log("SPELL_AURA_REMOVED", "FlamesOfReoriginationRemoved", 249297)
self:Log("SPELL_AURA_APPLIED", "CloudOfConfusion", 254122)
self:Log("SPELL_AURA_REMOVED", "CloudOfConfusionRemoved", 254122)
-- [[ Before Aggramar ]] --
self:Log("SPELL_CAST_START", "PunishingFlames", 246209)
self:Death("AedisDeath", 123680)
end
--------------------------------------------------------------------------------
-- Event Handlers
--
--[[ General ]]--
do
local prev = 0
function mod:GroundEffectDamage(args)
if self:Me(args.destGUID) then
local t = GetTime()
if t-prev > 1.5 then
prev = t
self:MessageOld(args.spellId, "blue", "alert", CL.underyou:format(args.spellName))
end
end
end
end
-- [[ Before Garothi Worldbreaker ]] --
function mod:Annihilation()
self:MessageOld(252743, "red", "long")
end
-- [[ After Garothi Worldbreaker ]] --
do
local targets = {}
function mod:BoundByFel(args)
if not targets[args.sourceGUID] then
targets[args.sourceGUID] = {}
end
local tbl = targets[args.sourceGUID]
tbl[#tbl + 1] = { guid = args.destGUID, name = args.destName }
if #tbl == 2 then
if self:Me(tbl[1].guid) then
self:MessageOld(args.spellId, "blue", "alarm", CL.link_with:format(self:ColorName(tbl[2].name)))
elseif self:Me(tbl[2].guid) then
self:MessageOld(args.spellId, "blue", "alarm", CL.link_with:format(self:ColorName(tbl[1].name)))
elseif not self:CheckOption(args.spellId, "ME_ONLY") then
self:MessageOld(args.spellId, "yellow", nil, CL.link_both:format(self:ColorName(tbl[1].name), self:ColorName(tbl[2].name)))
end
targets[args.sourceGUID] = {}
else
-- XXX I have no logs where this happens so the possibility of this situation is an assumption:
-- clean up if, for some reason, the 2nd target had an immunity on.
self:SimpleTimer(function()
if tbl and #tbl == 1 then
targets[args.sourceGUID] = {}
end
end, 1)
end
end
function mod:FlameweaverDeath(args)
targets[args.destGUID] = nil
end
end
-- [[ Before Antoran High Command ]] --
do
local prev = 0
function mod:Whirlwind(args)
if self:Me(args.destGUID) then
local t = GetTime()
if (not self:Melee() and t-prev > 1.5) or t-prev > 6 then
prev = t
self:MessageOld(args.spellId, "blue", "alert", CL.underyou:format(args.spellName))
end
end
end
end
function mod:FearsomeLeap(args)
self:MessageOld(args.spellId, "red", self:Melee() and "warning" or "long", CL.casting:format(args.spellName))
self:CastBar(args.spellId, 3)
end
function mod:DeconixDeath(args)
self:StopBar(CL.cast:format(self:SpellName(254500))) -- Fearsome Leap
end
do
local lastCast = 0
function mod:SoulburnCastSuccess(args)
lastCast = GetTime()
end
function mod:Soulburn(args)
local appliedByTheBoss = GetTime() - lastCast < 0.3 -- unfortunately sourceGUID can't be used here
if self:Me(args.destGUID) then
self:Say(args.spellId)
self:SayCountdown(args.spellId, 6)
if not appliedByTheBoss then
self:PlaySound(args.spellId, "alarm")
self:PersonalMessage(args.spellId) -- personal warning regardless of the source
elseif not self:Dispeller("magic") then
self:PlaySound(args.spellId, "alarm")
end
end
if appliedByTheBoss then -- don't announce those that were spread by players
list[#list+1] = args.destName
if self:Dispeller("magic") then
self:PlaySound(args.spellId, "alarm", nil, list)
end
self:TargetsMessage(args.spellId, "orange", list, 2)
end
end
function mod:SoulburnRemoved(args)
if self:Me(args.destGUID) then
self:CancelSayCountdown(args.spellId)
end
end
function mod:SoulburnDispelled(args)
if args.extraSpellId == 253600 and self:Me(args.destGUID) then
self:MessageOld(253600, "green", "info", CL.removed_by:format(args.extraSpellName, self:ColorName(args.sourceName)))
end
end
end
do
local prev = 0
function mod:HowlingShadows(args)
local t = GetTime()
if t-prev > 1 then
prev = t
self:MessageOld(args.spellId, "red", "warning", CL.casting:format(args.spellName))
end
end
end
-- [[ Imonar to Kin'garoth ]] --
function mod:Demolish(args)
if self:Me(args.destGUID) then
self:Say(args.spellId)
self:SayCountdown(args.spellId, 6)
self:PlaySound(args.spellId, "warning")
end
list[#list+1] = args.destName
self:TargetsMessage(args.spellId, "orange", list, self:LFR() and 1 or 2)
end
function mod:DemolishRemoved(args)
if self:Me(args.destGUID) then
self:CancelSayCountdown(args.spellId)
end
end
do
local prev = nil
function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, spellGUID, spellId)
if spellId == 252740 and spellGUID ~= prev then -- Annihilation
prev = spellGUID
self:MessageOld(252743, "red", "long")
end
end
end
do
local players = {}
function mod:UNIT_AURA(_, unit)
local decimation1 = self:UnitDebuff(unit, 252797)
local decimation2 = self:UnitDebuff(unit, 245770)
if decimation1 or decimation2 then
local guid = self:UnitGUID(unit)
if not players[guid] then
players[guid] = true
if unit == "player" then
self:PlaySound(252797, "warning")
self:Say(252797)
if decimation2 then -- Pre Garothi Worldbreaker
self:SayCountdown(252797, 3, nil, 2)
else -- Pre Kin'garoth
self:SayCountdown(252797, 5)
end
end
list[#list+1] = self:UnitName(unit)
self:TargetsMessage(252797, "orange", list, 2)
end
elseif players[self:UnitGUID(unit)] then
players[self:UnitGUID(unit)] = nil
end
end
end
-- [[ Before Varimathras / Coven of Shivarra ]] --
do
local prev = 0
function mod:FlamesOfReorigination(args)
if self:Me(args.destGUID) then
local t = GetTime()
if t-prev > 6 then -- reapplications *sometimes* fire _APPLIED instead of _REFRESH for some reason
prev = t
self:Say(args.spellId)
self:PlaySound(args.spellId, "warning")
self:PersonalMessage(args.spellId)
end
self:TargetBar(args.spellId, 6, args.destName)
elseif self:MobId(args.sourceGUID) == 123533 then -- don't announce those that were spread by players
self:TargetMessage(args.spellId, "red", args.destName)
end
end
end
function mod:FlamesOfReoriginationRefreshed(args)
if self:Me(args.destGUID) then
self:TargetBar(args.spellId, 6, args.destName)
end
end
function mod:FlamesOfReoriginationRemoved(args)
if self:Me(args.destGUID) then
self:StopBar(args.spellId, args.destName)
end
end
function mod:CloudOfConfusion(args)
if self:Me(args.destGUID) then
self:Say(args.spellId)
self:SayCountdown(args.spellId, 10)
self:PlaySound(args.spellId, "alarm")
end
self:TargetBar(args.spellId, 10, args.destName)
self:TargetMessage(args.spellId, "orange", args.destName)
end
function mod:CloudOfConfusionRemoved(args)
if self:Me(args.destGUID) then
self:CancelSayCountdown(args.spellId)
end
self:StopBar(args.spellId, args.destName)
end
-- [[ Before Aggramar ]] --
function mod:PunishingFlames(args)
self:MessageOld(args.spellId, "yellow", "long", CL.casting:format(args.spellName))
self:CastBar(args.spellId, 5)
end
function mod:AedisDeath(args)
self:StopBar(CL.cast:format(self:SpellName(246209))) -- Punishing Flames
end