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.
250 lines
7.7 KiB
250 lines
7.7 KiB
|
|
--------------------------------------------------------------------------------
|
|
-- Module Declaration
|
|
--
|
|
|
|
local mod, CL = BigWigs:NewBoss("Gorothi Worldbreaker", 1712, 1992)
|
|
if not mod then return end
|
|
mod:RegisterEnableMob(122450) -- Garothi Worldbreaker
|
|
mod.engageId = 2076
|
|
mod.respawnTime = 30
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Locals
|
|
--
|
|
|
|
local stage = 1
|
|
local nextApocalypseDriveWarning = 0
|
|
local annihilatorHaywired = nil
|
|
local decimationCasted = 0
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Localization
|
|
--
|
|
|
|
local L = mod:GetLocale()
|
|
if L then
|
|
L.cannon_ability = mod:SpellName(52541) -- Cannon Assault
|
|
L.cannon_ability_desc = "Display Messages and Bars related to the 2 cannons on the Gorothi Worldbreaker's back."
|
|
L.cannon_ability_icon = 57610 -- Cannon icon
|
|
|
|
L.missileImpact = "Annihilation Impact"
|
|
L.missileImpact_desc = "Show a timer for the Annihilation missiles landing."
|
|
L.missileImpact_icon = 208426
|
|
|
|
L.decimationImpact = "Decimation Impact"
|
|
L.decimationImpact_desc = "Show a timer for the Decimation missiles landing."
|
|
L.decimationImpact_icon = 170318
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Initialization
|
|
--
|
|
|
|
function mod:GetOptions()
|
|
return {
|
|
{246220, "TANK", "SAY", "SAY_COUNTDOWN"}, -- Fel Bombardment
|
|
240277, -- Apocalypse Drive
|
|
244969, -- Eradication
|
|
244106, -- Carnage
|
|
"cannon_ability", -- Cannon Assault
|
|
{244410, "SAY", "SAY_COUNTDOWN"}, -- Decimation
|
|
"decimationImpact",
|
|
244761, -- Annihilation
|
|
"missileImpact",
|
|
247044, -- Shrapnel
|
|
},{
|
|
[246220] = "general",
|
|
[244410] = -15915, -- Decimator
|
|
[244761] = -15917, -- Annihilator
|
|
[247044] = "mythic",
|
|
}
|
|
end
|
|
|
|
function mod:OnBossEnable()
|
|
self:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", nil, "boss1")
|
|
self:Log("SPELL_CAST_SUCCESS", "Annihilation", 244294) -- normal and empowered
|
|
self:Log("SPELL_CAST_SUCCESS", "Decimation", 244399, 245294, 246919) -- normal, empowered, haywire (mythic)
|
|
self:Log("SPELL_AURA_APPLIED", "DecimationApplied", 244410, 246919)
|
|
|
|
self:Log("SPELL_AURA_APPLIED", "FelBombardment", 246220) -- Fel Bombardment pre-debuff
|
|
self:Log("SPELL_AURA_REMOVED", "FelBombardmentRemoved", 246220) -- Fel Bombardment pre-debuff
|
|
self:Log("SPELL_CAST_START", "ApocalypseDrive", 240277)
|
|
self:Log("SPELL_CAST_SUCCESS", "ApocalypseDriveSuccess", 240277)
|
|
self:Death("WeaponDeath", 122778, 122773) -- Interupts Apocalypse Drive, id: Annihilator, Decimator
|
|
self:Log("SPELL_CAST_START", "Eradication", 244969)
|
|
self:Log("SPELL_CAST_SUCCESS", "Carnage", 244106)
|
|
|
|
--[[ Mythic ]] --
|
|
self:Log("SPELL_AURA_APPLIED", "Haywire", 246897, 246965) -- Decimator Hayware, Annihilator Hayware
|
|
self:Log("SPELL_CAST_START", "Shrapnel", 247044)
|
|
end
|
|
|
|
function mod:OnEngage()
|
|
stage = 1
|
|
annihilatorHaywired = nil
|
|
decimationCasted = 0
|
|
|
|
self:Bar("cannon_ability", 8, L.cannon_ability, L.cannon_ability_icon)
|
|
self:Bar(246220, 9.4) -- Fel Bombardment
|
|
|
|
nextApocalypseDriveWarning = self:Easy() and 62 or 67 -- happens at 60% (65% hc/my)
|
|
self:RegisterUnitEvent("UNIT_HEALTH", nil, "boss1")
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Event Handlers
|
|
--
|
|
|
|
function mod:UNIT_HEALTH(event, unit)
|
|
local hp = UnitHealth(unit) / UnitHealthMax(unit) * 100
|
|
if hp < nextApocalypseDriveWarning then
|
|
self:MessageOld(240277, "cyan", "info", CL.soon:format(self:SpellName(240277))) -- Apocalypse Drive
|
|
if stage == 1 then
|
|
nextApocalypseDriveWarning = self:Easy() and 22 or 37 -- happens at 20% (35% hc/my)
|
|
else
|
|
self:UnregisterUnitEvent(event, unit)
|
|
end
|
|
end
|
|
end
|
|
|
|
do
|
|
-- Blizzard didn't give us a cast event for the haywire Annihilator.
|
|
-- It sill fires Cannon Chooser in USCS, so we wait for a bit and check if
|
|
-- Decimation got cast and if not it must've been Annihilation!
|
|
local function checkForDecimation()
|
|
if GetTime()-decimationCasted > 1 then
|
|
mod:Annihilation()
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, _, spellId)
|
|
if spellId == 245124 and annihilatorHaywired then -- Cannon Chooser
|
|
self:SimpleTimer(checkForDecimation, 0.1)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:Annihilation()
|
|
self:MessageOld(244761, "red", "alert")
|
|
self:CDBar("missileImpact", 6.2, L.missileImpact, L.missileImpact_icon)
|
|
self:Bar(244761, (self:Mythic() or stage == 1) and 31.6 or 15.8) -- Annihilation
|
|
if stage == 1 or self:Mythic() then
|
|
self:Bar(244410, 15.8) -- Decimation
|
|
end
|
|
end
|
|
|
|
do
|
|
local isOnMe = false
|
|
|
|
local function warn()
|
|
if not isOnMe then
|
|
mod:MessageOld(244410, "yellow")
|
|
end
|
|
end
|
|
|
|
function mod:Decimation(args)
|
|
self:Bar(244410, (self:Mythic() or stage == 1) and 31.6 or 15.8) -- Decimation
|
|
self:CDBar("decimationImpact", args.spellId == 246919 and 7 or 10, L.decimationImpact, L.decimationImpact_icon) -- 246919 = haywire (mythic)
|
|
if stage == 1 or self:Mythic() then
|
|
self:Bar(244761, 15.8) -- Annihilation
|
|
end
|
|
decimationCasted = GetTime()
|
|
isOnMe = false
|
|
self:SimpleTimer(warn, 0.3)
|
|
end
|
|
|
|
function mod:DecimationApplied(args)
|
|
if self:Me(args.destGUID) then
|
|
isOnMe = true
|
|
self:PlaySound(244410, "warning")
|
|
self:PersonalMessage(244410)
|
|
self:Say(244410)
|
|
if args.spellId ~= 246919 then -- Haywire Decimation
|
|
self:SayCountdown(244410, 5)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:FelBombardment(args)
|
|
if self:Me(args.destGUID) then
|
|
self:Say(args.spellId)
|
|
self:SayCountdown(args.spellId, 7)
|
|
self:TargetBar(args.spellId, 7, args.destName)
|
|
self:PlaySound(args.spellId, "warning")
|
|
else
|
|
self:PlaySound(args.spellId, "alarm", nil, args.destName) -- Different sound for when tanking/offtanking
|
|
end
|
|
self:TargetMessage(args.spellId, "purple", args.destName)
|
|
self:Bar(args.spellId, self:Mythic() and 15.8 or 20.7)
|
|
end
|
|
|
|
function mod:FelBombardmentRemoved(args)
|
|
if self:Me(args.destGUID) then
|
|
self:CancelSayCountdown(args.spellId)
|
|
self:StopBar(args.spellId, args.destName)
|
|
end
|
|
end
|
|
|
|
function mod:ApocalypseDrive(args)
|
|
self:StopBar(L.cannon_ability)
|
|
self:StopBar(244410) -- Decimation
|
|
self:StopBar(244761) -- Annihilation
|
|
self:StopBar(246220) -- Fel Bombardment
|
|
|
|
self:MessageOld(args.spellId, "red", "long", CL.casting:format(args.spellName))
|
|
self:CastBar(args.spellId, 20)
|
|
end
|
|
|
|
function mod:ApocalypseDriveSuccess(args)
|
|
self:MessageOld(args.spellId, "orange", "alarm")
|
|
end
|
|
|
|
function mod:WeaponDeath(args)
|
|
stage = stage + 1
|
|
self:MessageOld(240277, "green", "info", CL.interrupted:format(self:SpellName(240277)))
|
|
self:StopBar(CL.cast:format(self:SpellName(240277)))
|
|
|
|
self:Bar(244969, 10) -- Eradication
|
|
self:Bar(246220, 23.1) -- Fel Bombardment
|
|
|
|
if args.mobId == 122778 then -- Annihilator death
|
|
if stage == 2 then
|
|
self:Bar(244410, 21.9) -- Decimation
|
|
end
|
|
elseif args.mobId == 122773 then -- Decimator death
|
|
if stage == 2 then
|
|
self:Bar(244761, 21.9) -- Annihilation
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:Eradication(args)
|
|
self:StopBar(args.spellId)
|
|
self:MessageOld(args.spellId, "orange", "warning", CL.casting:format(args.spellName))
|
|
self:CastBar(args.spellId, 5.5)
|
|
end
|
|
|
|
function mod:Carnage(args)
|
|
self:MessageOld(args.spellId, "orange", "alarm")
|
|
end
|
|
|
|
--[[ Mythic ]]--
|
|
function mod:Haywire(args)
|
|
stage = stage + 1
|
|
self:MessageOld(240277, "green", "long", CL.interrupted:format(self:SpellName(240277)))
|
|
self:StopBar(CL.cast:format(self:SpellName(240277)))
|
|
|
|
self:Bar(244969, 9.5) -- Eradication
|
|
self:Bar("cannon_ability", 22, L.cannon_ability, L.cannon_ability_icon)
|
|
self:Bar(246220, 23.4) -- Fel Bombardment
|
|
|
|
if args.spellId == 246965 then
|
|
annihilatorHaywired = true
|
|
end
|
|
end
|
|
|
|
function mod:Shrapnel(args)
|
|
self:CDBar(args.spellId, 4.5)
|
|
end
|
|
|