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.

249 lines
7.4 KiB

--------------------------------------------------------------------------------
-- Module Declaration
--
local mod, CL = BigWigs:NewBoss("Harjatan the Bludger", 1676, 1856)
if not mod then return end
mod:RegisterEnableMob(116407)
mod.engageId = 2036
mod.respawnTime = 30
--------------------------------------------------------------------------------
-- Locals
--
local rageCounter = 0
local roarCounter = 0
local skipDrawIn = true
local nextDrawIn = 0
local drawInCheck = nil
--------------------------------------------------------------------------------
-- Localization
--
local L = mod:GetLocale()
if L then
L.custom_on_fixate_plates = "Fixate icon on Enemy Nameplate"
L.custom_on_fixate_plates_desc = "Show an icon on the target nameplate that is fixating on you.\nRequires the use of Enemy Nameplates. This feature is currently only supported by KuiNameplates."
L.custom_on_fixate_plates_icon = 234128
end
--------------------------------------------------------------------------------
-- Initialization
--
function mod:GetOptions()
return {
{231998, "TANK"}, -- Jagged Abrasion
231854, -- Unchecked Rage
232192, -- Commanding Roar
232061, -- Draw In
233429, -- Frigid Blows
232174, -- Frosty Discharge
{231729, "SAY", "FLASH"}, -- Aqueous Burst
231768, -- Drenching Waters
{234128, "SAY", "FLASH"}, -- Driven Assault
"custom_on_fixate_plates",
240319, -- Hatching
{241600, "SAY", "FLASH"}, -- Sickly Fixate
"berserk",
},{
[231998] = "general",
[231729] = -14555,
[234128] = -14722,
[240319] = "mythic",
}
end
function mod:OnBossEnable()
-- General
self:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", nil, "boss1", "boss2", "boss3", "boss4", "boss5")
self:RegisterEvent("RAID_BOSS_WHISPER")
self:Log("SPELL_AURA_APPLIED", "GroundEffectDamage", 231768) -- Drenching Waters
self:Log("SPELL_PERIODIC_DAMAGE", "GroundEffectDamage", 231768)
self:Log("SPELL_PERIODIC_MISSED", "GroundEffectDamage", 231768)
-- Boss
self:Log("SPELL_AURA_APPLIED", "JaggedAbrasion", 231998)
self:Log("SPELL_AURA_APPLIED_DOSE", "JaggedAbrasion", 231998)
self:Log("SPELL_CAST_START", "UncheckedRage", 231854)
self:Log("SPELL_AURA_APPLIED", "DrawIn", 232061)
self:Log("SPELL_AURA_REMOVED_DOSE", "FrigidBlows", 233429)
self:Log("SPELL_CAST_START", "FrostyDischarge", 232174)
-- Adds
self:Log("SPELL_AURA_APPLIED", "AqueousBurst", 231729)
self:Log("SPELL_AURA_REMOVED", "AqueousBurstRemoved", 231729)
self:Log("SPELL_AURA_APPLIED", "DrivenAssault", 234016)
self:Log("SPELL_AURA_REMOVED", "DrivenAssaultRemoved", 234016)
-- Mythic
self:Log("SPELL_AURA_APPLIED", "SicklyFixate", 241600)
self:Log("SPELL_AURA_REMOVED", "SicklyFixateRemoved", 241600)
if self:GetOption("custom_on_fixate_plates") then
self:ShowPlates()
end
end
function mod:OnEngage()
roarCounter = 1
rageCounter = 1
skipDrawIn = true -- True until you get Drenching Waters on the floor
nextDrawIn = GetTime() + 58
self:CDBar(232192, 17.5) -- Commanding Roar
self:CDBar(231854, 20.7) -- Unchecked Rage
self:CDBar(232061, 58) -- Draw In
self:ScheduleTimer("drawInCheck", 58, self)
if self:Mythic() then
self:Bar(240319, 30) -- Hatching
end
if not self:LFR() then
self:Berserk(self:Mythic() and 360 or 480)
end
end
function mod:OnBossDisable()
if self:GetOption("custom_on_fixate_plates") then
self:HidePlates()
end
end
--------------------------------------------------------------------------------
-- Event Handlers
--
function mod:drawInCheck(self)
if skipDrawIn then
self:MessageOld(232061, "orange", "alarm", CL.interrupted:format(self:SpellName(232061))) -- Draw In Interrupted
nextDrawIn = GetTime() + 58
self:CDBar(232061, 58) -- Draw In
self:ScheduleTimer("drawInCheck", 58, self)
end
end
function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, _, spellId)
if spellId == 232192 then -- Commanding Roar
self:MessageOld(spellId, "red", "alert")
roarCounter = roarCounter + 1
if (nextDrawIn > GetTime() + 32.8) or skipDrawIn then
self:Bar(spellId, 32.8)
end
end
end
function mod:RAID_BOSS_WHISPER(event, msg)
if msg:find("240319", nil, true) then -- Hatching
self:MessageOld(240319, "red", "warning")
self:CastBar(240319, 22)
if (nextDrawIn > GetTime() + 40) or skipDrawIn then
self:Bar(240319, 40)
end
end
end
do
local prev = 0
function mod:GroundEffectDamage(args)
skipDrawIn = false -- Drenching Waters confirmed, no more skipping
local t = GetTime()
if self:Me(args.destGUID) and t-prev > 1.5 then
prev = t
self:MessageOld(args.spellId, "blue", "alert", CL.underyou:format(args.spellName))
end
end
end
function mod:JaggedAbrasion(args)
local amount = args.amount or 1
self:StackMessage(args.spellId, args.destName, amount, "orange", amount > 4 and "warning") -- Swap on 4~5
end
function mod:UncheckedRage(args)
self:MessageOld(args.spellId, "orange", "warning")
rageCounter = rageCounter + 1
if (nextDrawIn > GetTime() + 20.5) or skipDrawIn then
self:Bar(args.spellId, 20.5)
end
end
function mod:DrawIn(args)
self:MessageOld(args.spellId, "red", "alert", CL.casting:format(args.spellName))
self:CastBar(args.spellId, 10)
end
function mod:FrigidBlows(args)
local amount = args.amount or 1
if amount < 5 or amount % 5 == 0 then -- Every 5 stacks or when below 5.
self:StackMessage(args.spellId, args.destName, amount, "orange", amount < 4 and "alarm") -- Add sound on last 3 stacks as pre-warning that the phase is ending
end
end
function mod:FrostyDischarge(args)
roarCounter = 1
rageCounter = 1
self:MessageOld(args.spellId, "orange", "warning", args.spellName)
self:CDBar(232192, 17) -- Commanding Roar
self:CDBar(231854, 21.4) -- Unchecked Rage
if self:Mythic() then
self:Bar(240319, 32) -- Hatching
end
nextDrawIn = GetTime() + 59.1
self:CDBar(232061, 59.1) -- Draw In
end
do
local playerList = mod:NewTargetList()
function mod:AqueousBurst(args)
if self:Me(args.destGUID) then
self:Flash(args.spellId)
self:Say(args.spellId)
end
playerList[#playerList+1] = args.destName
if #playerList == 1 then
self:ScheduleTimer("TargetMessageOld", 0.3, args.spellId, playerList, "red", "alarm")
end
end
end
function mod:AqueousBurstRemoved()
skipDrawIn = false -- Drenching Waters confirmed, no more skipping
end
function mod:DrivenAssault(args)
if self:Me(args.destGUID) then
self:Flash(234128)
self:Say(234128)
if self:GetOption("custom_on_fixate_plates") then
self:AddPlateIcon(234128, args.sourceGUID, 10) -- Show the target that is fixating on you more clear
end
end
end
function mod:DrivenAssaultRemoved(args)
if self:GetOption("custom_on_fixate_plates") and self:Me(args.destGUID) then
self:RemovePlateIcon(234128, args.sourceGUID) -- Clear fixate plate incase it's removed early
end
end
function mod:SicklyFixate(args)
if self:Me(args.destGUID) then
self:Flash(args.spellId)
self:Say(args.spellId)
if self:GetOption("custom_on_fixate_plates") then
self:AddPlateIcon(args.spellId, args.sourceGUID, 10) -- Show the target that is fixating on you more clear
end
end
end
function mod:SicklyFixateRemoved(args)
if self:GetOption("custom_on_fixate_plates") and self:Me(args.destGUID) then
self:RemovePlateIcon(args.spellId, args.sourceGUID) -- Clear fixate plate incase it's removed early
end
end