local mod = DBM:NewMod(2467, "DBM-Sepulcher", nil, 1195) local L = mod:GetLocalizedStrings() mod:SetRevision("20220207235930") mod:SetCreatureID(182777) mod:SetEncounterID(2549) mod:SetUsedIcons(1, 2, 3) mod:SetHotfixNoticeRev(20220206000000) --mod:SetMinSyncRevision(20220206000000) --mod.respawnTime = 29 mod:RegisterCombat("combat") mod:RegisterEventsInCombat( "SPELL_CAST_START 362806 362275 362390 366379 362184 363533 366606 364114 364386", "SPELL_CAST_SUCCESS 363108 363110", "SPELL_AURA_APPLIED 361548 362273 362206 362088 362081 362207 363773", "SPELL_AURA_APPLIED_DOSE 362273 362088 362081", "SPELL_AURA_REMOVED 361548 362273 362206 362088 362081 362207 363773", "SPELL_PERIODIC_DAMAGE 362798", "SPELL_PERIODIC_MISSED 362798", "UNIT_DIED" -- "UNIT_SPELLCAST_SUCCEEDED boss1" ) --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? --General local specWarnGTFO = mod:NewSpecialWarningGTFO(362798, nil, nil, nil, 1, 8) --local berserkTimer = mod:NewBerserkTimer(600) --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 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 timerDarkEclipseCD = mod:NewAITimer(28.8, 361548, nil, nil, nil, 3) local timerCelestialCollapseCD = mod:NewAITimer(28.8, 362275, nil, nil, nil, 5) local timerQuasarRadiation = mod:NewBuffActiveTimer(21, 361548, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON) local timerManifestCosmosCD = mod:NewAITimer(28.8, 362390, nil, nil, nil, 1, nil, DBM_COMMON_L.HEROIC_ICON) local timerStellarShroudCD = mod:NewAITimer(28.8, 366379, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON .. DBM_COMMON_L.MYTHIC_ICON) local timerCorruptedStrikesCD = mod:NewAITimer(28.8, 362184, nil, "Tank", nil, 5, nil, DBM_COMMON_L.TANK_ICON, nil, 2, 3) local timerCelestialTerminatorCD = mod:NewAITimer(28.8, 363108, nil, nil, nil, 3) local timerMassiveBangCD = mod:NewAITimer(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, true)--Tracks just ejection on heroic but on mythic it tracks Irregularity mod:AddSetIconOption("SetIconOnDarkEclipse", 361548, true, false, {1, 2, 3}) --mod:AddNamePlateOption("NPAuraOnBurdenofDestiny", 353432, 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:NewAITimer(28.8, 364114, nil, nil, nil, 6) local cosmicStacks = {} local playerInSingularity = false mod.vb.debuffIcon = 1 mod.vb.collapseCount = 0 mod.vb.coreCastCount = 0 mod.vb.coreCount = 0 mod.vb.chaddCount = 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.debuffIcon = 1 self.vb.collapseCount = 0 self.vb.coreCastCount = 0 self.vb.coreCount = 0 self.vb.chaddCount = 0 self.vb.bangCount = 0 timerDarkEclipseCD:Start(1) timerCelestialCollapseCD:Start(1) timerCorruptedStrikesCD:Start(1) timerCelestialTerminatorCD:Start(1) timerMassiveBangCD:Start(1) if self:IsHard() then timerManifestCosmosCD:Start(1) if self:IsMythic() then timerStellarShroudCD:Start(1) 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 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 -- if self.Options.NPAuraOnBurdenofDestiny then -- DBM:FireEvent("BossMod_EnableHostileNameplates") -- end end function mod:OnCombatEnd() if self.Options.RangeFrame then DBM.RangeCheck:Hide() end if self.Options.InfoFrame then DBM.InfoFrame:Hide() end -- if self.Options.NPAuraOnBurdenofDestiny then -- DBM.Nameplate:Hide(true, nil, nil, nil, true, true) -- 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 == 362806 then self.vb.debuffIcon = 1 timerDarkEclipseCD:Start() elseif spellId == 362275 then self.vb.collapseCount = self.vb.collapseCount + 1 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 timerCelestialCollapseCD:Start() elseif spellId == 362390 then self.vb.coreCastCount = self.vb.coreCastCount + 1 self.vb.coreCount = self.vb.coreCount + self:IsMythic() and 3 or 1 warnManifestCosmos:Show(self.vb.coreCastCount) timerManifestCosmosCD:Start() elseif spellId == 366379 then self.vb.chaddCount = self.vb.chaddCount + 1 specWarnStellarShroud:Show(self.vb.chaddCount) specWarnStellarShroud:Play("aesoon") timerStellarShroudCD:Start() elseif spellId == 362184 then if self:IsTanking("player", "boss1", nil, true) then specWarnCorruptedStrikes:Show() specWarnCorruptedStrikes:Play("defensive") end elseif spellId == 363533 then self.vb.bangCount = self.vb.bangCount + 1 specWarnMassiveBang:Show(self.vb.bangCount) specWarnMassiveBang:Play("specialsoon") timerMassiveBangCD:Start() timerMassiveBang:Start() self:Schedule(5.5, bangDelay, self) elseif spellId == 366606 and self:AntiSpam(3, 2) then warnRadiantPlasma:Show() elseif spellId == 364114 then specWarnShatterSphere:Show() specWarnShatterSphere:Play("phasechange")--No idea what voice to use 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 (spellId == 363108 or spellId == 363110) and self:AntiSpam(3, 1) then warnCelestialTerminator:Show() timerCelestialTerminatorCD:Start() end end function mod:SPELL_AURA_APPLIED(args) local spellId = args.spellId if spellId == 361548 then local icon = self.vb.debuffIcon 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.5, args.destName) self.vb.debuffIcon = self.vb.debuffIcon + 1 elseif spellId == 362273 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 == 363773 then--Boss Entering Singularity DBM:Debug("Boss Entered Singularity") timerDarkEclipseCD:Stop() timerCelestialCollapseCD:Stop() timerCorruptedStrikesCD:Stop() timerCelestialTerminatorCD:Stop() timerMassiveBangCD:Stop() timerManifestCosmosCD:Stop() timerStellarShroudCD:Stop() timerCorruptedStrikesCD:Start(2) timerShatterSphereCD:Start(2) 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 == 363773 then--Boss Leaving Singularity DBM:Debug("Boss Left Singularity") timerCorruptedStrikesCD:Stop() timerShatterSphereCD:Stop() timerDarkEclipseCD:Start(3) timerCelestialCollapseCD:Start(3) timerCorruptedStrikesCD:Start(3) timerCelestialTerminatorCD:Start(3) timerMassiveBangCD:Start(3) if self:IsHard() then timerManifestCosmosCD:Start(3) if self:IsMythic() then timerStellarShroudCD:Start(3) 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 --[[ function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId) if spellId == 353193 then end end --]]