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