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.

676 lines
30 KiB

local mod = DBM:NewMod(2519, "DBM-Raids-Dragonflight", 1, 1207)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20240721192753")
mod:SetCreatureID(204931)
mod:SetEncounterID(2677)
--mod:SetUsedIcons(1, 2, 3)
mod:SetHotfixNoticeRev(20240206000000)
mod:SetMinSyncRevision(20231208000000)
mod.respawnTime = 29
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 419506 420422 417455 417431 412761 428963 428400 428971 428968 428965 419123 422837 410223 425492 422518 419144",
"SPELL_CAST_SUCCESS 430441 422935 422524 426368",
"SPELL_AURA_APPLIED 417807 417443 429866 423717 425494 422517 429903 429906",
"SPELL_AURA_APPLIED_DOSE 417807 417443 429866 425494",
"SPELL_AURA_REMOVED 419144",
"SPELL_PERIODIC_DAMAGE 419504 425483",
"SPELL_PERIODIC_MISSED 419504 425483",
"CHAT_MSG_MONSTER_YELL",
"UNIT_DIED"
)
--[[
(ability.id = 419506 or ability.id = 420422 or ability.id = 417455 or ability.id = 417431 or ability.id = 419144 or ability.id = 412761 or ability.id = 428963 or ability.id = 428400 or ability.id = 428971 or ability.id = 428968 or ability.id = 428965 or ability.id = 419123 or ability.id = 422837 or ability.id = 410223 or ability.id = 425492 or ability.id = 422518) and type = "begincast"
or (ability.id = 430441 or ability.id = 414186 or ability.id = 421937 or ability.id = 422935 or ability.id = 429875 or ability.id = 429876 or ability.id = 422524 or ability.id = 426368 or ability.id = 414186 or ability.id = 422032) and type = "cast"
or ability.id = 419144 and (type = "applybuff" or type = "removebuff")
or (ability.id = 414187 or ability.id = 425525 or ability.id = 428988 or ability.id = 428970) and type = "applydebuff"
or ability.id = 422517 and type = "applybuff"
or ability.id = 417807 and type = "applydebuff"
--]]
--TODO, tank swap stacks/when to taunt in stage 3, or maybe periods of time it shoudln't happen on mythic (if holding seed and shit going on, don't distract with taunt warning type deal)
--General
local warnPhase = mod:NewPhaseChangeAnnounce(2, 2, nil, nil, nil, nil, nil, 2)
local specWarnGTFO = mod:NewSpecialWarningGTFO(419504, nil, nil, nil, 1, 8)
local timerPhaseCD = mod:NewStageTimer(60, 408330)
--local berserkTimer = mod:NewBerserkTimer(600)
--Stage One: The Dream Render
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26666))
local warnDarkflameShades = mod:NewCountAnnounce(430441, 2, nil, false)
local warnDarkflameCleave = mod:NewCountAnnounce(426368, 4, nil, nil, 845)
local warnFirestorm = mod:NewCountAnnounce(419506, 4, nil, nil, nil, nil, nil, 2)--icon, optionDefault, optionName, castTime, preWarnTime, soundOption, noFilter
local warnBlaze = mod:NewCountAnnounce(414186, 3, nil, nil, nil, nil, nil, 2)
local warnAflame = mod:NewCountAnnounce(417807, 3, nil, nil, DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.stack:format(417807))--Player
local warnFyralathsMark = mod:NewStackAnnounce(417443, 3, nil, "Tank|Healer")
local specWarnWildFire = mod:NewSpecialWarningCount(420422, nil, nil, nil, 2, 2)
local specWarnDreamRend = mod:NewSpecialWarningRunCount(417455, nil, nil, nil, 4, 2)
local specWarnFyralathsBite = mod:NewSpecialWarningDefensive(417431, nil, nil, nil, 1, 2)
local specWarnFyralathsMark = mod:NewSpecialWarningTaunt(417443, nil, 37454, nil, 1, 2)
local timerDarkflameShadesCD = mod:NewCDCountTimer(49, 430441, nil, false, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)
local timerDarkflameCleaveCD = mod:NewCDCountTimer(49, 426368, DBM_COMMON_L.GROUPSOAKS.." (%s)", nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)--Shortname "Soaks"
local timerDarkflameCleave = mod:NewCastCountTimer(4, 426368, DBM_COMMON_L.GROUPSOAKS.." (%s)", nil, nil, 5, nil, DBM_COMMON_L.MYTHIC_ICON)
local timerFirestormCD = mod:NewCDCountTimer(49, 419506, nil, nil, nil, 3)
local timerWildFireCD = mod:NewCDCountTimer(49, 420422, nil, nil, nil, 2)
local timerDreamRendCD = mod:NewCDCountTimer(49, 417455, nil, nil, nil, 3)--"Pull" short text. MIght change to "Pull in" though if it's unclear to users
local timerBlazeCD = mod:NewCDCountTimer(49, 414186, nil, nil, nil, 3)
local timeAFlameCD = mod:NewCDCountTimer(49, 417807, nil, "RemoveMagic", 2, 5, nil, DBM_COMMON_L.MAGIC_ICON)
local timerFyralathsBiteCD = mod:NewCDCountTimer(49, 417431, DBM_COMMON_L.FRONTAL.." (%s)", nil, 2, 5, nil, DBM_COMMON_L.TANK_ICON)
mod:AddPrivateAuraSoundOption(419060, true, 419506, 1)--Firestorm
mod:AddPrivateAuraSoundOption(426370, true, 426370, 1)--Darkflame Cleave
mod:AddPrivateAuraSoundOption(414187, true, 414186, 1)--Blaze
--Intermission: Amirdrassil in Peril
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26667))
local warnShadowflameOrbs = mod:NewCountAnnounce(421937, 2)
local warnShadowflameEruption = mod:NewCountAnnounce(429866, 4, nil, false, DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.stack:format(429866))--Player
local specWarnIncarnate = mod:NewSpecialWarningDodgeCount(412761, nil, 374763, nil, 2, 2)
local specWarnShadowflameBreath = mod:NewSpecialWarningDodgeCount(410223, nil, 17088, nil, 2, 2)
local specWarnFlamebound = mod:NewSpecialWarningYou(429903, nil, nil, nil, 1, 15, 4)
local specWarnShadowbound = mod:NewSpecialWarningYou(429906, nil, nil, nil, 1, 15, 4)
local timerCorrupt = mod:NewCastTimer(13, 419144, nil, nil, nil, 6)
local timerShadowflameOrbsCD = mod:NewCDCountTimer(49, 421937, nil, nil, nil, 5)
local timerIncarnateCD = mod:NewCDCountTimer(8.5, 412761, 374763, nil, nil, 6)--Short name "Lift off"
--local timerIncarnate = mod:NewCastTimer(8.5, 412761, 374763, nil, nil, 2)
local timerShadowflameBreathCD = mod:NewCDCountTimer(49, 410223, 17088, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)
--mod:AddPrivateAuraSoundOption(429903, true, 429903, 1)--Flamebound
--mod:AddPrivateAuraSoundOption(429906, true, 429906, 1)--Shadowbound
--Stage Two: Children of the Stars
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26668))
local warnSpirits = mod:NewCountAnnounce(422032, 3, nil, nil, 263222)
local warnGreaterFirestorm = mod:NewCountAnnounce(422518, 3)
local warnExplodingCore = mod:NewCastAnnounce(428400, 4)
local warnMythicDebuffs = mod:NewAnnounce("warnMythicDebuffs", 3, 428970, nil, nil, nil, 428970)
local specWarnMoltenGauntlet = mod:NewSpecialWarningDefensive(428963, nil, nil, nil, 1, 2)
local specWarnShadowGauntlet = mod:NewSpecialWarningDefensive(428965, nil, nil, nil, 1, 2)
local specWarnFlamefall = mod:NewSpecialWarningRunCount(419123, nil, nil, nil, 4, 2)
local specWarnShadowflameDevastation = mod:NewSpecialWarningDodgeCount(422524, nil, 406227, nil, 2, 2)--Short name "Deep Breath"
local timerSpiritsCD = mod:NewCDCountTimer(49, 422032, 263222, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)--Shortname "Spirits"
local timerGreaterFirestormCD = mod:NewCDCountTimer(49, 422518, 419506, nil, nil, 3, nil, DBM_COMMON_L.HEALER_ICON)
local timerMoltenGauntletCD = mod:NewCDNPTimer(11.7, 428963, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
--local timerMoltenEruptionCD = mod:NewCDNPTimer(23, 428971, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)
local timerShadowGauntletCD = mod:NewCDNPTimer(11.7, 428965, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
--local timerShadowCageCD = mod:NewCDNPTimer(23, 428968, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)
local timerMythicDebuffs = mod:NewTimer(45, "timerMythicDebuffs", 428970, nil, nil, 3, nil, nil, nil, nil, nil, nil, nil, 428970)--Key matched to BW
local timerFlamefallCD = mod:NewCDCountTimer(49, 419123, nil, nil, nil, 2)
local timerShadowflameDevastationCD = mod:NewCDCountTimer(49, 422524, 406227, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON)
mod:AddPrivateAuraSoundOption(422520, true, 422518, 1)--Greater Firestorm
mod:AddPrivateAuraSoundOption(428988, true, 428971, 1)--Molten Eruption
mod:AddPrivateAuraSoundOption(428970, true, 428968, 1)--Shadow Cage
--Stage Three: Shadowflame Incarnate
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26670))
local warnBloom = mod:NewYouAnnounce(423717, 1)
local warnInfernalMaw = mod:NewStackAnnounce(425492, 3, nil, "Tank|Healer")
local warnEternalFirestorm = mod:NewCountAnnounce(422935, 4)
local warnEternalFirestormSwirl = mod:NewCountAnnounce(402736, 3, nil, nil, 143413)--Short name "Swirl" 143413
local specWarnApocalypseRoar = mod:NewSpecialWarningCount(422837, nil, 140459, nil, 2, 13)
local specWarnInfernalMaw = mod:NewSpecialWarningDefensive(425492, nil, nil, nil, 1, 2)
local specWarnInfernalMawTaunt = mod:NewSpecialWarningTaunt(425492, nil, nil, nil, 1, 2)
local timerApocalypseroarCD = mod:NewCDCountTimer(49, 422837, 140459, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON)
local timerInfernalMawCD = mod:NewCDCountTimer(49, 425492, nil, "Tank|healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerEternalFirestormCD = mod:NewCDCountTimer(41, 422935, 419506, nil, nil, 3, nil, DBM_COMMON_L.HEALER_ICON)
local timerEternalFirestormSwirlCD = mod:NewCDCountTimer(41, 402736, 143413, nil, nil, 3)--short name "Swirl"
local timerCorruptedSeedsCD = mod:NewCDCountTimer(41, 430048, nil, nil, nil, 5, nil, DBM_COMMON_L.MYTHIC_ICON)
mod:AddPrivateAuraSoundOption(423601, true, 423601, 1)--Seed of Amirdrassil
mod:AddPrivateAuraSoundOption(430048, true, 430048, 1)--Corrupted Seed
mod:AddPrivateAuraSoundOption(425525, true, 422935, 1)--Eternal Firestorm
mod.vb.darkflameCleaveCount = 0
mod.vb.firestormCount = 0--reused for empowered version
mod.vb.wildfireCount = 0
mod.vb.dreamRendCount = 0
mod.vb.blazeCount = 0
mod.vb.aflameCount = 0
mod.vb.tankCount = 0--Reused for tank ability in all stages
--Intermission
mod.vb.shadowflameBreathCount = 0
mod.vb.orbsCount = 0
--Stage 2
mod.vb.spiritsCount = 0
mod.vb.flameFallCount = 0
mod.vb.shadowflameDevastation = 0
mod.vb.incarnCount = 0
mod.vb.debuffsCount = 0
mod.vb.addsAlive = 0
--Stage 3
mod.vb.roarCount = 0
mod.vb.swirlCount = 0
local allTimers = {
[1.5] = {
--Blaze (Mythic Only intermission Blaze)
[4141862] = {28, 8},
--Shadowflame Orbs
[421937] = {3.5, 6, 6},
},
[2] = {--Same in all difficulties, minus Aflame
--Flamefall
[420422] = {5.8, 75, 79.9},
--Fyr'alath's Bite
[417431] = {17.9, 11.0, 60.0, 11.0, 11.0, 58.0, 11.0, 11.0},
--Greater Firestorm
[422518] = {35.8, 79.9, 80.0},
--Shadowflame Devastation
[422524] = {58.8, 80},
--Spirits of the Kaldorai
[422032] = {20, 20, 20, 25, 26, 25, 25, 25},
--Blaze (Heroic+ only)
[414186] = {20, 14.9, 25, 30, 26.9, 23, 30, 25},
--Blaze (Mythic only)
[4141862] = {20, 14.9, 25, 33.9, 22.9, 23, 33.9, 21},
--Incarnate
[412761] = {44.6, 80.0, 79.5},
--Aflame (Heroic)
[4178072] = {27.1, 16.0, 58.0, 16.0, 64.1, 15.9, 13.5},
--Aflame (Normal)
[4178071] = {35.4, 74.0, 80.0},
},
[3] = {
--Eternal Firestorm Embers
[402736] = {3.8, 6.4, 11.5, 11.5, 11.5, 5, 6.4, 11.5, 11.5, 11.5, 5, 6.4, 11.5, 11.5, 11.5, 5, 6.4, 11.5, 11.5, 11.5, 5, 6.4, 11.5, 11.5, 11.5},--Effectively 5, 6.4, 11.5, 11.5, 11.5 repeating, but with variance and no way to resync when it strays a little
},
}
---@param self DBMMod
local function blazeLoop(self)
self.vb.blazeCount = self.vb.blazeCount + 1
warnBlaze:Show(self.vb.blazeCount)
warnBlaze:Play("farfromline")
local stage = self.vb.phase
local timer
if stage == 1 then
if self:IsMythic() then
timer = self.vb.blazeCount % 2 == 0 and 34 or 27
else
timer = self.vb.blazeCount % 2 == 0 and 29.5 or 23.9
end
elseif stage == 1.5 or stage == 2 then--Still best sequenced sine it's larger pattern
timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, self:IsMythic() and 4141862 or 414186, self.vb.blazeCount+1)
else--Stage 3
timer = self:IsMythic() and (self.vb.blazeCount % 2 == 0 and 33 or 13) or (self.vb.blazeCount % 2 == 0 and 28 or 13)
end
if timer then
timerBlazeCD:Start(timer, self.vb.blazeCount+1)
self:Schedule(timer, blazeLoop, self)
end
end
---@param self DBMMod
local function eternalFireLoop(self)
self.vb.firestormCount = self.vb.firestormCount + 1
warnEternalFirestorm:Show(self.vb.firestormCount)
local timer = self:IsMythic() and 46 or 41
timerEternalFirestormCD:Start(timer, self.vb.firestormCount+1)
self:Schedule(timer, eternalFireLoop, self)
end
---@param self DBMMod
local function eternalFireSwirlLoop(self)
self.vb.swirlCount = self.vb.swirlCount + 1
warnEternalFirestormSwirl:Show(self.vb.swirlCount)
local timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, 402736, self.vb.swirlCount+1)
if timer then
timerEternalFirestormSwirlCD:Start(timer, self.vb.swirlCount+1)
self:Schedule(timer, eternalFireSwirlLoop, self)
end
end
--Countmod inherits firestorm count on initial then iterates on loop
---@param self DBMMod
local function mythicDebuffs(self)
self.vb.debuffsCount = self.vb.debuffsCount + 1
warnMythicDebuffs:Show(self.vb.debuffsCount)
timerMythicDebuffs:Start(23, self.vb.debuffsCount+1)
self:Schedule(23, mythicDebuffs, self)
end
---@param self DBMMod
local function orbsLoop(self)
self.vb.orbsCount = self.vb.orbsCount + 1
warnShadowflameOrbs:Show(self.vb.orbsCount)
local timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, 421937, self.vb.orbsCount+1)
if timer then
timerShadowflameOrbsCD:Start(timer, self.vb.orbsCount+1)
self:Schedule(timer, orbsLoop, self)
end
end
function mod:OnCombatStart(delay)
self:SetStage(1)
self.vb.darkflameCleaveCount = 0
self.vb.firestormCount = 0
self.vb.wildfireCount = 0
self.vb.blazeCount = 0
self.vb.aflameCount = 0
self.vb.tankCount = 0
self.vb.shadowflameBreathCount = 0
self.vb.spiritsCount = 0
self.vb.flameFallCount = 0
self.vb.shadowflameDevastation = 0
self.vb.roarCount = 0
self.vb.incarnCount = 0
self.vb.dreamRendCount = 0
self.vb.swirlCount = 0
--Hopefully the API doesn't mind registering 16 private auras at same time on pull
--It's not DBMs fault designers got carried away :D
self:EnablePrivateAuraSound(419060, "runout", 2)--Firestorm
self:EnablePrivateAuraSound(414187, "lineyou", 17)--Blaze
self:EnablePrivateAuraSound(421825, "lineyou", 17, 414187)--Register Additional blaze Ids (6 in total)
self:EnablePrivateAuraSound(421826, "lineyou", 17, 414187)--Register Additional blaze Ids (6 in total)
self:EnablePrivateAuraSound(421827, "lineyou", 17, 414187)--Register Additional blaze Ids (6 in total)
self:EnablePrivateAuraSound(421828, "lineyou", 17, 414187)--Register Additional blaze Ids (6 in total)
self:EnablePrivateAuraSound(421829, "lineyou", 17, 414187)--Register Additional blaze Ids (6 in total)
self:EnablePrivateAuraSound(422520, "runout", 2)--Greater Firestorm
self:EnablePrivateAuraSound(423601, "seedyou", 15)--Seed of Amirdrassil
self:EnablePrivateAuraSound(430048, "seedyou", 15)--Corrupted Seed
self:EnablePrivateAuraSound(425525, "runout", 2)--Eternal Firestorm
if self:IsMythic() then
self:EnablePrivateAuraSound(426370, "gathershare", 2)--Darkflame Cleave
-- self:EnablePrivateAuraSound(429903, "flameyou", 15)--Flamebound
-- self:EnablePrivateAuraSound(429906, "shadowyou", 15)--Shadowbound
self:EnablePrivateAuraSound(428988, "flameyou", 15)--Molten Eruption (because both molten and shadow are bombs, can't just use bombyou for both, so better to elemental asign)
self:EnablePrivateAuraSound(428970, "shadowyou", 15)--Shadow Cage (because both molten and shadow are bombs, can't just use bombyou for both, so better to elemental asign)
timerWildFireCD:Start(4, 1)
timerDarkflameShadesCD:Start(6.4, 1)--Bite minus 2.5
timeAFlameCD:Start(7.9, 1)
timerFyralathsBiteCD:Start(8.9, 1)
timerFirestormCD:Start(12.5, 1)
timerDarkflameCleaveCD:Start(28, 1)
timerBlazeCD:Start(36, 1)--Heroic/Mythic only
self:Schedule(36, blazeLoop, self)
timerDreamRendCD:Start(41.9, 1)
else
timerWildFireCD:Start(3.9, 1)
timeAFlameCD:Start(self:IsHard() and 7.9 or 12, 1)
timerFyralathsBiteCD:Start(8.9, 1)
timerFirestormCD:Start(12.9, 1)
timerDreamRendCD:Start(41.9, 1)
if self:IsHeroic() then
timerBlazeCD:Start(32, 1)--Heroic/Mythic only
self:Schedule(32, blazeLoop, self)
end
end
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 419506 then
self.vb.firestormCount = self.vb.firestormCount + 1
warnFirestorm:Show(self.vb.firestormCount)
warnFirestorm:Play("watchstep")
timerFirestormCD:Start(self:IsMythic() and 61 or 53.4, self.vb.firestormCount+1)
elseif spellId == 420422 then
self.vb.wildfireCount = self.vb.wildfireCount + 1
specWarnWildFire:Show(self.vb.wildfireCount)
specWarnWildFire:Play("aesoon")
local timer
if self.vb.wildfireCount == 1 then--One off cast
timer = self:IsMythic() and 38 or 24
else--It's just a static repeating timer
timer = self:IsMythic() and 61 or 53.4
end
timerWildFireCD:Start(timer, self.vb.wildfireCount+1)
elseif spellId == 417455 then
self.vb.dreamRendCount = self.vb.dreamRendCount + 1
specWarnDreamRend:Show(self.vb.dreamRendCount)
specWarnDreamRend:Play("justrun")
timerDreamRendCD:Start(self:IsMythic() and 61 or 53.4, self.vb.dreamRendCount+1)
elseif spellId == 417431 then
self.vb.tankCount = self.vb.tankCount + 1
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then--Boss1 isn't certainty, could be tree, GUID matching used
specWarnFyralathsBite:Show()
specWarnFyralathsBite:Play("defensive")
end
local timer
if self:GetStage(2) then
timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, spellId, self.vb.tankCount+1)
else--Stage 1
--31, 15, 15 repeating on mythic, 23.4, 15.0, 15.0 repeating non mythc
if self.vb.tankCount % 3 == 0 then
timer = self:IsMythic() and 31 or 23.4
else
timer = 15
end
end
if timer then
timerFyralathsBiteCD:Start(timer, self.vb.tankCount+1)
end
elseif spellId == 419144 then--Corrupt
timerShadowflameOrbsCD:Start(3.5, 1)
self:Schedule(3.5, orbsLoop, self)
elseif spellId == 412761 then
self.vb.incarnCount = self.vb.incarnCount + 1
specWarnIncarnate:Show(self.vb.incarnCount)
if self:GetStage(1) then
specWarnIncarnate:Play("carefly")--Stage 1, it's transition which comes with knockback
self:SetStage(1.5)
self.vb.addsAlive = 0
self.vb.orbsCount = 0
self.vb.blazeCount = 0
warnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(1.5))
warnPhase:Play("phasechange")
timerFirestormCD:Stop()
timerWildFireCD:Stop()
timerDreamRendCD:Stop()
timerFyralathsBiteCD:Stop()
timerBlazeCD:Stop()--Heroic/Mythic only
self:Unschedule(blazeLoop)
timerDarkflameShadesCD:Stop()--Mythic Only
timerDarkflameCleaveCD:Stop()--Mythic Only
timerCorrupt:Start(13)
if self:IsMythic() then
timerBlazeCD:Start(28, 1)--Mythic only
self:Schedule(28, blazeLoop, self)
end
else
if self.vb.incarnCount == 3 then--only two sets of adds, 3rd one is only a knockback cause he's going dragon again
specWarnIncarnate:Play("carefly")
else
specWarnIncarnate:Play("mobsoon")--Stage 2, he's lifting off for big adds
end
local timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, spellId, self.vb.incarnCount+1)
if timer then
timerIncarnateCD:Start(timer, self.vb.incarnCount+1)
end
end
elseif spellId == 422518 then
self.vb.firestormCount = self.vb.firestormCount + 1
warnGreaterFirestorm:Show(self.vb.firestormCount)
local timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, spellId, self.vb.firestormCount+1)
if timer then
timerGreaterFirestormCD:Start(timer, self.vb.firestormCount+1)
end
-- timerIncarnate:Start()--Always cast after
elseif spellId == 428963 then
timerMoltenGauntletCD:Start(nil, args.sourceGUID)
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
specWarnMoltenGauntlet:Show()
specWarnMoltenGauntlet:Play("defensive")
end
elseif spellId == 428965 then--Not verified yet
timerShadowGauntletCD:Start(nil, args.sourceGUID)
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
specWarnShadowGauntlet:Show()
specWarnShadowGauntlet:Play("defensive")
end
elseif spellId == 428400 and self:AntiSpam(5, 1) then--Not verified yet
warnExplodingCore:Show()
-- elseif spellId == 428971 then--Not verified yet
--timerMoltenEruptionCD:Start(nil, args.sourceGUID)
-- elseif spellId == 428968 then--Not verified yet
--timerShadowCageCD:Start(nil, args.sourceGUID)
elseif spellId == 419123 then
self.vb.flameFallCount = self.vb.flameFallCount + 1
specWarnFlamefall:Show(self.vb.flameFallCount)
specWarnFlamefall:Play("justrun")
local timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, spellId, self.vb.flameFallCount+1)
if timer then
timerFlamefallCD:Start(timer, self.vb.flameFallCount+1)
end
elseif spellId == 422837 then
self.vb.roarCount = self.vb.roarCount + 1
specWarnApocalypseRoar:Show(self.vb.roarCount)
specWarnApocalypseRoar:Play("pushbackincoming")
timerApocalypseroarCD:Start(self:IsMythic() and 46 or 40.9, self.vb.roarCount+1)
if self:IsMythic() then
timerCorruptedSeedsCD:Start(18, self.vb.roarCount)
end
elseif spellId == 410223 then
self.vb.shadowflameBreathCount = self.vb.shadowflameBreathCount + 1
specWarnShadowflameBreath:Show(self.vb.shadowflameBreathCount)
specWarnShadowflameBreath:Play("breathsoon")
timerShadowflameBreathCD:Start(self:IsMythic() and 46 or 40.9, self.vb.shadowflameBreathCount+1)
elseif spellId == 425492 then
self.vb.tankCount = self.vb.tankCount + 1
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then--Boss1 isn't certainty, could be tree, GUID matching used
specWarnInfernalMaw:Show()
specWarnInfernalMaw:Play("defensive")
end
--Mythic 30, 3, 10, 3 repeating
--Non Mythic 25, 3, 10, 3 repeating
local timer
if self.vb.tankCount % 4 == 0 then
timer = self:IsMythic() and 30 or 25
elseif self.vb.tankCount % 4 == 2 then
timer = 10
else--cast 1, and cast 3
timer = 3
end
timerInfernalMawCD:Start(timer, self.vb.tankCount+1)
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 430441 then
warnDarkflameShades:Show(self.vb.tankCount+1)
local timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, spellId, self.vb.tankCount+2)
if timer then
timerDarkflameShadesCD:Start(timer, self.vb.tankCount+2)
end
elseif spellId == 422524 then
self.vb.shadowflameDevastation = self.vb.shadowflameDevastation + 1
specWarnShadowflameDevastation:Show(self.vb.shadowflameDevastation)
specWarnShadowflameDevastation:Play("breathsoon")
local timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, spellId, self.vb.shadowflameDevastation+1)
if timer then
timerShadowflameDevastationCD:Start(timer, self.vb.shadowflameDevastation+1)
end
elseif spellId == 426368 then
self.vb.darkflameCleaveCount = self.vb.darkflameCleaveCount + 1
warnDarkflameCleave:Show(self.vb.darkflameCleaveCount)
timerDarkflameCleave:Start(4, self.vb.darkflameCleaveCount)
timerDarkflameCleaveCD:Start(61, self.vb.darkflameCleaveCount+1)
elseif spellId == 422935 then--Eternal Firestorm
if self:GetStage(3, 1) then
self:SetStage(3)
warnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(3))
warnPhase:Play("pthree")
self.vb.firestormCount = 0
self.vb.blazeCount = 0
self.vb.tankCount = 0
self.vb.shadowflameBreathCount = 0
timerSpiritsCD:Stop()
timerGreaterFirestormCD:Stop()
timerFlamefallCD:Stop()
timerShadowflameDevastationCD:Stop()
timerFyralathsBiteCD:Stop()
timerBlazeCD:Stop()
self:Unschedule(blazeLoop)
timerInfernalMawCD:Start(4.9, 1)
timerShadowflameBreathCD:Start(10, 1)
timerEternalFirestormCD:Start(18, 1)
self:Schedule(18, eternalFireLoop, self)
timerApocalypseroarCD:Start(34, 1)
if self:IsHard() then
timerBlazeCD:Start(12, 1)--Heroic/Mythic only
self:Schedule(12, blazeLoop, self)
if self:IsMythic() then
timerEternalFirestormCD:Start(3.8, 1)
self:Schedule(3.8, eternalFireSwirlLoop, self)
end
end
end
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 417807 then
local amount = args.amount or 1
if amount == 1 and self:AntiSpam(6, 2) then
self.vb.aflameCount = self.vb.aflameCount + 1
local timer
if self:GetStage(2, 1) then--1 and 1.5 (ie < 2)
timer = self:IsHard() and 8 or 12
else
local checkedId = self:IsHard() and 4178072 or 4178071
timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, checkedId, self.vb.aflameCount+1)
end
if timer then
timeAFlameCD:Start(timer, self.vb.aflameCount+1)
end
end
if args:IsPlayer() then
if amount % 4 == 1 then --1, 5, 9, etc...
warnAflame:Show(amount)
end
end
elseif spellId == 429866 then
if args:IsPlayer() and self:AntiSpam(3, 3) then
local amount = args.amount or 1
-- if amount % 2 == 1 then -- 1, 3, 5...
warnShadowflameEruption:Show(amount)
-- end
end
elseif spellId == 417443 then
local amount = args.amount or 1
local _, _, _, _, _, expireTime = DBM:UnitDebuff("player", spellId)
local remaining
if expireTime then
remaining = expireTime-GetTime()
end
local timer = (self:GetFromTimersTable(allTimers, false, false, 417431, self.vb.tankCount+1) or 15) - 5
if amount >= 2 and (not remaining or remaining and remaining < timer) and not UnitIsDeadOrGhost("player") and not self:IsHealer() then
specWarnFyralathsMark:Show(args.destName)
specWarnFyralathsMark:Play("tauntboss")
else
warnFyralathsMark:Show(args.destName, amount)
end
elseif spellId == 425494 then
local amount = args.amount or 1
if amount % 4 == 0 then--if amount >= 4 and (amount % 2 == 0) then (maybe use this instead of every 4 feels too infrequent)
if not args:IsPlayer() then
specWarnInfernalMawTaunt:Show(args.destName)
specWarnInfernalMawTaunt:Play("tauntboss")
else
warnInfernalMaw:Show(args.destName, amount)
end
end
elseif spellId == 423717 and args:IsPlayer() then
warnBloom:Show()
-- elseif spellId == 388479 and self:AntiSpam(5, 5) then
-- self.vb.spiritsCount = self.vb.spiritsCount + 1
-- warnSpirits:Show(self.vb.spiritsCount)
-- timerSpiritsCD:Start()
elseif spellId == 422517 and self:AntiSpam(3, args.destGUID) then
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 207796 then--Burning Colossus
self.vb.addsAlive = self.vb.addsAlive + 1
timerMoltenGauntletCD:Start(6.2, args.destGUID)
elseif cid == 214012 then--Dark Colossus
self.vb.addsAlive = self.vb.addsAlive + 1
timerShadowGauntletCD:Start(6.2, args.destGUID)
--If starting timer object here, no reason for mythic check
self.vb.debuffsCount = 0
timerMythicDebuffs:Start(6.9, 1)
self:Schedule(6.9, mythicDebuffs, self)
end
elseif spellId == 429903 and args:IsPlayer() then
specWarnFlamebound:Show()
specWarnFlamebound:Play("flameyou")
elseif spellId == 429906 and args:IsPlayer() then
specWarnShadowbound:Show()
specWarnShadowbound:Play("shadowyou")
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 419144 and self:GetStage(2, 1) then--Corrupt ending, also appies 426815 when this ends
self:SetStage(2)
timerBlazeCD:Stop()
self:Unschedule(blazeLoop)
timerShadowflameOrbsCD:Stop()
self:Unschedule(orbsLoop)
warnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(2))
warnPhase:Play("ptwo")
self.vb.firestormCount = 0
self.vb.blazeCount = 0
self.vb.tankCount = 0
self.vb.incarnCount = 0
self.vb.aflameCount = 0
timerFlamefallCD:Start(5.8, 1)
timerFyralathsBiteCD:Start(17.9, 1)
timerSpiritsCD:Start(19.1, 1)
timeAFlameCD:Start(27.1, 1)
timerGreaterFirestormCD:Start(34.9, 1)
timerIncarnateCD:Start(43.4, 1)
timerShadowflameDevastationCD:Start(57.9, 1)
timerPhaseCD:Start(215, 3)
if self:IsHard() then
timerBlazeCD:Start(20.7, 1)--Heroic/Mythic only
self:Schedule(20.7, blazeLoop, self)
end
end
end
--mod.SPELL_AURA_REMOVED_DOSE = mod.SPELL_AURA_REMOVED
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if (spellId == 419504 or spellId == 425483) and destGUID == UnitGUID("player") and self:AntiSpam(3, 4) then
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
do
local spiritsName = DBM:EJ_GetSectionInfo(28082)
--<138.97 20:33:14> [CHAT_MSG_MONSTER_YELL] This tree will not fall!#Spirit of the Kaldorei###Spirit of the Kaldorei##0#0##0#1231#nil#0#false#false#false#false
--"<158.99 20:33:34> [CHAT_MSG_MONSTER_YELL] Amirdrassil must not fall.#Spirit of the Kaldorei###Spirit of the Kaldorei##0#0##0#1236#nil#0#false#false#false#false",
--"<183.92 20:33:59> [CHAT_MSG_MONSTER_YELL] Our lives are sworn to Amirdrassil!#Spirit of the Kaldorei###Spirit of the Kaldorei##0#0##0#1241#nil#0#false#false#false#false",
function mod:CHAT_MSG_MONSTER_YELL(msg, mob)
if mob == spiritsName then--Spirits yell when they spawn, no other time, so match action name with auto localized name, no localizing required
self.vb.spiritsCount = self.vb.spiritsCount + 1
warnSpirits:Show(self.vb.spiritsCount)
local timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, 422032, self.vb.spiritsCount+1)
if timer then
timerSpiritsCD:Start(timer, self.vb.spiritsCount+1)
end
end
end
end
--https://www.wowhead.com/ptr-2/npc=214011/flamespawn
--https://www.wowhead.com/ptr-2/npc=207800/spirit-of-the-kaldorei
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 212422 then--Darkflame Shade
--timerFyralathsFlameCD:Stop(args.destGUID)
elseif cid == 207796 then--Burning Colossus
self.vb.addsAlive = self.vb.addsAlive - 1
timerMoltenGauntletCD:Stop(args.destGUID)
--timerMoltenEruptionCD:Stop(args.destGUID)
if self.vb.addsAlive == 0 then
timerMythicDebuffs:Stop()
self:Unschedule(mythicDebuffs)
end
elseif cid == 214012 then--Dark Colossus
self.vb.addsAlive = self.vb.addsAlive - 1
timerShadowGauntletCD:Stop(args.destGUID)
--timerShadowCageCD:Stop(args.destGUID)
if self.vb.addsAlive == 0 then
timerMythicDebuffs:Stop()
self:Unschedule(mythicDebuffs)
end
end
end