local mod = DBM : NewMod ( 2490 , " DBM-Party-Dragonflight " , 4 , 1199 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240501102915 " )
mod : SetCreatureID ( 189340 )
mod : SetEncounterID ( 2613 )
mod : SetHotfixNoticeRev ( 20230703000000 )
--mod:SetMinSyncRevision(20211203000000)
--mod.respawnTime = 29
mod.sendMainBossGUID = true
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 373733 373742 375056 " ,
" SPELL_AURA_APPLIED 374655 375057 388523 " ,
" SPELL_AURA_APPLIED_DOSE 374655 " ,
" SPELL_AURA_REFRESH 374655 " ,
" SPELL_AURA_REMOVED 374655 388523 375055 " ,
" SPELL_PERIODIC_DAMAGE 374854 " ,
" SPELL_PERIODIC_MISSED 374854 "
)
--TODO, verify dragon strike target scan
--[[
( ability.id = 373733 or ability.id = 373742 or ability.id = 373424 or ability.id = 375056 ) and type = " begincast "
or ability.id = 374655 or ( ability.id = 388523 or ability.id = 375055 ) and ( type = " applybuff " or type = " removebuff " or type = " applydebuff " or type = " removedebuff " )
or type = " dungeonencounterstart " or type = " dungeonencounterend "
--]]
local warnDragonStrike = mod : NewTargetNoFilterAnnounce ( 373733 , 3 )
local warnGroundingSpear = mod : NewTargetNoFilterAnnounce ( 373424 , 3 )
local warnFetterStack = mod : NewStackAnnounce ( 374655 , 1 )
local warnFetter = mod : NewTargetNoFilterAnnounce ( 374655 , 1 ) --Boss Only
local specWarnMagmaWave = mod : NewSpecialWarningDodge ( 373742 , nil , nil , nil , 2 , 2 )
local specWarnGroundingSpear = mod : NewSpecialWarningYou ( 373424 , nil , nil , nil , 1 , 2 )
local yellGroundingSpear = mod : NewYell ( 373424 )
local specWarnFieryFocus = mod : NewSpecialWarningInterrupt ( 375056 , nil , nil , nil , 1 , 13 )
local specWarnGTFO = mod : NewSpecialWarningGTFO ( 374854 , nil , nil , nil , 1 , 8 )
local timerDragonStrikeCD = mod : NewCDCountTimer ( 12.1 , 373733 , nil , nil , nil , 3 , nil , DBM_COMMON_L.BLEED_ICON ) --12 but lowest spell queue priority, it's often delayed by several more seconds
local timerMagmaWaveCD = mod : NewCDCountTimer ( 12.1 , 373742 , nil , nil , nil , 3 ) --Actual CD still not known, since you'd never fully see it unhindered by blade lock or reset by fetter
local timerGroundingSpearCD = mod : NewCDTimer ( 8.9 , 373424 , nil , nil , nil , 3 )
local timerFetter = mod : NewTargetTimer ( 12 , 374655 , nil , nil , nil , 5 , nil , DBM_COMMON_L.DAMAGE_ICON )
local timerFieryFocusCD = mod : NewCDCountTimer ( 30 , 375056 , nil , nil , nil , 5 , nil , DBM_COMMON_L.TANK_ICON .. DBM_COMMON_L.DEADLY_ICON )
mod.vb . magmawaveCount = 0
mod.vb . dragonCount = 0
mod.vb . focusCount = 0
mod.vb . focusInProgress = false
mod.vb . bossFettered = false
function mod : DragonStrikeTarget ( targetname )
if not targetname then return end
warnDragonStrike : Show ( targetname )
end
function mod : OnCombatStart ( delay )
self.vb . magmawaveCount = 0
self.vb . dragonCount = 0
self.vb . focusCount = 0
self.vb . focusInProgress = false
self.vb . bossFettered = false
timerMagmaWaveCD : Start ( 5.1 - delay , 1 )
timerDragonStrikeCD : Start ( 12 - delay , 1 )
timerGroundingSpearCD : Start ( 24.5 - delay )
timerFieryFocusCD : Start ( 29.2 - delay , 1 )
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 373733 then
self.vb . dragonCount = self.vb . dragonCount + 1
self : ScheduleMethod ( 0.2 , " BossTargetScanner " , args.sourceGUID , " DragonStrikeTarget " , 0.1 , 8 , true )
-- timerDragonStrikeCD:Start()
elseif spellId == 373742 then
self.vb . magmawaveCount = self.vb . magmawaveCount + 1
specWarnMagmaWave : Show ( )
specWarnMagmaWave : Play ( " watchwave " )
timerMagmaWaveCD : Start ( nil , self.vb . magmawaveCount + 1 )
-- elseif spellId == 373424 then
-- timerGroundingSpearCD:Start()
elseif spellId == 375056 then
self.vb . focusCount = self.vb . focusCount + 1
self.vb . focusInProgress = true
specWarnFieryFocus : Show ( args.sourceName )
specWarnFieryFocus : Play ( " chainboss " )
--Blade lock does NOT reset existing CD timers
--they'll queue up and cast one after another when blade lock ends
--^Old info. CDs now do reset?
--timerGroundingSpearCD:Stop()
--timerMagmaWaveCD:Stop()
--timerDragonStrikeCD:Stop()
--timerFieryFocusCD:Stop()
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 388523 or spellId == 374655 then
if spellId == 388523 then --12 second stun
self.vb . bossFettered = true
warnFetter : Show ( args.destName )
timerFetter : Start ( args.destName )
--Stop timers, since they'll reset on fetter ending, most of the time anyways
timerGroundingSpearCD : Stop ( )
timerMagmaWaveCD : Stop ( )
timerDragonStrikeCD : Stop ( )
timerFieryFocusCD : Stop ( )
else
if self : IsMythic ( ) then
local amount = args.amount or 1
if amount < 3 then
warnFetterStack : Show ( args.destName , amount )
end
end
end
elseif spellId == 375057 then
if args : IsPlayer ( ) then
specWarnGroundingSpear : Show ( )
specWarnGroundingSpear : Play ( " targetyou " )
yellGroundingSpear : Yell ( )
elseif not self : IsMythic ( ) then --On non mythic only one target, else everyone gets it so no need to target announce
warnGroundingSpear : Show ( args.destName )
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
mod.SPELL_AURA_REFRESH = mod.SPELL_AURA_APPLIED
function mod : SPELL_AURA_REMOVED ( args )
local spellId = args.spellId
if spellId == 388523 then
self.vb . bossFettered = false
timerFetter : Stop ( args.destName )
--Fetter on other hand does seem to hard reset things, to an extent
if not self.vb . focusInProgress then
timerMagmaWaveCD : Start ( 8.7 , self.vb . magmawaveCount + 1 )
timerDragonStrikeCD : Start ( 15.1 , self.vb . dragonCount + 1 )
timerGroundingSpearCD : Start ( 27.2 )
timerFieryFocusCD : Start ( 30.9 , self.vb . focusCount + 1 )
else
--GG, boss bugged for you and he's gonna come out of this phase and recast Fiery Focus Immediately
DBM : Debug ( " Bugged Boss Detected, Good Luck (and also review this log later) " )
end
elseif spellId == 374655 and not self : IsMythic ( ) then
timerFieryFocusCD : AddTime ( 2 )
elseif spellId == 375055 then --Fiery Focus Removed
self.vb . focusInProgress = false
if not self.vb . bossFettered then
timerMagmaWaveCD : Start ( 6.8 , self.vb . magmawaveCount + 1 )
timerDragonStrikeCD : Start ( 13.4 , self.vb . dragonCount + 1 )
timerGroundingSpearCD : Start ( 25.7 )
timerFieryFocusCD : Start ( 30.2 , self.vb . focusCount + 1 )
end
end
end
function mod : SPELL_PERIODIC_DAMAGE ( _ , _ , _ , _ , destGUID , _ , _ , _ , spellId , spellName )
if spellId == 374854 and destGUID == UnitGUID ( " player " ) and self : AntiSpam ( 3 , 2 ) then
specWarnGTFO : Show ( spellName )
specWarnGTFO : Play ( " watchfeet " )
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE