local mod = DBM : NewMod ( 2553 , " DBM-Raids-Dragonflight " , 1 , 1207 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240721192753 " )
mod : SetCreatureID ( 208445 )
mod : SetEncounterID ( 2731 )
mod : SetUsedIcons ( 6 , 7 , 8 )
mod : SetHotfixNoticeRev ( 20240315000000 )
mod : SetMinSyncRevision ( 20231115000000 )
mod.respawnTime = 29
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 425889 426524 422614 418637 426206 417634 427252 427343 429973 421325 " ,
" SPELL_CAST_SUCCESS 417653 419485 427299 " ,
" SPELL_AURA_APPLIED 425888 425468 420544 426387 423719 426249 426256 421316 427299 427306 421594 418520 429032 " , -- 428946 421407
" SPELL_AURA_APPLIED_DOSE 426249 426256 418520 429032 " , -- 428946 421407
" SPELL_AURA_REMOVED 421316 427299 421594 " ,
-- "SPELL_AURA_REMOVED_DOSE",
" SPELL_PERIODIC_DAMAGE 417632 " ,
" SPELL_PERIODIC_MISSED 417632 " ,
" UNIT_DIED " ,
" INSTANCE_ENCOUNTER_ENGAGE_UNIT " ,
" UNIT_SPELLCAST_SUCCEEDED "
)
--[[
( ability.id = 425889 or ability.id = 426524 or ability.id = 422614 or ability.id = 418637 or ability.id = 426206 or ability.id = 417634 or ability.id = 427252 or ability.id = 427343 or ability.id = 429973 or ability.id = 421325 ) and type = " begincast "
or ( ability.id = 417653 or ability.id = 427299 or ability.id = 428901 ) and type = " cast "
or ability.id = 421316 and ( type = " applybuff " or type = " removebuff " )
or ability.id = 419485 and type = " cast "
--]]
--TODO, repeat yells for igniting growth? depends on if it's few targets or everyone.
--TODO, https://www.wowhead.com/ptr-2/spell=426393/seed-of-life is probably cast on pull, so no reason to alert, unless cast more than once
--TODO, best way to track https://www.wowhead.com/ptr-2/spell=425531/dream-fatigue ? Infoframe?
--TODO, nameplate aura for 424997 on Seed of life? (IE do they have visible nameplates it'd be usefulf or)
--TODO, maybe infoframe for tracking Blazing Coal stacks?
--TODO, more with the tank stuff?
--General
local warnPhase = mod : NewPhaseChangeAnnounce ( 2 , 2 , nil , nil , nil , nil , nil , 2 )
local specWarnGTFO = mod : NewSpecialWarningGTFO ( 417632 , nil , nil , nil , 1 , 8 )
--local berserkTimer = mod:NewBerserkTimer(600)
--Stage One: The Cycle of Flame
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 27241 ) )
local warnForces = mod : NewCountAnnounce ( 417653 , 3 )
local warnBlisteringSplinters = mod : NewCountAnnounce ( 418520 , 3 , nil , nil , DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS . stack : format ( 418520 ) ) --Player
--local warnDreamBlossom = mod:NewTargetNoFilterAnnounce(425468, 2, nil, false)--non filtered, but off by default
local warnScorchingRoots = mod : NewCountAnnounce ( 422614 , 3 )
local warnCharredTreant = mod : NewSpellAnnounce ( 417667 , 2 , nil , " Healer " )
local warnRenewedTreant = mod : NewSpellAnnounce ( 417668 , 1 )
local warnScorchingBramblethorn = mod : NewTargetNoFilterAnnounce ( 426387 , 2 , nil , false ) --Hella spammy. not to be defaulted
local warnNaturesBulwark = mod : NewSpellAnnounce ( 419485 , 1 )
local warnBlazingCoalescence = mod : NewCountAnnounce ( 426249 , 2 , nil , nil , DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS . stack : format ( 426249 ) ) --Player
local warnBlazingCoalescenceBoss = mod : NewStackAnnounce ( 426256 , 4 ) --Boss
local warnEverlastingBlaze = mod : NewCountAnnounce ( 429032 , 4 , nil , nil , DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS . stack : format ( 429032 ) ) --Player
local warnIgnitingGrowth = mod : NewCountAnnounce ( 425889 , 3 )
local specWarnCharredBrambles = mod : NewSpecialWarningSwitch ( 418655 , " Healer " , nil , nil , 1 , 2 )
--local specWarnIgnitingGrowth = mod:NewSpecialWarningMoveAway(425889, nil, nil, nil, 1, 2, 4)
--local yellIgnitingGrowth = mod:NewShortYell(425889, nil, false)
--local specWarnDreamBlossom = mod:NewSpecialWarningYou(425468, nil, nil, nil, 1, 2)
--local yellDreamBlossom = mod:NewShortYell(425468, nil, false)
local specWarnFieryFlourish = mod : NewSpecialWarningInterruptCount ( 426524 , " HasInterrupt " , nil , nil , 1 , 2 )
--local specWarnScorchingPursuit = mod:NewSpecialWarningRun(420544, nil, nil, nil, 4, 2)--BW using 420546, but may change to 420544
--local yellScorchingPursuit = mod:NewShortYell(420544)
local specWarnScorchingBramblethorn = mod : NewSpecialWarningYou ( 426387 , nil , nil , nil , 1 , 2 )
local specWarnFuriousCharge = mod : NewSpecialWarningRun ( 418637 , nil , 100 , nil , 4 , 2 )
local yellFuriousCharge = mod : NewShortYell ( 418637 , 100 )
local specWarnFuriousChargePreTaunt = mod : NewSpecialWarningTaunt ( 418637 , nil , 100 , nil , 1 , 2 ) --Taunt on cast start
local specWarnNaturesFury = mod : NewSpecialWarningTaunt ( 423719 , nil , nil , nil , 1 , 2 ) --Yell to taunt again if you didn't taunt in pre cast
local specWarnBlazingThornsAvoid = mod : NewSpecialWarningDodgeCount ( 426206 , " -Healer " , nil , nil , 1 , 2 ) --Initial cast to dodge
local specWarnBlazingThornsSoak = mod : NewSpecialWarningSoakCount ( 426249 , " -Healer " , nil , nil , 1 , 2 ) --Follow up orbs to soak
local specWarnRagingInferno = mod : NewSpecialWarningMoveTo ( 417634 , nil , 37625 , nil , 3 , 2 ) --Shortname Inferno
local timerIgnitingGrowthCD = mod : NewCDCountTimer ( 49 , 425889 , DBM_COMMON_L.POOLS .. " (%s) " , nil , nil , 3 , nil , DBM_COMMON_L.MYTHIC_ICON )
local timerFieryForceofNatureCD = mod : NewCDCountTimer ( 11.8 , 417653 , DBM_COMMON_L.ADDS .. " (%s) " , nil , nil , 1 )
local timerFieryFlourishCD = mod : NewCDNPTimer ( 9.7 , 426524 , nil , nil , nil , 4 , nil , DBM_COMMON_L.INTERRUPT_ICON ) --Nameplate only timer
local timerScorchingRootsCD = mod : NewCDCountTimer ( 49 , 422614 , DBM_COMMON_L.ROOTS .. " (%s) " , nil , nil , 3 )
local timerFuriousChargeCD = mod : NewCDCountTimer ( 22.5 , 418637 , 100 , nil , nil , 5 , nil , DBM_COMMON_L.TANK_ICON ) --SN "Charge"
local timerBlazingThornsCD = mod : NewCDCountTimer ( 49 , 426206 , DBM_COMMON_L.DODGES .. " (%s) " , nil , nil , 3 , nil , DBM_COMMON_L.DAMAGE_ICON )
local timerBlazingThornsSoak = mod : NewCastTimer ( 5 , 426249 , DBM_COMMON_L.ORBS .. " (%s) " , nil , nil , 5 , nil , DBM_COMMON_L.HEROIC_ICON )
local timerRagingInfernoCD = mod : NewCDCountTimer ( 49 , 417634 , 37625 , nil , nil , 2 , nil , DBM_COMMON_L.DEADLY_ICON ) --SN "Inferno"
mod : AddPrivateAuraSoundOption ( 425888 , true , 425889 , 1 ) --Igniting Growth
mod : AddPrivateAuraSoundOption ( 425468 , true , 425468 , 1 ) --Dream Blossom
mod : AddPrivateAuraSoundOption ( 420544 , true , 420544 , 4 ) --Scorching Pursuit
mod : AddSetIconOption ( " SetIconOnForces " , 417653 , true , 5 , { 8 , 7 , 6 } )
mod : JustSetCustomKeys ( 426256 , " |cff69ccf0426256|r ( " .. DBM_COMMON_L.BOSS .. " ) " )
mod : JustSetCustomKeys ( 426249 , " |cff69ccf0426249|r ( " .. PLAYER .. " ) " )
--Intermission: Unreborn Again
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 27242 ) )
local warnConsumingFlame = mod : NewTargetNoFilterAnnounce ( 421316 , 2 )
local timerConsumingFlame = mod : NewBuffActiveTimer ( 16 , 421316 , nil , nil , nil , 6 )
--Stage Two: Avatar of Ash
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 27243 ) )
local warnFlashFire = mod : NewTargetNoFilterAnnounce ( 427299 , 3 , nil , " Healer " )
local warnEncasedInAsh = mod : NewTargetNoFilterAnnounce ( 427306 , 4 , nil , " RemoveMagic " )
local warnAshenCall = mod : NewCountAnnounce ( 421325 , 2 )
--local warnSearingAsh = mod:NewCountAnnounce(421407, 2, nil, nil, DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.stack:format(426249))
local warnAshenDevastation = mod : NewCountAnnounce ( 428896 , 3 , nil , nil , 167180 ) --Shortname "Bombs"
local specWarnFallingEmbers = mod : NewSpecialWarningSoakCount ( 427252 , nil , nil , nil , 2 , 2 )
local specWarnFlashFire = mod : NewSpecialWarningMoveAway ( 427299 , nil , nil , nil , 1 , 2 ) --Blizzard didn't flag right spellids as private aura, so this probably still works for now
local yellFlashFire = mod : NewShortYell ( 427299 ) --Blizzard didn't flag right spellids as private aura, so this probably still works for now
local yellFlashFireFades = mod : NewShortFadesYell ( 427299 ) --Blizzard didn't flag right spellids as private aura, so this probably still works for now
local specWarnEncasedInAsh = mod : NewSpecialWarningYou ( 427306 , nil , nil , nil , 1 , 2 )
local yellEncasedInAsh = mod : NewShortYell ( 427306 )
local specWarnFireWhirl = mod : NewSpecialWarningDodgeCount ( 427343 , nil , 86189 , nil , 2 , 2 )
local specWarnSmolderingBackdraft = mod : NewSpecialWarningDefensive ( 429973 , nil , nil , nil , 1 , 2 )
local specWarnSmolderingSuffocation = mod : NewSpecialWarningTaunt ( 421594 , nil , nil , nil , 1 , 2 )
local yellSmolderingSuffocationRepeater = mod : NewIconRepeatYell ( 421594 , DBM_CORE_L.AUTO_YELL_ANNOUNCE_TEXT . shortyell , false , nil , " YELL " ) --using custom yell text "%s" because of custom needs (it has to use not only icons but two asci emoji
--local specWarnAshenDevestation = mod:NewSpecialWarningMoveAway(428896, nil, 37859, nil, 1, 2, 4)
--local yellAshenDevestation = mod:NewShortYell(428896, 37859)--Shortname "Bomb"
--local yellAshenDevestationFades = mod:NewShortFadesYell(428896)
local timerFallingEmbersCD = mod : NewCDCountTimer ( 49 , 427252 , nil , nil , nil , 5 , nil , DBM_COMMON_L.DEADLY_ICON )
local timerFlashFireCD = mod : NewCDCountTimer ( 49 , 427299 , L.HealAbsorb , nil , nil , 3 )
local timerFireWhirlCD = mod : NewCDCountTimer ( 50 , 427343 , 86189 , nil , nil , 3 ) --Shortname "Tornados"
local timerSmolderingBackdraftCD = mod : NewCDCountTimer ( 49 , 429973 , DBM_COMMON_L.FRONTAL .. " (%s) " , nil , nil , 5 , nil , DBM_COMMON_L.TANK_ICON )
local timerAshenCallCD = mod : NewCDCountTimer ( 11.8 , 421325 , DBM_COMMON_L.ADDS .. " (%s) " , nil , nil , 1 , nil , DBM_COMMON_L.DAMAGE_ICON )
local timerAshenDevestationCD = mod : NewCDCountTimer ( 49 , 428896 , nil , nil , nil , 3 , nil , DBM_COMMON_L.MYTHIC_ICON )
mod : AddPrivateAuraSoundOption ( 421461 , true , 427299 , 1 ) --Flash Fire
mod : AddPrivateAuraSoundOption ( 428901 , true , 428896 , 1 ) --Ashen Devestation
--Stage 1
mod.vb . ignitingCount = 0 --Reused in stage 2 for Ashen Devestation
mod.vb . forcesCount = 0 --Reused in Stage 2 for Ashen Call
mod.vb . treeIcon = 8
mod.vb . scorchingRootCount = 0 --Reused in Stage 2 for Falling Embers
mod.vb . furiousChargeCount = 0 --Reused in Stage 2 for Smoldering Backdraft
mod.vb . thornsCount = 0 --Reused in Stage 2 for Flash Fire
mod.vb . infernoCount = 0 --Reused in Stage 2 for Fire Whirl
local castsPerGUID = { }
local difficultyName = " other "
local allTimers = {
[ " mythic " ] = { --Stage 1 seems same as other difficulties, but kept split for now
--Stage 1
--Fiery Force of Nature
[ 417653 ] = { 6.5 , 104.9 , 97.7 } ,
-- 6.6, 105.5, 98.3
-- 6.5, 104.9, 98.8
-- 6.6, 104.9, 98.6
--Blazing Thorns
[ 426206 ] = { 30.7 , 24.2 , 24.2 , 37.3 , 52.7 , 64.4 , 24.2 , 24.2 , 46.5 , 65.5 } ,
-- 30.7, 24.2, 24.2, 38.5, 52.8, 64.3, 24.2
-- 30.7, 24.2, 24.2, 38.0, 52.6, 64.7, 24.2, 24.1
-- 30.8, 24.2, 24.2, 37.8, 52.8, 64.5, 24.2
--Furious Charge
--[418637] = {21.9, 22.0, 24.2, 24.2, 24.2, 28.6, 25.2},--Wildly variant, no longer used, auto corrected elsewhere
-- 21.9, 22.0, 24.2, 36.2, 24.2, 28.6, 25.3
-- 21.9, 24.2, 35.1, 24.2, 28.6, 25.2, 43.5, 22.0, 24.2, 22.50, 46.60, 22.30, 31.10, 13.30
-- 22.0, 22.0, 24.2, 35.6, 24.2, 28.6, 25.2, 43.7, 21.9
--Scorching Roots
[ 422614 ] = { 37.3 , 110.3 , 92.8 , 120.2 } ,
-- 37.3, 110.9, 93.0, 120.2
-- 37.3, 111.0, 92.8
-- 37.3, 110.5, 93.3
-- 37.4, 110.3, 93.1
--Igniting Growth (Mythic Only)
[ 425889 ] = { 14.2 , 123.5 , 79.0 } ,
-- 14.2, 124.1, 79.0
-- 14.3, 124.2, 79.6
-- 14.3, 123.5, 79.9
--Stage 2
--Falling Embers
[ 427252 ] = { 7.4 , 26.7 , 35.9 , 21.7 , 18.4 , 38.5 , 23.4 } ,
-- 7.4, 26.7, 35.9, 21.7
-- 7.4, 26.7, 35.9, 21.8
-- 7.4, 26.7, 35.9, 21.7
--FlashFire
[ 427299 ] = { 29.0 , 50.1 , 27.6 , 50.2 } ,
-- 29.0, 50.1, 36.7, 50.2
-- 29.0, 51.8, 27.6
-- 29.0, 51.8
-- 29.0, 51.8
--Fire Whirl
[ 427343 ] = { 59.1 , 32.5 , 50.2 } ,
-- 60.8, 32.5, 50.2
-- 59.1, 38.4
-- 59.1, 38.
--Smoldering backdraft
[ 429973 ] = { 14.0 , 25.8 , 19.2 , 21.7 , 16.7 , 25.10 , 18.4 } ,
-- 14.0, 25.8, 19.2, 21.7, 16.7, 25.10, 18.4
-- 14.0, 25.9, 24.2, 21.7, 16.7
-- 14.1, 25.9, 24.2, 21.8, 16.7
-- 14.0, 25.9, 24.2, 21.7
--Ashen Call
[ 421325 ] = { 20.7 , 55.1 , 56.9 } ,
-- 20.7, 55.1, 56.9
-- 20.7, 55.1
--Ashen Devestation
[ 428896 ] = { 45.4 , 68.5 } , --Lowest of each used until can figure out how to detect which sequence is used on demand
} ,
[ " other " ] = {
--Stage 1 (same as mythic stage 1 likely)
--Fiery Force of Nature
[ 417653 ] = { 6.5 , 103.6 , 98.6 } ,
--Blazing Thorns
[ 426206 ] = { 30.7 , 24.1 , 24.2 , 37.6 , 52.7 , 63.7 , 24.1 , 24.1 } ,
--Furious Charge
-- [418637] = {21.9, 22.0, 24.2, 35.6, 24.2, 28.5, 25.3, 42.8, 22.0},
--Scorching Roots
[ 422614 ] = { 37.3 , 109.1 , 92.2 } ,
--Stage 2
--Falling Embers
[ 427252 ] = { 7.4 , 26.7 , 25.0 , 23.3 , 30.0 , 20.0 , 25.0 , 25.0 , 25.0 , 26.7 , 23.3 } ,
--7.4, 26.7, 25.0, 23.3, 30.1, 20.0, 25.0, 25.0, 25.0, 26.7, 23.3
--7.4, 26.7, 25.0, 23.3, 30.0, 20.0, 25.0, 25.0, 25.0, 26.7, 23.3
--FlashFire
[ 427299 ] = { 29.1 , 46.7 , 26.6 , 36.7 , 30.9 , 37.5 , 37.5 } , --Lowest times used of variations
--29.1, 46.7, 26.6, 36.7, 36.7, 37.5
--29.1, 46.7, 26.6, 42.5, 30.9, 37.5, 37.5
--Fire Whirl
[ 427343 ] = { 54.0 , 40.9 , 32.5 , 36.6 , 36.7 , 39.1 } ,
--54.1, 40.9, 32.4, 36.7, 36.6, 39.2
--Smoldering backdraft
[ 429973 ] = { 14.0 , 25.9 , 30.0 , 19.1 , 29.2 , 20.7 , 25.0 , 24.1 , 25.0 , 26.7 } , --Lowest times used of variations
--14.0, 25.9, 30.0, 19.2, 29.2, 25.8, 25.0, 24.2, 25.0, 26.7
--14.1, 25.9, 30.0, 19.1, 29.2, 20.7, 30.0, 24.1, 25.0, 26.7
--Ashen Call
[ 421325 ] = { 20.7 , 44.2 , 42.5 , 42.5 , 38.3 , 40.8 } ,
--20.7, 44.2, 42.5, 42.5, 38.3, 40.8
} ,
}
---@param self DBMMod
local function smolderingYellRepeater ( self )
local health = UnitHealth ( " player " ) / UnitHealthMax ( " player " ) * 100
if health < 75 then -- Only let players know when you are below 75%
local playerIcon = GetRaidTargetIndex ( " player " )
local text = playerIcon and L.currentHealthIcon : format ( playerIcon , health ) or L.currentHealth : format ( health )
yellSmolderingSuffocationRepeater : Yell ( text )
end
self : Schedule ( 2 , smolderingYellRepeater , self )
end
function mod : OnCombatStart ( delay )
self : SetStage ( 1 )
self.vb . ignitingCount = 0
self.vb . forcesCount = 0
self.vb . scorchingRootCount = 0
self.vb . furiousChargeCount = 0
self.vb . thornsCount = 0
self.vb . infernoCount = 0
table.wipe ( castsPerGUID )
self : EnablePrivateAuraSound ( 425888 , " targetyou " , 2 ) --Igniting Growth
self : EnablePrivateAuraSound ( 425468 , " targetyou " , 2 ) --Dream Blossom. Bad sound, needs better?
self : EnablePrivateAuraSound ( 420544 , " justrun " , 2 ) --Scorching Pursuit
self : EnablePrivateAuraSound ( 421461 , " runout " , 2 ) --Flash Fire
self : EnablePrivateAuraSound ( 428901 , " runout " , 2 ) --Ashen Devastation
if self : IsMythic ( ) then
difficultyName = " mythic "
timerFieryForceofNatureCD : Start ( 6.5 - delay , 1 )
timerIgnitingGrowthCD : Start ( 14.2 - delay , 1 )
timerFuriousChargeCD : Start ( 21.9 - delay , 1 )
timerBlazingThornsCD : Start ( 30.7 - delay , 1 )
timerScorchingRootsCD : Start ( 37.3 - delay , 1 )
else --Only normal vetted
difficultyName = " other "
timerFieryForceofNatureCD : Start ( 6.1 - delay , 1 )
timerFuriousChargeCD : Start ( 21.9 - delay , 1 )
timerBlazingThornsCD : Start ( 30.7 - delay , 1 )
timerScorchingRootsCD : Start ( 37.3 - delay , 1 )
end
timerRagingInfernoCD : Start ( 90.3 - delay , 1 )
end
function mod : OnTimerRecovery ( )
if self : IsMythic ( ) then
difficultyName = " mythic "
else
difficultyName = " other "
end
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 425889 then
self.vb . ignitingCount = self.vb . ignitingCount + 1
warnIgnitingGrowth : Show ( self.vb . ignitingCount )
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , spellId , self.vb . ignitingCount + 1 )
if timer then
timerIgnitingGrowthCD : Start ( timer , self.vb . ignitingCount + 1 )
end
--Charge timer correction
if timerFuriousChargeCD : GetRemaining ( self.vb . furiousChargeCount + 1 ) < 7.7 then
local elapsed , total = timerFuriousChargeCD : GetTime ( self.vb . furiousChargeCount + 1 )
local extend = 7.7 - ( total - elapsed )
DBM : Debug ( " timerFuriousChargeCD extended by: " .. extend , 2 )
timerFuriousChargeCD : Update ( elapsed , total + extend , self.vb . furiousChargeCount + 1 )
end
elseif spellId == 426524 then
timerFieryFlourishCD : Start ( self : IsMythic ( ) and 4.9 or 9.7 , args.sourceGUID )
if not castsPerGUID [ args.sourceGUID ] then --Shouldn't happen, but just in case
castsPerGUID [ args.sourceGUID ] = 0
if self.Options . SetIconOnForces then
self : ScanForMobs ( args.sourceGUID , 2 , self.vb . treeIcon , 1 , nil , 12 , " SetIconOnForces " )
end
self.vb . treeIcon = self.vb . treeIcon - 1
end
castsPerGUID [ args.sourceGUID ] = castsPerGUID [ args.sourceGUID ] + 1
local count = castsPerGUID [ args.sourceGUID ]
if self : CheckInterruptFilter ( args.sourceGUID , false , false ) then --Count interrupt, so cooldown is not checked
specWarnFieryFlourish : Show ( args.sourceName , count )
if count < 6 then
specWarnFieryFlourish : Play ( " kick " .. count .. " r " )
else
specWarnFieryFlourish : Play ( " kickcast " )
end
end
elseif spellId == 422614 then
self.vb . scorchingRootCount = self.vb . scorchingRootCount + 1
warnScorchingRoots : Show ( self.vb . scorchingRootCount )
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , spellId , self.vb . scorchingRootCount + 1 )
if timer then
timerScorchingRootsCD : Start ( timer , self.vb . scorchingRootCount + 1 )
end
elseif spellId == 418637 then
self.vb . furiousChargeCount = self.vb . furiousChargeCount + 1
if self : IsTanking ( " player " , " boss1 " , nil , true ) then
specWarnFuriousCharge : Show ( )
specWarnFuriousCharge : Play ( " justrun " )
yellFuriousCharge : Yell ( )
else
--Delayed by half cast to ensure taunt debuff lasts til charge ends
local bossTarget = UnitName ( " boss1target " ) or DBM_COMMON_L.UNKNOWN
specWarnFuriousChargePreTaunt : Schedule ( 1.5 , bossTarget )
specWarnFuriousChargePreTaunt : ScheduleVoice ( 1.5 , " tauntboss " )
end
--local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.furiousChargeCount+1) or 22
--if timer then
-- timerFuriousChargeCD:Start(timer, self.vb.furiousChargeCount+1)
--end
timerFuriousChargeCD : Start ( 22.0 , self.vb . furiousChargeCount + 1 )
elseif spellId == 426206 then
self.vb . thornsCount = self.vb . thornsCount + 1
specWarnBlazingThornsAvoid : Show ( self.vb . thornsCount )
specWarnBlazingThornsAvoid : Play ( " watchstep " )
if not DBM : UnitDebuff ( " player " , 429032 ) and not self : IsEasy ( ) then
specWarnBlazingThornsSoak : Schedule ( 4 , self.vb . thornsCount )
specWarnBlazingThornsSoak : ScheduleVoice ( 4 , " helpsoak " )
end
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , spellId , self.vb . thornsCount + 1 )
if timer then
timerBlazingThornsCD : Start ( timer , self.vb . thornsCount + 1 )
end
if self : IsHard ( ) then
timerBlazingThornsSoak : Start ( 5 , self.vb . thornsCount )
end
elseif spellId == 417634 then
self.vb . infernoCount = self.vb . infernoCount + 1
specWarnRagingInferno : Show ( DBM_COMMON_L.SHIELD )
specWarnRagingInferno : Play ( " findshield " )
timerRagingInfernoCD : Start ( 101 , self.vb . infernoCount + 1 )
--Charge timer correction
if timerFuriousChargeCD : GetRemaining ( self.vb . furiousChargeCount + 1 ) < 13 then
local elapsed , total = timerFuriousChargeCD : GetTime ( self.vb . furiousChargeCount + 1 )
local extend = 13 - ( total - elapsed )
DBM : Debug ( " timerFuriousChargeCD extended by: " .. extend , 2 )
timerFuriousChargeCD : Update ( elapsed , total + extend , self.vb . furiousChargeCount + 1 )
end
elseif spellId == 427252 then
self.vb . scorchingRootCount = self.vb . scorchingRootCount + 1
specWarnFallingEmbers : Show ( self.vb . scorchingRootCount )
specWarnFallingEmbers : Play ( " helpsoak " )
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , spellId , self.vb . scorchingRootCount + 1 )
if timer then
timerFallingEmbersCD : Start ( timer , self.vb . scorchingRootCount + 1 )
end
elseif spellId == 427343 then
self.vb . infernoCount = self.vb . infernoCount + 1
specWarnFireWhirl : Show ( self.vb . infernoCount )
specWarnFireWhirl : Play ( " watchstep " )
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , spellId , self.vb . infernoCount + 1 )
if timer then
timerFireWhirlCD : Start ( timer , self.vb . infernoCount + 1 )
end
elseif spellId == 429973 then
self.vb . furiousChargeCount = self.vb . furiousChargeCount + 1
if self : IsTanking ( " player " , " boss1 " , nil , true ) then
specWarnSmolderingBackdraft : Show ( )
specWarnSmolderingBackdraft : Play ( " defensive " )
end
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , spellId , self.vb . furiousChargeCount + 1 )
if timer then
timerSmolderingBackdraftCD : Start ( timer , self.vb . furiousChargeCount + 1 )
end
elseif spellId == 421325 then
self.vb . forcesCount = self.vb . forcesCount + 1
warnAshenCall : Show ( self.vb . forcesCount )
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , spellId , self.vb . forcesCount + 1 )
if timer then
timerAshenCallCD : Start ( timer , self.vb . forcesCount + 1 )
end
end
end
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if spellId == 417653 then
self.vb . forcesCount = self.vb . forcesCount + 1
warnForces : Show ( self.vb . forcesCount )
self.vb . treeIcon = 8
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , spellId , self.vb . forcesCount + 1 )
if timer then
timerFieryForceofNatureCD : Start ( timer , self.vb . forcesCount + 1 )
end
elseif spellId == 419485 then
--event fires for every player moving in and out of it, we just want to announce barrier is up per root, once
if not castsPerGUID [ args.sourceGUID ] then
castsPerGUID [ args.sourceGUID ] = 0
warnNaturesBulwark : Show ( )
end
elseif spellId == 427299 and self : AntiSpam ( 5 , 1 ) then
self.vb . thornsCount = self.vb . thornsCount + 1
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , spellId , self.vb . thornsCount + 1 )
if timer then
timerFlashFireCD : Start ( timer , self.vb . thornsCount + 1 )
end
-- elseif spellId == 428901 and self:AntiSpam(5, 2) then
-- self.vb.ignitingCount = self.vb.ignitingCount + 1
-- local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.ignitingCount+1)
-- if timer then
-- timerAshenDevestationCD:Start(timer, self.vb.ignitingCount+1)
-- end
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 426387 and self : AntiSpam ( 3.5 , args.destName ) then
if args : IsPlayer ( ) then
specWarnScorchingBramblethorn : Show ( )
specWarnScorchingBramblethorn : Play ( " targetyou " )
else
warnScorchingBramblethorn : Show ( args.destName )
end
-- elseif spellId == 425888 then
-- if args:IsPlayer() then
-- specWarnIgnitingGrowth:Show()
-- specWarnIgnitingGrowth:Play("runout")
-- yellIgnitingGrowth:Yell()
-- end
-- elseif spellId == 425468 then
-- if args:IsPlayer() then
-- specWarnDreamBlossom:Show()
-- specWarnDreamBlossom:Play("targetyou")
-- yellDreamBlossom:Yell()
-- else
-- warnDreamBlossom:Show(args.destName)
-- end
-- elseif spellId == 420544 then
-- if args:IsPlayer() then
-- specWarnScorchingPursuit:Show()
-- specWarnScorchingPursuit:Play("justrun")
-- yellScorchingPursuit:Yell()
-- end
elseif spellId == 423719 and not args : IsPlayer ( ) then
local uId = DBM : GetRaidUnitId ( args.destName )
if self : IsTanking ( uId ) then --May be unnessesary, but precaution for a drycode, remove later
--Redundant tanking check done so it doesn't warn to taunt again if you already did in pre cast.
if not self : IsTanking ( " player " , " boss1 " , nil , true ) then
specWarnNaturesFury : Show ( args.destName )
specWarnNaturesFury : Play ( " tauntboss " )
end
end
elseif spellId == 421594 then
if args : IsPlayer ( ) then
self : Unschedule ( smolderingYellRepeater )
self : Schedule ( 2 , smolderingYellRepeater , self )
else
local uId = DBM : GetRaidUnitId ( args.destName )
if self : IsTanking ( uId ) then
specWarnSmolderingSuffocation : Show ( args.destName )
specWarnSmolderingSuffocation : Play ( " tauntboss " )
end
end
elseif spellId == 426249 then
if args : IsPlayer ( ) then
-- warnBlazingCoalescence:Cancel()
-- warnBlazingCoalescence:Schedule(1, args.amount or 1)
warnBlazingCoalescence : Show ( args.amount or 1 )
end
elseif spellId == 429032 then
if args : IsPlayer ( ) then
warnEverlastingBlaze : Cancel ( )
warnEverlastingBlaze : Schedule ( 1 , args.amount or 1 )
end
elseif spellId == 418520 then
if args : IsPlayer ( ) then
local amount = args.amount or 1
if amount % 2 == 1 then -- 1, 3, 5...
warnBlisteringSplinters : Show ( amount )
end
end
-- elseif spellId == 421407 then
-- warnSearingAsh:Show(args.amount or 1)
elseif spellId == 426256 then
warnBlazingCoalescenceBoss : Show ( args.destName , args.amount or 1 )
elseif spellId == 427299 then
warnFlashFire : CombinedShow ( 0.5 , args.destName )
if args : IsPlayer ( ) then
specWarnFlashFire : Show ( )
specWarnFlashFire : Play ( " runout " )
yellFlashFire : Yell ( )
yellFlashFireFades : Countdown ( spellId )
end
-- elseif spellId == 428901 then
-- warnAshenDevastation:CombinedShow(0.5, args.destName)
-- if args:IsPlayer() then
-- specWarnAshenDevestation:Show()
-- specWarnAshenDevestation:Play("runout")
-- yellAshenDevestation:Yell()
-- yellAshenDevestationFades:Countdown(spellId)
-- end
elseif spellId == 427306 then
warnEncasedInAsh : CombinedShow ( 0.5 , args.destName )
if args : IsPlayer ( ) then
specWarnEncasedInAsh : Show ( )
specWarnEncasedInAsh : Play ( " targetyou " )
yellEncasedInAsh : Yell ( )
end
elseif spellId == 421316 then --Consuming Flame
self : SetStage ( 1.5 )
timerFieryForceofNatureCD : Stop ( )
timerScorchingRootsCD : Stop ( )
timerFuriousChargeCD : Stop ( )
timerBlazingThornsCD : Stop ( )
timerRagingInfernoCD : Stop ( )
timerIgnitingGrowthCD : Stop ( )
warnConsumingFlame : Show ( args.destName )
timerConsumingFlame : Start ( )
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod : SPELL_AURA_REMOVED ( args )
local spellId = args.spellId
if spellId == 421316 then --Consuming Flame
self : SetStage ( 2 )
self.vb . ignitingCount = 0 --Reused in stage 2 for Ashen Devestation
self.vb . scorchingRootCount = 0 --Reused in stage 2 for Fallen Embers
self.vb . forcesCount = 0 --Reused in Stage 2 for Ashen Call
self.vb . furiousChargeCount = 0 --Reused in Stage 2 for Smoldering Backdraft
self.vb . thornsCount = 0 --Reused in Stage 2 for Flash Fire
self.vb . infernoCount = 0 --Reused in Stage 2 for Fire Whirl
timerConsumingFlame : Stop ( )
warnPhase : Show ( DBM_CORE_L.AUTO_ANNOUNCE_TEXTS . stage : format ( 2 ) )
warnPhase : Play ( " ptwo " )
if self : IsMythic ( ) then
timerFallingEmbersCD : Start ( 7.4 , 1 )
timerSmolderingBackdraftCD : Start ( 14.0 , 1 )
timerAshenCallCD : Start ( 20.7 , 1 )
timerFlashFireCD : Start ( 29 , 1 )
timerAshenDevestationCD : Start ( 45.4 , 1 )
timerFireWhirlCD : Start ( 59.1 , 1 )
elseif self : IsHeroic ( ) then
timerFallingEmbersCD : Start ( 7.4 , 1 )
timerSmolderingBackdraftCD : Start ( 14 , 1 )
timerAshenCallCD : Start ( 20.7 , 1 )
timerFlashFireCD : Start ( 29.1 , 1 )
timerFireWhirlCD : Start ( 54 , 1 )
else --Normal needs rechecking. Ashen and smoldering likely changed to match mythic and heroic
timerFallingEmbersCD : Start ( 7.3 , 1 )
timerSmolderingBackdraftCD : Start ( 14 , 1 )
timerAshenCallCD : Start ( 20 , 1 )
timerFlashFireCD : Start ( 29 , 1 )
timerFireWhirlCD : Start ( 54 , 1 )
end
elseif spellId == 421594 then
if args : IsPlayer ( ) then
self : Unschedule ( smolderingYellRepeater )
end
end
end
--mod.SPELL_AURA_REMOVED_DOSE = mod.SPELL_AURA_REMOVED
function mod : SPELL_PERIODIC_DAMAGE ( _ , _ , _ , _ , destGUID , _ , _ , _ , spellId , spellName )
if spellId == 417632 and destGUID == UnitGUID ( " player " ) and self : AntiSpam ( 3 , 3 ) then
specWarnGTFO : Show ( spellName )
specWarnGTFO : Play ( " watchfeet " )
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
function mod : UNIT_DIED ( args )
local cid = self : GetCIDFromGUID ( args.destGUID )
if cid == 208459 then --fiery-treant
timerFieryFlourishCD : Stop ( args.destGUID )
end
end
function mod : INSTANCE_ENCOUNTER_ENGAGE_UNIT ( )
for i = 1 , 5 do
local unitID = " boss " .. i
local GUID = UnitGUID ( unitID )
if GUID and not castsPerGUID [ GUID ] then
castsPerGUID [ GUID ] = 0
local cid = self : GetCIDFromGUID ( GUID )
if cid == 208459 then --Fiery Treant
timerFieryFlourishCD : Start ( 4 , GUID )
if self.Options . SetIconOnForces then
self : ScanForMobs ( GUID , 2 , self.vb . treeIcon , 1 , nil , 12 , " SetIconOnForces " )
end
self.vb . treeIcon = self.vb . treeIcon - 1
end
end
end
end
--"<36.79 01:24:52> [UNIT_SPELLCAST_SUCCEEDED] Scorching Roots(0.0%-0.0%){Target:Luxvertwo} -Charred Brambles- [[nameplate7:Cast-3-5770-2549-63-418655-00198E2244:418655]]",
--"<51.80 01:25:07> [UNIT_SPELLCAST_SUCCEEDED] Charred Brambles(100.0%-0.0%){Target:??} -Renewed Bramble Barrier- [[nameplate7:Cast-3-5770-2549-63-418653-00280E2253:418653]]",
--"<51.81 01:25:08> [UNIT_SPELLCAST_SUCCEEDED] Renewed Bramble Barrier(100.0%-0.0%){Target:??} -Nature's Bulwark- [[nameplate7:Cast-3-5770-2549-63-419485-002A8E2253:419485]]",
function mod : UNIT_SPELLCAST_SUCCEEDED ( uId , _ , spellId )
if spellId == 417667 and self : AntiSpam ( 3 , 4 ) then
warnCharredTreant : Show ( )
elseif spellId == 417668 and self : AntiSpam ( 3 , 5 ) then
warnRenewedTreant : Show ( )
elseif spellId == 418655 and self : AntiSpam ( 3 , 6 ) then
specWarnCharredBrambles : Show ( )
specWarnCharredBrambles : Play ( " healfull " )
elseif spellId == 428896 and self : AntiSpam ( 3 , 7 ) then
self.vb . ignitingCount = self.vb . ignitingCount + 1
warnAshenDevastation : Show ( self.vb . ignitingCount )
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , spellId , self.vb . ignitingCount + 1 )
if timer then
timerAshenDevestationCD : Start ( timer , self.vb . ignitingCount + 1 )
end
end
end