local mod = DBM : NewMod ( 2500 , " DBM-VaultoftheIncarnates " , nil , 1200 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20221022010150 " )
mod : SetCreatureID ( 190496 )
mod : SetEncounterID ( 2639 )
mod : SetUsedIcons ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 )
--mod:SetHotfixNoticeRev(20220322000000)
--mod:SetMinSyncRevision(20211203000000)
--mod.respawnTime = 29
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 380487 377166 377505 383073 376279 396351 " ,
" SPELL_AURA_APPLIED 386352 381253 376276 391592 " ,
" SPELL_AURA_APPLIED_DOSE 376276 " ,
" SPELL_AURA_REMOVED 386352 381253 391592 "
)
--TODO, auto mark awakened Earth (after spawn)?
--TODO, keep an eye on https://www.wowhead.com/beta/spell=391570/reactive-dust . not sure what to do with it yet, since this tooltip says something diff than journal
--[[
( ability.id = 380487 or ability.id = 377166 or ability.id = 377505 or ability.id = 383073 or ability.id = 376279 or ability.id = 396351 ) and type = " begincast "
--]]
local warnRockBlast = mod : NewTargetNoFilterAnnounce ( 380487 , 3 )
local warnAwakenedEarth = mod : NewTargetNoFilterAnnounce ( 381253 , 3 )
local warnConcussiveSlam = mod : NewStackAnnounce ( 372158 , 2 , nil , " Tank|Healer " )
local specWarnRockBlast = mod : NewSpecialWarningYou ( 380487 , nil , nil , nil , 1 , 2 )
local yellRockBlast = mod : NewShortYell ( 380487 , nil , nil , nil , " YELL " )
local yellRockBlastFades = mod : NewShortFadesYell ( 380487 , nil , nil , nil , " YELL " )
local specWarnBrutalReverberation = mod : NewSpecialWarningDodge ( 386400 , nil , nil , nil , 2 , 2 )
local specWarnAwakenedEarth = mod : NewSpecialWarningYou ( 381253 , nil , nil , nil , 1 , 2 )
local yellAwakenedEarth = mod : NewShortPosYell ( 381253 )
local yellAwakenedEarthFades = mod : NewIconFadesYell ( 381253 )
local specWarnResonatingAnnihilation = mod : NewSpecialWarningCount ( 377166 , nil , 307421 , nil , 2 , 2 )
local specWarnShatteringImpact = mod : NewSpecialWarningDodge ( 383073 , nil , nil , nil , 2 , 2 )
local specWarnConcussiveSlam = mod : NewSpecialWarningDefensive ( 376279 , nil , nil , nil , 1 , 2 )
local specWarnConcussiveSlamTaunt = mod : NewSpecialWarningTaunt ( 376279 , nil , nil , nil , 1 , 2 )
local specWarnFrenziedDevastation = mod : NewSpecialWarningSpell ( 377505 , nil , nil , nil , 3 , 2 )
local specWarnInfusedFallout = mod : NewSpecialWarningYou ( 391592 , nil , nil , nil , 1 , 2 )
local specWarnGTFO = mod : NewSpecialWarningGTFO ( 382458 , nil , nil , nil , 1 , 8 )
local timerInfusedFalloutCD = mod : NewNextCountTimer ( 35 , 396351 , nil , nil , nil , 2 , nil , DBM_COMMON_L.MYTHIC_ICON )
local timerRockBlastCD = mod : NewNextCountTimer ( 35 , 380487 , nil , nil , nil , 3 )
local timerResonatingAnnihilationCD = mod : NewNextCountTimer ( 96.4 , 377166 , 307421 , nil , nil , 3 )
local timerShatteringImpactCD = mod : NewNextCountTimer ( 35 , 383073 , nil , nil , nil , 3 , nil , DBM_COMMON_L.DEADLY_ICON )
local timerConcussiveSlamCD = mod : NewNextCountTimer ( 35 , 376279 , nil , nil , nil , 5 , nil , DBM_COMMON_L.TANK_ICON )
local timerFrenziedDevastationCD = mod : NewNextTimer ( 387.9 , 377505 , nil , nil , nil , 2 ) --Berserk timer basically
--local berserkTimer = mod:NewBerserkTimer(600)
--mod:AddRangeFrameOption("8")
--mod:AddInfoFrameOption(361651, true)--Likely will be used for dust
mod : AddSetIconOption ( " SetIconOnAwakenedEarth " , 381253 , true , false , { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } )
--mod.vb.rockIcon = 1
mod.vb . awakenedIcon = 1
mod.vb . annihilationCount = 0
mod.vb . rockCount = 0
mod.vb . slamCount = 0
mod.vb . impactCount = 0
mod.vb . infusedCount = 0
mod.vb . frenziedStarted = false
local allTimers = {
--Infused Fallout (Mythic)
[ 396351 ] = { 29.2 , 42.3 , 24.4 , 29.2 , 40.1 , 25.5 , 28.3 , 41.5 , 26.8 , 26.8 , 43.0 } ,
--Concussive Slam
[ 376279 ] = { 14.0 , 19.9 , 22.0 , 19.9 , 34.5 , 20.0 , 22.0 , 20.0 , 34.4 , 20.0 , 22.0 , 20.0 , 34.5 , 19.9 , 22.0 , 20.0 } ,
--Rock Blast
[ 380487 ] = { 6.0 , 42.0 , 54.5 , 42.0 , 54.5 , 42.0 , 54.5 , 42.0 } ,
--Shattering Impact
[ 383073 ] = { 27.0 , 42.0 , 54.5 , 42.0 , 54.5 , 42.0 , 54.5 , 42.0 } ,
}
function mod : OnCombatStart ( delay )
self.vb . annihilationCount = 0
self.vb . rockCount = 0
self.vb . slamCount = 0
self.vb . impactCount = 0
self.vb . frenziedStarted = false
timerRockBlastCD : Start ( 6 - delay , 1 )
timerConcussiveSlamCD : Start ( 14 - delay , 1 )
timerShatteringImpactCD : Start ( 27 - delay , 1 )
timerResonatingAnnihilationCD : Start ( 90 - delay , 1 )
timerFrenziedDevastationCD : Start ( 387.9 - delay )
if self : IsMythic ( ) then
self.vb . infusedCount = 0
timerInfusedFalloutCD : Start ( 29.2 - delay , 1 )
end
if not self : IsTrivial ( ) then
self : RegisterShortTermEvents (
" SPELL_PERIODIC_DAMAGE 382458 " ,
" SPELL_PERIODIC_MISSED 382458 "
)
end
end
function mod : OnCombatEnd ( )
self : UnregisterShortTermEvents ( )
-- if self.Options.RangeFrame then
-- DBM.RangeCheck:Hide()
-- end
-- if self.Options.InfoFrame then
-- DBM.InfoFrame:Hide()
-- end
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 380487 then
-- self.vb.rockIcon = 1
self.vb . awakenedIcon = 1
self.vb . rockCount = self.vb . rockCount + 1
local timer = self : GetFromTimersTable ( allTimers , false , false , spellId , self.vb . rockCount + 1 )
if timer then
timerRockBlastCD : Start ( timer , self.vb . rockCount + 1 )
end
elseif spellId == 377166 then
self.vb . annihilationCount = self.vb . annihilationCount + 1
specWarnResonatingAnnihilation : Show ( self.vb . annihilationCount )
specWarnResonatingAnnihilation : Play ( " specialsoon " )
timerResonatingAnnihilationCD : Start ( nil , self.vb . annihilationCount + 1 ) --Doesn't need table, it's static
if self.vb . annihilationCount == 4 then
self : UnregisterShortTermEvents ( )
end
elseif spellId == 377505 and not self.vb . frenziedStarted then
self.vb . frenziedStarted = true
specWarnFrenziedDevastation : Show ( )
specWarnFrenziedDevastation : Play ( " stilldanger " )
elseif spellId == 383073 then
self.vb . impactCount = self.vb . impactCount + 1
specWarnShatteringImpact : Show ( )
specWarnShatteringImpact : Play ( " watchstep " )
local timer = self : GetFromTimersTable ( allTimers , false , false , spellId , self.vb . impactCount + 1 )
if timer then
timerShatteringImpactCD : Start ( timer , self.vb . impactCount + 1 )
end
elseif spellId == 376279 then
self.vb . slamCount = self.vb . slamCount + 1
if self : IsTanking ( " player " , " boss1 " , nil , true ) then
specWarnConcussiveSlam : Show ( )
specWarnConcussiveSlam : Play ( " defensive " )
end
local timer = self : GetFromTimersTable ( allTimers , false , false , spellId , self.vb . slamCount + 1 )
if timer then
timerConcussiveSlamCD : Start ( timer , self.vb . slamCount + 1 )
end
elseif spellId == 396351 then
self.vb . infusedCount = self.vb . infusedCount + 1
local timer = self : GetFromTimersTable ( allTimers , false , false , spellId , self.vb . infusedCount + 1 )
if timer then
timerInfusedFalloutCD : Start ( timer , self.vb . infusedCount + 1 )
end
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 386352 then
if args : IsPlayer ( ) then
specWarnRockBlast : Show ( )
specWarnRockBlast : Play ( " targetyou " ) --"mm"..icon
yellRockBlast : Yell ( )
yellRockBlastFades : Countdown ( 5 )
end
warnRockBlast : CombinedShow ( 0.5 , args.destName )
elseif spellId == 381253 then
local icon = self.vb . awakenedIcon
if self.Options . SetIconOnAwakenedEarth then
self : SetIcon ( args.destName , icon )
end
if args : IsPlayer ( ) then
specWarnAwakenedEarth : Show ( )
specWarnAwakenedEarth : Play ( " targetyou " )
yellAwakenedEarth : Yell ( icon , icon )
yellAwakenedEarthFades : Countdown ( 5 , nil , icon )
end
warnAwakenedEarth : CombinedShow ( 0.5 , args.destName )
self.vb . awakenedIcon = self.vb . awakenedIcon + 1
elseif spellId == 376276 and not args : IsPlayer ( ) 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 , 376279 , self.vb . slamCount + 1 ) or 20 ) - 2.5
if ( not remaining or remaining and remaining < timer ) and not UnitIsDeadOrGhost ( " player " ) and not self : IsHealer ( ) then
specWarnConcussiveSlamTaunt : Show ( args.destName )
specWarnConcussiveSlamTaunt : Play ( " tauntboss " )
else
warnConcussiveSlam : Show ( args.destName , amount )
end
elseif spellId == 391592 then
if args : IsPlayer ( ) then
specWarnInfusedFallout : Show ( )
specWarnInfusedFallout : Play ( " targetyou " )
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod : SPELL_AURA_REMOVED ( args )
local spellId = args.spellId
if spellId == 386352 then
if self : AntiSpam ( 3 , 1 ) then
specWarnBrutalReverberation : Show ( )
specWarnBrutalReverberation : Play ( " watchstep " )
end
if args : IsPlayer ( ) then
yellRockBlastFades : Cancel ( )
end
elseif spellId == 381253 then
if args : IsPlayer ( ) then
yellAwakenedEarthFades : Cancel ( )
end
if self.Options . SetIconOnAwakenedEarth then
self : SetIcon ( args.destName , 0 )
end
end
end
function mod : SPELL_PERIODIC_DAMAGE ( _ , _ , _ , _ , destGUID , _ , _ , _ , spellId , spellName )
if spellId == 382458 and destGUID == UnitGUID ( " player " ) and self : AntiSpam ( 2 , 4 ) then
specWarnGTFO : Show ( spellName )
specWarnGTFO : Play ( " watchfeet " )
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE