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.

260 lines
11 KiB

local mod = DBM:NewMod(2563, "DBM-Raids-Dragonflight", 1, 1207)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20240125080131")
mod:SetCreatureID(200927)
mod:SetEncounterID(2824)
--mod:SetUsedIcons(1, 2, 3)
mod:SetHotfixNoticeRev(20231115000000)
mod:SetMinSyncRevision(20230929000000)
mod.respawnTime = 29
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 421343 422691 426725 422172",
"SPELL_CAST_SUCCESS 422277 430677 421343",
"SPELL_AURA_APPLIED 421656 422577 421455 422067",
-- "SPELL_AURA_APPLIED_DOSE",
"SPELL_AURA_REMOVED 421656 422577 421455 422067",
"SPELL_PERIODIC_DAMAGE 421532",
"SPELL_PERIODIC_MISSED 421532",
"UNIT_SPELLCAST_SUCCEEDED boss1"
)
--[[
(ability.id = 421343 or ability.id = 422691 or ability.id = 426725 or ability.id = 422172 or ability.id = 425885) and type = "begincast"
or (ability.id = 430677 or ability.id = 422277) and type = "cast"
or ability.id = 422067
or ability.id = 421455 and type = "applydebuff"
--]]
--TODO, better tracking of personal dps buffs in P2?
--general
local warnPhase = mod:NewPhaseChangeAnnounce(2, 2, nil, nil, nil, nil, nil, 2)
local specWarnGTFO = mod:NewSpecialWarningGTFO(421532, nil, nil, nil, 1, 8)
local timerPhaseCD = mod:NewStageTimer(60, 422172)
--local berserkTimer = mod:NewBerserkTimer(600)
--Stage One: The Firelord's Fury
mod:AddTimerLine(DBM:EJ_GetSectionInfo(27637))
local warnCauterizingWound = mod:NewYouAnnounce(421656, 3)
local warnCauterizingWoundOver = mod:NewFadesAnnounce(421656, 1)
local warnSearingAftermath = mod:NewTargetNoFilterAnnounce(422577, 2, nil, "Healer")
local warnOverheated = mod:NewTargetCountAnnounce(421455, 3, nil, nil, nil, nil, nil, nil, true)
local warnSeekingInferno = mod:NewIncomingCountAnnounce(425885, 2)
local specWarnBrandofDamnation = mod:NewSpecialWarningCount(421343, nil, nil, nil, 2, 2)
local yellBrandofDamnation = mod:NewShortYell(421343, nil, nil, nil, "YELL")
local yellBrandofDamnationFades = mod:NewShortFadesYell(421343, nil, nil, nil, "YELL")
local specWarnAftermathTaunt = mod:NewSpecialWarningTaunt(422577, nil, nil, nil, 1, 2)
local specWarnSearingAftermath = mod:NewSpecialWarningMoveAway(422577, nil, nil, nil, 1, 2)
local yellSearingAftermath = mod:NewShortYell(422577, 37859)
local yellSearingAftermathFades = mod:NewShortFadesYell(422577)
local specWarnOverheated = mod:NewSpecialWarningMoveAway(421455, nil, nil, nil, 1, 2)
local specWarnOverheatedTaunt = mod:NewSpecialWarningTaunt(421455, nil, nil, nil, 1, 2)
--local yellOverheated = mod:NewShortYell(421455)
local yellOverheatedFades = mod:NewShortFadesYell(421455)
local specWarnLavaGeysers = mod:NewSpecialWarningCount(422691, nil, nil, nil, 2, 2)
local timerBrandofDamnationCD = mod:NewCDCountTimer(29.9, 421343, nil, nil, nil, 5)
local timerSearingAftermathCD = mod:NewTargetTimer(6, 422577, 37859, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerOverheatedCD = mod:NewCDCountTimer(29.9, 421455, nil, nil, nil, 3)
local timerLavaGeysersCD = mod:NewCDCountTimer(25.9, 422691, nil, nil, nil, 3)
local timerSeekingInfernoCD = mod:NewCDCountTimer(21.9, 425885, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)
mod:AddPrivateAuraSoundOption(426010, true, 425885, 4)--Seeking Inferno
--Stage Two: World In Flames
mod:AddTimerLine(DBM:EJ_GetSectionInfo(27649))
local warnDevourEssence = mod:NewCountAnnounce(422277, 3)
local specWarnEncroachingDestruction = mod:NewSpecialWarningSpell(426725, nil, nil, nil, 3, 2)
local timerEncroachingDestructionCD = mod:NewNextTimer(395, 426725, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON)--basically soft berserk timer
local specWarnWorldinFlames = mod:NewSpecialWarningDodgeCount(422172, nil, nil, nil, 2, 2)
local timerDevourEssenceCD = mod:NewCDCountTimer(49, 422277, nil, nil, nil, 3)
--local timerWorldinFlamesCD = mod:NewAITimer(49, 422172, nil, nil, nil, 3)
--mod:AddInfoFrameOption(407919, true)
--mod:AddSetIconOption("SetIconOnSinSeeker", 335114, true, false, {1, 2, 3})
mod.vb.brandCount = 0
mod.vb.overheatedCount = 0
mod.vb.geyserCount = 0
mod.vb.cycleCount = 0
mod.vb.infernoCount = 0
mod.vb.encroached = false
local playerWasFirstBrand = false
function mod:OnCombatStart(delay)
self:SetStage(1)
self.vb.brandCount = 0
self.vb.overheatedCount = 0
self.vb.geyserCount = 0
self.vb.cycleCount = 0
self.vb.infernoCount = 0
self.vb.encroached = false
playerWasFirstBrand = false
timerOverheatedCD:Start(10-delay, 1)
timerBrandofDamnationCD:Start(12.9-delay, 1)
timerLavaGeysersCD:Start(self:IsMythic() and 24 or 26.9-delay, 1)
timerPhaseCD:Start(62.7-delay, 2)--62-64.9. Basically phase/world in flames timer
if self:IsMythic() then
self:EnablePrivateAuraSound(426010, "justrun", 2)
timerSeekingInfernoCD:Start(26-delay, 1)
end
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 421343 then
self.vb.brandCount = self.vb.brandCount + 1
if self:IsTanking("player", "boss1", nil, true) then
specWarnBrandofDamnation:Show(self.vb.brandCount)
specWarnBrandofDamnation:Play("targetyou")
yellBrandofDamnation:Yell()
yellBrandofDamnationFades:Countdown(self:IsEasy() and 4 or 3)
else
specWarnBrandofDamnation:Show(self.vb.brandCount)
specWarnBrandofDamnation:Play("specialsoon")
end
if self.vb.brandCount < 8 and self.vb.brandCount % 2 == 1 then--Other timers started in phase change event
timerBrandofDamnationCD:Start(nil, self.vb.brandCount+1)--29.9
end
elseif spellId == 422691 then
self.vb.geyserCount = self.vb.geyserCount + 1
specWarnLavaGeysers:Show(self.vb.geyserCount)
specWarnLavaGeysers:Play("watchstep")
if self:IsTank() then
specWarnLavaGeysers:ScheduleVoice(1, "moveboss")
end
if self.vb.geyserCount < 8 and self.vb.geyserCount % 2 == 1 then--Other timers started in phase change event
timerLavaGeysersCD:Start(self:IsMythic() and 25 or 26, self.vb.geyserCount+1)--25.9
end
elseif spellId == 426725 then
self.vb.encroached = true
specWarnEncroachingDestruction:Show()
specWarnEncroachingDestruction:Play("stilldanger")
elseif spellId == 422172 and not self.vb.encroached then
specWarnWorldinFlames:Show(self.vb.geyserCount)
specWarnWorldinFlames:Play("watchstep")
-- elseif spellId == 425885 then--Seeking Inferno
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 422277 then
warnDevourEssence:Show(self.vb.overheatedCount)
elseif spellId == 430677 then
self.vb.overheatedCount = self.vb.overheatedCount + 1
if self.vb.overheatedCount < 8 and self.vb.overheatedCount % 2 == 1 then--Other timers started in phase change event
timerOverheatedCD:Start(nil, self.vb.overheatedCount+1)--29.9
end
elseif spellId == 421343 and args:IsPlayer() then
playerWasFirstBrand = true
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 421656 and args:IsPlayer() then
warnCauterizingWound:Show()
elseif spellId == 422577 then
if args:IsPlayer() then
specWarnSearingAftermath:Show()
specWarnSearingAftermath:Play("runout")
yellSearingAftermath:Yell()
yellSearingAftermathFades:Countdown(spellId)
elseif self:IsTank() then
specWarnAftermathTaunt:Show(args.destName)
specWarnAftermathTaunt:Play("tauntboss")
else
warnSearingAftermath:Show(args.destName)
end
elseif spellId == 421455 then
warnOverheated:CombinedShow(0.3, self.vb.overheatedCount, args.destName)
if args:IsPlayer() then
specWarnOverheated:Show()
specWarnOverheated:Play("targetyou")
-- yellOverheated:Yell()
yellOverheatedFades:Countdown(spellId)
else
--Check if overheated when on person tanking the main boss, by seeing if you're tanking the main boss
if not self:IsTanking("player", "boss1", nil, true) and not playerWasFirstBrand then
local uId = DBM:GetRaidUnitId(args.destName)
if self:IsTanking(uId) then--Not tanking boss and not overheated target and they are a tank, taunt boss
specWarnOverheatedTaunt:Show(args.destName)
specWarnOverheatedTaunt:Play("tauntboss")
end
end
end
elseif spellId == 422067 then
self:SetStage(2)
self.vb.encroached = false
warnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(2))
warnPhase:Play("phasechange")
timerBrandofDamnationCD:Stop()
timerOverheatedCD:Stop()
timerLavaGeysersCD:Stop()
timerSeekingInfernoCD:Stop()
timerPhaseCD:Stop()
timerDevourEssenceCD:Start(3.7, self.vb.cycleCount+1)
end
end
--mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 421656 and args:IsPlayer() then
warnCauterizingWoundOver:Show()
elseif spellId == 422577 then
if args:IsPlayer() then
yellSearingAftermathFades:Cancel()
end
elseif spellId == 421455 then
if args:IsPlayer() then
yellOverheatedFades:Cancel()
end
elseif spellId == 422067 then
self:SetStage(1)
playerWasFirstBrand = false
self.vb.cycleCount = self.vb.cycleCount + 1
warnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(1))
warnPhase:Play("phasechange")
timerEncroachingDestructionCD:Stop()
timerDevourEssenceCD:Stop()
timerOverheatedCD:Start(10, self.vb.overheatedCount+1)
timerBrandofDamnationCD:Start(13, self.vb.brandCount+1)
timerLavaGeysersCD:Start(self:IsMythic() and 24 or 27, self.vb.geyserCount+1)
timerPhaseCD:Start(63.8, 2)
if self:IsMythic() then
timerSeekingInfernoCD:Start(26, self.vb.infernoCount+1)
end
if self.vb.cycleCount == 3 then
timerEncroachingDestructionCD:Start(100)
end
end
end
--mod.SPELL_AURA_REMOVED_DOSE = mod.SPELL_AURA_REMOVED
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if spellId == 421532 and destGUID == UnitGUID("player") and self:AntiSpam(2, 2) then
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
if spellId == 426144 then
self.vb.infernoCount = self.vb.infernoCount + 1
warnSeekingInferno:Show(self.vb.infernoCount)
-- "Seeking Inferno-426144-npc:200927-0000174417 = pull:26.0, 25.0, 74.5, 25.0, 74.2, 25.0, 74.8, 25.0,
if self.vb.infernoCount < 8 and self.vb.infernoCount % 2 == 1 then--1, 3, 5, 7--Other timers started in phase change event
timerSeekingInfernoCD:Start(25, self.vb.infernoCount+1)
end
end
end