Files
coa-dbm/DBM-Naxx/PlagueQuarter/Loatheb.lua
T
Szyler dc8afd6584 5.19b (#4)
Co-authored-by: Szyler <Szyler@Szyler.com>
2024-03-03 11:23:13 -07:00

147 lines
4.3 KiB
Lua

local mod = DBM:NewMod("Loatheb", "DBM-Naxx", 3)
local L = mod:GetLocalizedStrings()
mod:SetRevision(("$Revision: 2568 $"):sub(12, -3))
mod:SetCreatureID(16011)
mod:RegisterCombat("combat")
mod:EnableModel()
mod:RegisterEvents(
"SPELL_AURA_APPLIED",
"SPELL_AURA_APPLIED_DOSE",
"SPELL_AURA_REMOVED",
"UNIT_HEALTH",
"UNIT_DIED",
"PLAYER_ALIVE"
)
-----SPORES-----
local warnSporeNow = mod:NewSpellAnnounce(29234, 2)
local warnSporeSoon = mod:NewSoonAnnounce(29234, 2)
local timerSpore = mod:NewNextTimer(30, 29234)
local specWarnCloudOfBlight = mod:NewSpecialWarningMove(79008)
-----IMPENDING DOOM-----
local warnDoomNow = mod:NewSpellAnnounce(29204, 2)
local timerNextDoom = mod:NewNextTimer(180, 29204)
local timerDoomDamage = mod:NewTimer(8, "Inevitable Doom expires!", 2122623)
-----HEALING AURA-----
local warnHealNow = mod:NewAnnounce("Healing available!", 1, 48071)
local timerNecrotic = mod:NewBuffActiveTimer(16, 2122601)
local timerCastHeal = mod:NewTimer(4, "Heal now!", nil)
-----SOFT ENRAGE-----
local warnSoftEnrageSoon = mod:NewSpellAnnounce(79009, 2)
local warnSoftEnrageNow = mod:NewSoonAnnounce(79009, 2)
local softEnrage
-----DEATHBLOOM-----
local timerNextDeathbloom = mod:NewNextTimer(30, 2122627)
local timerDeathblooming = mod:NewTimer(15, "Deathbloom expires!", 2122627)
local specWarnDeathblooming = mod:NewAnnounce("Deathbloom will expire soon!", 1,2122627)
local warnDeathbloomStack = mod:NewAnnounce("%s on >%s< (%d)", 2, 2122631)
-----MISC-----
mod:AddBoolOption("SporeDamageAlert", false)
local doomCounter = 0
local doomSpam = 0
local bloomSpam = 0
-----BOSS FUNCTIONS-----
function mod:OnCombatStart(delay)
doomSpam = 0
bloomSpam = 0
softEnrage = 0
doomCounter = 0
timerSpore:Start(15-delay)
timerNecrotic:Start(10-delay)
timerNextDoom:Start(30-delay)
timerNextDeathbloom:Start(10-delay)
self:ScheduleMethod(15-delay, "SporeSpawn")
end
-- Deathbloom (2122631)
-- Deathbloom trigger (2122627)
-- Necrotic Aura (2122601)
-- Aura of Famine (2122605)
-- Inevitable Doom (2122623)
-- Cloud of Plight (2122646)
function mod:SporeSpawn()
warnSporeNow:Show()
timerSpore:Start()
warnSporeSoon:Schedule(25)
self:ScheduleMethod(30, "SporeSpawn")
end
function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(2122646) then
if args:IsPlayer() then
specWarnCloudOfBlight:Show();
end
elseif args:IsSpellID(2122623,2122624,2122625,2122626) and (GetTime() - doomSpam) > 5 then
doomSpam = GetTime() -- Inevitable Doom
doomCounter = doomCounter + 1
local timer = 30
if doomCounter >= 7 then
if doomCounter % 2 == 0 then
timer = 17
else
timer = 12
end
end
warnDoomNow:Show(doomCounter)
timerNextDoom:Start(timer, doomCounter + 1)
timerDoomDamage:Start()
elseif args:IsSpellID(2122601) and DBM:AntiSpam(5,2) then
timerNecrotic:Start()
warnHealNow:Schedule(16)
timerCastHeal:Schedule(16)
elseif args:IsSpellID(2122627) and DBM:AntiSpam(5,4) then
specWarnDeathblooming:Show()
timerDeathblooming:Start()
timerNextDeathbloom:Start()
end
end
function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsSpellID(2122646) then
if args:IsPlayer() then
specWarnCloudOfBlight:Show();
end
elseif args:IsSpellID(2122631) then
if args:IsPlayer() and (args.amount == 5 or args.amount == 10 or args.amount == 15 or args.amount == 20) and (GetTime() - bloomSpam) > 5 then
bloomSpam = GetTime()
warnDeathbloomStack:Show(args.spellName, args.destName, args.amount or 1)
end
end
end
function mod:UNIT_HEALTH(uId)
if self:GetUnitCreatureId(uId) == 16011 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.25 and softEnrage == 0 then
softEnrage = 1
warnSoftEnrageSoon:Show()
elseif self:GetUnitCreatureId(uId) == 16011 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.20 and softEnrage == 1 then
softEnrage = 2
warnSoftEnrageNow:Show()
warnSporeSoon:Cancel()
timerSpore:Stop()
timerNecrotic:Stop()
warnHealNow:Cancel()
timerNextDoom:Stop()
self:UnscheduleMethod("SporeSpawn")
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 16011 or cid == 26619 then
timerNecrotic:Stop()
timerNextDeathbloom:Stop()
timerDeathblooming:Stop()
timerNextDoom:stop()
end
end
function mod:OnCombatEnd()
timerNecrotic:Stop()
timerNextDeathbloom:Stop()
timerDeathblooming:Stop()
timerNextDoom:stop()
end