local mod = DBM : NewMod ( 2467 , " DBM-Sepulcher " , nil , 1195 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20220820203945 " )
mod : SetCreatureID ( 182777 )
mod : SetEncounterID ( 2549 )
mod : SetUsedIcons ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 )
mod : SetHotfixNoticeRev ( 20220405000000 )
mod : SetMinSyncRevision ( 20220308000000 )
--mod.respawnTime = 29
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 362275 362390 366379 362184 363533 366606 364114 364386 " ,
" SPELL_CAST_SUCCESS 363108 363110 " ,
" SPELL_AURA_APPLIED 361548 362273 362206 362088 362081 362207 363773 362271 368082 368080 " ,
" SPELL_AURA_APPLIED_DOSE 362273 362088 362081 368080 " ,
" SPELL_AURA_REMOVED 361548 362273 362206 362088 362081 362207 363773 368082 368080 " ,
" SPELL_PERIODIC_DAMAGE 362798 " ,
" SPELL_PERIODIC_MISSED 362798 " ,
" UNIT_DIED "
)
--TODO, number of dark eclipse targets. if only 1, kill the icon stuff
--TODO, https://ptr.wowhead.com/spell=362172/corrupted-wound is gonna need more evalulation to determine action. prob not taunt at stacks but at dot size?
--TODO, probably upgrade Terminator warning and fix it's triggers
--TODO, how to actuall warn unstable matter if it has fixed timed spawns etc or if unstable matter field should have 20 second "active" timer
--TODO, maybe personal https://ptr.wowhead.com/spell=362384/eternal-radiation stack warning?
--TODO, how to warn https://ptr.wowhead.com/spell=368080/dark-quasar? does it apply multiple stacks on boss then just warn as they deplete?
--TODO, reset/start timers on https://ptr.wowhead.com/spell=363773/the-singularity being applied or removed on boss accurate?
--[[
( ability.id = 362806 or ability.id = 362275 or ability.id = 362390 or ability.id = 366379 or ability.id = 363533 or ability.id = 364114 or ability.id = 364386 ) and type = " begincast "
or ( ability.id = 363108 or ability.id = 363110 or ability.id = 362806 ) and type = " cast "
or ability.id = 363773
or ( ability.id = 361548 or ability.id = 362806 ) and type = " applydebuff "
or ability.id = 362184 and type = " begincast "
--]]
--General
local berserkTimer = mod : NewBerserkTimer ( 600 )
local specWarnGTFO = mod : NewSpecialWarningGTFO ( 362798 , nil , nil , nil , 1 , 8 )
--Rygelon
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 24245 ) )
local warnDarkEclipse = mod : NewTargetNoFilterAnnounce ( 361548 , 3 )
local warnCelestialCollapse = mod : NewCountAnnounce ( 362275 , 3 )
local warnQuasarRadiation = mod : NewStackAnnounce ( 362273 , 4 )
local warnEventHorizon = mod : NewTargetAnnounce ( 362206 , 3 )
local warnManifestCosmos = mod : NewCountAnnounce ( 362390 , 2 )
local warnCosmicCore = mod : NewAddsLeftAnnounce ( 362770 , 2 )
local warnCosmicIrregularity = mod : NewCountAnnounce ( 362088 , 2 )
local warnCelestialTerminator = mod : NewSpellAnnounce ( 363108 , 3 )
local warnRadiantPlasma = mod : NewSpellAnnounce ( 366606 , 4 ) --No one is tanking him fail check
local warnDarkQuasarBoss = mod : NewStackAnnounce ( 368080 , 2 )
local warnDarkQuasarBossFaded = mod : NewEndAnnounce ( 368080 , 1 )
local specWarnDarkEclipse = mod : NewSpecialWarningYou ( 361548 , nil , nil , nil , 1 , 2 )
local yellDarkEclipse = mod : NewShortPosYell ( 361548 )
local yellDarkEclipseFades = mod : NewIconFadesYell ( 361548 )
local specWarnCelestialCollapse = mod : NewSpecialWarningCount ( 362275 , false , nil , nil , 1 , 2 )
local specWarnEventHorizon = mod : NewSpecialWarningYou ( 362206 , nil , nil , nil , 1 , 2 )
local yellEventHorizonFades = mod : NewShortFadesYell ( 362206 )
local specWarnCosmicIrregularity = mod : NewSpecialWarningStack ( 362088 , nil , 4 , nil , nil , 1 , 6 , 4 )
local specWarnStellarShroud = mod : NewSpecialWarningCount ( 366379 , nil , nil , nil , 2 , 2 , 4 )
local specWarnCorruptedStrikes = mod : NewSpecialWarningDefensive ( 362184 , nil , nil , nil , 1 , 2 )
local specWarnMassiveBang = mod : NewSpecialWarningCount ( 363533 , nil , nil , nil , 2 , 2 ) --First warn, begin cast
local specWarnMassiveBangEscape = mod : NewSpecialWarningMoveTo ( 363533 , nil , nil , nil , 3 , 2 ) --Second warn if not in singularity by 4 sec
local specWarnDarkQuasarPersonal = mod : NewSpecialWarningMoveAway ( 368082 , nil , nil , nil , 1 , 2 )
local yellarkQuasarPersonal = mod : NewShortFadesYell ( 368082 )
local timerDarkEclipseCD = mod : NewCDCountTimer ( 11 , 361548 , nil , nil , nil , 3 )
local timerCelestialCollapseCD = mod : NewCDCountTimer ( 20.6 , 362275 , nil , nil , nil , 5 )
local timerQuasarRadiation = mod : NewBuffActiveTimer ( 21 , 361548 , nil , nil , nil , 2 , nil , DBM_COMMON_L.DEADLY_ICON )
local timerManifestCosmosCD = mod : NewCDCountTimer ( 23.1 , 362390 , nil , nil , nil , 1 , nil , DBM_COMMON_L.HEROIC_ICON )
local timerStellarShroudCD = mod : NewCDCountTimer ( 28.8 , 366379 , nil , nil , nil , 2 , nil , DBM_COMMON_L.HEALER_ICON .. DBM_COMMON_L.MYTHIC_ICON )
local timerCorruptedStrikesCD = mod : NewCDTimer ( 6 , 362184 , nil , " Tank " , 2 , 5 , nil , DBM_COMMON_L.TANK_ICON )
--local timerCelestialTerminatorCD = mod:NewCDCountTimer(28.8, 363108, nil, nil, nil, 3)
local timerMassiveBangCD = mod : NewCDCountTimer ( 28.8 , 363533 , nil , nil , nil , 2 , nil , DBM_COMMON_L.DEADLY_ICON )
local timerMassiveBang = mod : NewCastTimer ( 10 , 363533 , nil , nil , nil , 5 , nil , DBM_COMMON_L.DEADLY_ICON )
mod : AddRangeFrameOption ( 5 , 362206 )
mod : AddInfoFrameOption ( 362081 , false ) --Tracks just ejection on heroic but on mythic it tracks Irregularity
mod : AddSetIconOption ( " SetIconOnDarkEclipse " , 361548 , true , false , { 1 , 2 , 3 } , true )
mod : AddSetIconOption ( " SetIconOnQuasar " , 362275 , false , true , { 3 , 4 , 5 , 6 , 7 , 8 } , true )
--The Singularity
local singularityName = DBM : GetSpellInfo ( 362207 )
mod : AddTimerLine ( singularityName )
local warnSingularity = mod : NewYouAnnounce ( 362207 , 1 )
local warnGravitationalCollapse = mod : NewCastAnnounce ( 364386 , 4 )
local specWarnShatterSphere = mod : NewSpecialWarningSpell ( 364114 , nil , nil , nil , 2 , 2 )
local specWarnGravitationalCollapse = mod : NewSpecialWarningSoak ( 364386 , " Tank " , nil , nil , 3 , 2 )
local timerShatterSphereCD = mod : NewCDTimer ( 26.6 , 364114 , nil , nil , nil , 6 )
local cosmicStacks = { }
local playerInSingularity = false
--Other Variables
mod.vb . eclipseIcon = 1
mod.vb . quasarIcon = 8
mod.vb . coreCount = 0
--Timer Variables
mod.vb . eclipseCount = 0
mod.vb . collapseCount = 0
mod.vb . cosmosCount = 0
mod.vb . shroudCount = 0
mod.vb . bangCount = 0
local function bangDelay ( self )
if not playerInSingularity then --TODO, maybe also check for Event Horizon if it doesn't also apply "The Singularity"
specWarnMassiveBangEscape : Show ( singularityName )
specWarnMassiveBangEscape : Play ( " findshelter " )
end
end
function mod : OnCombatStart ( delay )
table.wipe ( cosmicStacks )
playerInSingularity = false
self.vb . eclipseCount = 0
self.vb . eclipseIcon = 1
self.vb . quasarIcon = 8
self.vb . collapseCount = 0
self.vb . cosmosCount = 0
self.vb . coreCount = 0
self.vb . shroudCount = 0
self.vb . bangCount = 0
if self : IsMythic ( ) then
timerDarkEclipseCD : Start ( 6.8 - delay , 1 )
timerStellarShroudCD : Start ( 8.1 - delay , 1 )
timerCelestialCollapseCD : Start ( 9.3 - delay , 1 )
timerCorruptedStrikesCD : Start ( 10.6 - delay )
timerManifestCosmosCD : Start ( 20 - delay , 1 )
-- timerCelestialTerminatorCD:Start(1, 1)--not in combat log, do later
timerMassiveBangCD : Start ( 65 - delay , 1 )
berserkTimer : Start ( 390 - delay )
if self.Options . InfoFrame then
--On mythic it's slightly more elaborate and involves coordinating a bunch of people around the new mechanic
DBM.InfoFrame : SetHeader ( DBM : GetSpellInfo ( 362088 ) )
DBM.InfoFrame : Show ( 20 , " table " , cosmicStacks , 1 )
end
else --Rest are all same, and seem to have been tweaked in recent weeks too
timerCorruptedStrikesCD : Start ( 4.5 - delay )
timerDarkEclipseCD : Start ( 7.3 - delay , 1 )
timerCelestialCollapseCD : Start ( 9.5 - delay , 1 )
-- timerCelestialTerminatorCD:Start(1, 1)--not in combat log, do later
timerMassiveBangCD : Start ( 61.7 - delay , 1 )
if self : IsHeroic ( ) then
timerManifestCosmosCD : Start ( 16.7 - delay , 1 )
if self.Options . InfoFrame then
--On heroic it's fairly straight forward swaps tracking only some people
DBM.InfoFrame : SetHeader ( DBM : GetSpellInfo ( 362081 ) )
DBM.InfoFrame : Show ( 5 , " table " , cosmicStacks , 1 )
end
end
end
end
function mod : OnCombatEnd ( )
if self.Options . RangeFrame then
DBM.RangeCheck : Hide ( )
end
if self.Options . InfoFrame then
DBM.InfoFrame : Hide ( )
end
end
function mod : OnTimerRecovery ( )
if DBM : UnitAura ( " player " , 362207 ) then
playerInSingularity = true
end
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 362275 then
self.vb . collapseCount = self.vb . collapseCount + 1
self.vb . quasarIcon = 8
if self.Options . SpecWarn362275count then
specWarnCelestialCollapse : Show ( self.vb . collapseCount )
specWarnCelestialCollapse : Play ( " specialsoon " ) --TEMP sound, I need to see what these look like to articulate a better sound replacement
else
warnCelestialCollapse : Show ( self.vb . collapseCount )
end
if self.vb . collapseCount == 1 then --Only cast twice per cycle
timerCelestialCollapseCD : Start ( self : IsMythic ( ) and 23.1 or 20.6 , self.vb . collapseCount + 1 ) --20.6
end
elseif spellId == 362390 then
self.vb . cosmosCount = self.vb . cosmosCount + 1
self.vb . coreCount = self.vb . coreCount + ( self : IsMythic ( ) and 3 or 1 )
warnManifestCosmos : Show ( self.vb . cosmosCount )
if ( self : IsMythic ( ) and self.vb . cosmosCount < 3 ) or self.vb . cosmosCount == 1 then
timerManifestCosmosCD : Start ( self : IsMythic ( ) and 11.6 or 23.1 , self.vb . cosmosCount + 1 )
end
elseif spellId == 366379 then
self.vb . shroudCount = self.vb . shroudCount + 1
specWarnStellarShroud : Show ( self.vb . shroudCount )
specWarnStellarShroud : Play ( " aesoon " )
if self.vb . shroudCount < 4 then
timerStellarShroudCD : Start ( self.vb . shroudCount == 2 and 14.9 or 16.2 , self.vb . shroudCount + 1 )
end
elseif spellId == 362184 then
if self : IsTanking ( " player " , " boss1 " , nil , true ) then
specWarnCorruptedStrikes : Show ( )
specWarnCorruptedStrikes : Play ( " defensive " )
end
timerCorruptedStrikesCD : Start ( )
elseif spellId == 363533 then
self.vb . bangCount = self.vb . bangCount + 1
specWarnMassiveBang : Show ( self.vb . bangCount )
specWarnMassiveBang : Play ( " specialsoon " )
timerMassiveBang : Start ( )
self : Schedule ( 5.5 , bangDelay , self )
if self : IsFated ( ) then
self : AffixEvent ( 1 , 2 )
end
elseif spellId == 366606 and self : AntiSpam ( 3 , 1 ) then
warnRadiantPlasma : Show ( )
elseif spellId == 364114 then
specWarnShatterSphere : Show ( )
specWarnShatterSphere : Play ( " phasechange " ) --No idea what voice to use
if self : IsFated ( ) then
self : AffixEvent ( 0 ) --Technically not needed, since at this time affix isn't cast more than once, but another affix might be
end
elseif spellId == 364386 then
if self.Options . SpecWarn364386soak and playerInSingularity then
specWarnGravitationalCollapse : Show ( )
specWarnGravitationalCollapse : Play ( " helpsoak " )
else
warnGravitationalCollapse : Show ( )
end
end
end
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if args : IsSpellID ( 363108 , 363110 ) and self : AntiSpam ( 3 , 2 ) then
warnCelestialTerminator : Show ( )
-- timerCelestialTerminatorCD:Start()
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 361548 then
if self : AntiSpam ( 3 , 3 ) then --TEMP, not in combat log yet
self.vb . eclipseCount = self.vb . eclipseCount + 1
self.vb . eclipseIcon = 1
if self.vb . eclipseCount < 5 then
timerDarkEclipseCD : Start ( nil , self.vb . eclipseCount + 1 ) --11
end
end
local icon = self.vb . eclipseIcon
if self.Options . SetIconOnDarkEclipse then
self : SetIcon ( args.destName , icon )
end
if args : IsPlayer ( ) then
specWarnDarkEclipse : Show ( )
specWarnDarkEclipse : Play ( " runout " )
yellDarkEclipse : Yell ( icon , icon )
yellDarkEclipseFades : Countdown ( spellId , nil , icon )
end
warnDarkEclipse : CombinedShow ( 0.75 , args.destName )
self.vb . eclipseIcon = self.vb . eclipseIcon + 1
elseif spellId == 362273 and args : IsPlayer ( ) then
warnQuasarRadiation : Show ( args.destName , args.amount or 1 )
timerQuasarRadiation : Stop ( )
timerQuasarRadiation : Start ( )
elseif spellId == 362206 then
if args : IsPlayer ( ) then
specWarnEventHorizon : Show ( )
specWarnEventHorizon : Play ( " range5 " )
yellEventHorizonFades : Countdown ( spellId )
if self.Options . RangeFrame then
DBM.RangeCheck : Show ( 5 )
end
else
warnEventHorizon : CombinedShow ( 1 , args.destName )
end
elseif spellId == 362088 then
local amount = args.amount or 1
cosmicStacks [ args.destName ] = amount
if self.Options . InfoFrame then
DBM.InfoFrame : UpdateTable ( cosmicStacks )
end
if args : IsPlayer ( ) then
if amount >= 4 then
specWarnCosmicIrregularity : Show ( amount )
specWarnCosmicIrregularity : Play ( " stackhigh " )
else
warnCosmicIrregularity : Show ( amount )
end
end
elseif spellId == 362081 then
local amount = args.amount or 1
if not self : IsMythic ( ) then
cosmicStacks [ args.destName ] = amount
if self.Options . InfoFrame then
DBM.InfoFrame : UpdateTable ( cosmicStacks )
end
end
elseif spellId == 362207 then
if args : IsPlayer ( ) then
playerInSingularity = true
end
elseif spellId == 362271 then
if self.Options . SetIconOnQuasar then
self : ScanForMobs ( args.sourceGUID , 2 , self.vb . quasarIcon , 1 , nil , 12 , " SetIconOnQuasar " )
end
self.vb . quasarIcon = self.vb . quasarIcon - 1
elseif spellId == 368082 and args : IsPlayer ( ) then
specWarnDarkQuasarPersonal : Show ( )
specWarnDarkQuasarPersonal : Play ( " runout " )
yellarkQuasarPersonal : Countdown ( spellId , 2 )
elseif spellId == 368080 then
warnDarkQuasarBoss : Cancel ( )
warnDarkQuasarBoss : Schedule ( 0.3 , args.destName , args.amount or 1 )
elseif spellId == 363773 then --Boss Entering Singularity
timerDarkEclipseCD : Stop ( )
timerCelestialCollapseCD : Stop ( )
timerCorruptedStrikesCD : Stop ( )
-- timerCelestialTerminatorCD:Stop()
timerMassiveBangCD : Stop ( )
timerManifestCosmosCD : Stop ( )
timerStellarShroudCD : Stop ( )
timerCorruptedStrikesCD : Start ( 4.7 )
timerShatterSphereCD : Start ( 26.6 )
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod : SPELL_AURA_REMOVED ( args )
local spellId = args.spellId
if spellId == 361548 then
if self.Options . SetIconOnDarkEclipse then
self : SetIcon ( args.destName , 0 )
end
if args : IsPlayer ( ) then
yellDarkEclipseFades : Cancel ( )
end
elseif spellId == 362273 then
timerQuasarRadiation : Stop ( )
elseif spellId == 362206 then
if args : IsPlayer ( ) then
yellEventHorizonFades : Cancel ( )
if self.Options . RangeFrame then
DBM.RangeCheck : Hide ( )
end
end
elseif spellId == 362088 then
cosmicStacks [ args.destName ] = nil
if self.Options . InfoFrame then
DBM.InfoFrame : UpdateTable ( cosmicStacks )
end
elseif spellId == 362081 and not self : IsMythic ( ) then
cosmicStacks [ args.destName ] = nil
if self.Options . InfoFrame then
DBM.InfoFrame : UpdateTable ( cosmicStacks )
end
elseif spellId == 362207 then
if args : IsPlayer ( ) then
playerInSingularity = false
end
elseif spellId == 368082 and args : IsPlayer ( ) then
yellarkQuasarPersonal : Cancel ( )
elseif spellId == 368080 then
warnDarkQuasarBossFaded : Show ( )
elseif spellId == 363773 then --Boss Leaving Singularity
self.vb . eclipseCount = 0
self.vb . collapseCount = 0
self.vb . cosmosCount = 0
self.vb . shroudCount = 0
self.vb . bangCount = 0
timerCorruptedStrikesCD : Stop ( )
timerShatterSphereCD : Stop ( )
if self : IsMythic ( ) then
timerDarkEclipseCD : Start ( 6.9 , 1 ) --SUCCESS
timerStellarShroudCD : Start ( 8.4 , 1 )
timerCelestialCollapseCD : Start ( 9.6 , 1 )
timerCorruptedStrikesCD : Start ( 10.8 )
-- timerCelestialTerminatorCD:Start(3, 1)
timerManifestCosmosCD : Start ( 19.9 , 1 )
timerMassiveBangCD : Start ( 65 , self.vb . bangCount + 1 )
else
timerCorruptedStrikesCD : Start ( 4.5 )
timerDarkEclipseCD : Start ( 7.1 , 1 ) --SUCCESS
timerCelestialCollapseCD : Start ( 9.5 , 1 )
-- timerCelestialTerminatorCD:Start(3, 1)
timerMassiveBangCD : Start ( 61.5 , self.vb . bangCount + 1 )
if self : IsHeroic ( ) then
timerManifestCosmosCD : Start ( 16.8 , 1 )
end
end
end
end
function mod : UNIT_DIED ( args )
local cid = self : GetCIDFromGUID ( args.destGUID )
if cid == 185884 then --Cosmic Core
self.vb . coreCount = self.vb . coreCount - 1
warnCosmicCore : Show ( self.vb . coreCount )
end
end
function mod : SPELL_PERIODIC_DAMAGE ( _ , _ , _ , _ , destGUID , _ , _ , _ , spellId , spellName )
if spellId == 362798 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