local mod = DBM:NewMod(2580, "DBM-Party-WarWithin", 5, 1270) local L = mod:GetLocalizedStrings() mod:SetRevision("20240707004645") mod:SetCreatureID(211087) mod:SetEncounterID(2837) mod:SetHotfixNoticeRev(20240706000000) mod:SetMinSyncRevision(20240706000000) --mod.respawnTime = 29 mod.sendMainBossGUID = true mod:RegisterCombat("combat") mod:RegisterEventsInCombat( "SPELL_CAST_START 425264 453212 445996 453140 426734", -- "SPELL_CAST_SUCCESS", "SPELL_AURA_APPLIED 453859 426735", "SPELL_AURA_REMOVED 453859" -- "SPELL_PERIODIC_DAMAGE", -- "SPELL_PERIODIC_MISSED" ) --TODO, do something with https://www.wowhead.com/beta/spell=426736/shadow-shroud ? i can't think of anything productive. It's more of unit frames thing --[[ (ability.id = 425264 or ability.id = 453212 or ability.id = 445996 or ability.id = 453140 or ability.id = 426734) and type = "begincast" or ability.id = 453859 and (type = "applybuff" or type = "removebuff") or type = "dungeonencounterstart" or type = "dungeonencounterend" --]] local warnBurnignShadows = mod:NewTargetNoFilterAnnounce(426734, 3, nil, "RemoveMagic|Healer") local specWarnDarknessComes = mod:NewSpecialWarningCount(453859, nil, nil, nil, 3, 2) local specWarnObsidianBlast = mod:NewSpecialWarningDefensive(425264, nil, nil, nil, 1, 2)--Heroic and Lower local specWarnObsidianBeam = mod:NewSpecialWarningDefensive(453212, nil, nil, nil, 1, 2, 4)--Mythic and Higher local specWarnCollapsingDarkness = mod:NewSpecialWarningDodgeCount(445996, nil, nil, nil, 2, 2)--Heroic and Lower local specWarnCollapsingNight = mod:NewSpecialWarningDodgeCount(453140, nil, nil, nil, 2, 2, 4)--Mythic and Higher local specWarnBurningShadows = mod:NewSpecialWarningYou(426734, nil, nil, nil, 1, 2) --local yellSomeAbility = mod:NewYell(372107) --local specWarnGTFO = mod:NewSpecialWarningGTFO(372820, nil, nil, nil, 1, 8) --Like all bosses in this zone, shorted cooldowns are not fully known. Boss has long ICDs and spell queue issues local timerObsidianBlastCD = mod:NewCDCountTimer(17, 425264, nil, nil, nil, 5)--Heroic and Lower local timerObsidianBeamCD = mod:NewCDCountTimer(24.3, 453212, nil, nil, nil, 5)--Mythic and Higher local timerCollapsingDarknessCD = mod:NewCDCountTimer(18, 445996, nil, nil, nil, 3)--Heroic and Lower local timerCollapsingNightCD = mod:NewCDCountTimer(25.9, 453140, nil, nil, nil, 3)--Mythic and Higher local timerBurningShadowsCD = mod:NewCDCountTimer(17, 426734, nil, nil, nil, 3) mod.vb.darknessCount = 0 mod.vb.obsidianCount = 0 mod.vb.collapsingCount = 0 mod.vb.shadowsCount = 0 --Attempt at handling the predictable spell queues with hardcoded table --if this fails, ugglier updateAllTimers will be used as fallback local warnedTimerMissing = false--Single warn for single spell to avoid spam. As long as user finds ONE missing timer, their log is useful local allTimers = { [1] = { [425264] = {6},--Obsidian Blast (Non Mythic) [453212] = {7.1, 33, 27.1},--Obsidian Beam (Mythic) [445996] = {13.1},--Collapsing Darkness (Non Mythic) [453140] = {23.3, 28.9},--Collapsing Night (Mythic) [4267341] = {9.3},--Burning Shadows (Non Mythic) [4267342] = {19.2, 16.9, 25.3},--Burning Shadows (Mythic) }, [2] = { [425264] = {6.8, 17},--Obsidian Blast (Non Mythic) [453212] = {15.9, 24.3, 25.9},--Obsidian Beam (Mythic) [445996] = {13.8, 18},--Collapsing Darkness (Non Mythic) [453140] = {8.7, 28, 25.9},--Collapsing Night (Mythic) [4267341] = {10.1, 25.2},--Burning Shadows (Non Mythic) [4267342] = {12.2, 20.8, 22.7, 21.1},--Burning Shadows (Mythic) }, } --The ability queue priority is so predictable, it may be possible to fully sequence this bosses timers in a table, but I want to see a LOT more tables first --Collapsing Night and Collapsing Darkness triggers 3.4 second ICD --Burning Shadows triggers 3.7-4.1 second ICD --Obsidian Blast triggers 3.4 second ICD --Obsidian Beam triggers 12.1 second ICD in stage 1 and unknown 10.8 second ICD in stage 2 --[[ local function updateAllTimers(self, ICD) DBM:Debug("updateAllTimers running", 3) if timerBurningShadowsCD:GetRemaining(self.vb.shadowsCount+1) < ICD then local elapsed, total = timerBurningShadowsCD:GetTime(self.vb.shadowsCount+1) local extend = ICD - (total-elapsed) DBM:Debug("timerBurningShadowsCD extended by: "..extend, 2) timerBurningShadowsCD:Update(elapsed, total+extend, self.vb.shadowsCount+1) end if self:IsMythic() then if timerObsidianBeamCD:GetRemaining(self.vb.obsidianCount+1) < ICD then local elapsed, total = timerObsidianBeamCD:GetTime(self.vb.obsidianCount+1) local extend = ICD - (total-elapsed) DBM:Debug("timerObsidianBeamCD extended by: "..extend, 2) timerObsidianBeamCD:Update(elapsed, total+extend, self.vb.obsidianCount+1) end if timerCollapsingNightCD:GetRemaining(self.vb.collapsingCount+1) < ICD then local elapsed, total = timerCollapsingNightCD:GetTime(self.vb.collapsingCount+1) local extend = ICD - (total-elapsed) DBM:Debug("timerCollapsingNightCD extended by: "..extend, 2) timerCollapsingNightCD:Update(elapsed, total+extend, self.vb.collapsingCount+1) end else if timerObsidianBlastCD:GetRemaining(self.vb.obsidianCount+1) < ICD then local elapsed, total = timerObsidianBlastCD:GetTime(self.vb.obsidianCount+1) local extend = ICD - (total-elapsed) DBM:Debug("timerObsidianBlastCD extended by: "..extend, 2) timerObsidianBlastCD:Update(elapsed, total+extend, self.vb.obsidianCount+1) end if timerCollapsingDarknessCD:GetRemaining(self.vb.collapsingCount+1) < ICD then local elapsed, total = timerCollapsingDarknessCD:GetTime(self.vb.collapsingCount+1) local extend = ICD - (total-elapsed) DBM:Debug("timerCollapsingDarknessCD extended by: "..extend, 2) timerCollapsingDarknessCD:Update(elapsed, total+extend, self.vb.collapsingCount+1) end end end --]] function mod:OnCombatStart(delay) self:SetStage(1) self.vb.darknessCount = 0 self.vb.obsidianCount = 0 self.vb.collapsingCount = 0 self.vb.shadowsCount = 0 if self:IsMythic() then timerObsidianBeamCD:Start(7.1-delay, 1) timerBurningShadowsCD:Start(19.2-delay, 1) timerCollapsingNightCD:Start(23.3-delay, 1) else timerObsidianBlastCD:Start(6-delay, 1) timerBurningShadowsCD:Start(9.3-delay, 1)--9.3-11.3 timerCollapsingDarknessCD:Start(13.1-delay, 1)--13.1-15.1 end end --function mod:OnCombatEnd() --end function mod:SPELL_CAST_START(args) local spellId = args.spellId if spellId == 425264 then--Non Mythic self.vb.obsidianCount = self.vb.obsidianCount + 1 if self:IsTanking("player", "boss1", nil, true) then specWarnObsidianBlast:Show() specWarnObsidianBlast:Play("defensive") end local timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, 425264, self.vb.obsidianCount+1) if timer then timerObsidianBlastCD:Start(timer, self.vb.obsidianCount+1) else timerObsidianBlastCD:Start(17, self.vb.obsidianCount+1)--Still start a timer with lowest known value if not warnedTimerMissing then warnedTimerMissing = true DBM:AddMsg("Obsidian Blast timer missing for count: "..self.vb.obsidianCount+1 .. ". Please share your log on GitHub or DBM Discord", 1) end end -- updateAllTimers(self, 3.4) elseif spellId == 453212 then--Mythic self.vb.obsidianCount = self.vb.obsidianCount + 1 if self:IsTanking("player", "boss1", nil, true) then specWarnObsidianBeam:Show() specWarnObsidianBeam:Play("defensive") end local timer = self:GetFromTimersTable(allTimers, true, self.vb.phase, 453212, self.vb.obsidianCount+1) if timer then timerObsidianBeamCD:Start(timer, self.vb.obsidianCount+1) else timerObsidianBeamCD:Start(24.3, self.vb.obsidianCount+1)--Still start a timer with lowest known value if not warnedTimerMissing then warnedTimerMissing = true DBM:AddMsg("Obsidian Beam timer missing for count: "..self.vb.obsidianCount+1 .. ". Please share your log on GitHub or DBM Discord", 1) end end -- updateAllTimers(self, self:GetStage(1) and 12.1 or 10.8) elseif spellId == 445996 then--Non Mythic self.vb.collapsingCount = self.vb.collapsingCount + 1 specWarnCollapsingDarkness:Show(self.vb.collapsingCount) specWarnCollapsingDarkness:Play("watchstep") local timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, 445996, self.vb.collapsingCount+1) if timer then timerCollapsingDarknessCD:Start(timer, self.vb.collapsingCount+1) else timerCollapsingDarknessCD:Start(18, self.vb.collapsingCount+1)--Still start a timer with lowest known value if not warnedTimerMissing then warnedTimerMissing = true DBM:AddMsg("Collapsing Darkness timer missing for count: "..self.vb.collapsingCount+1 .. ". Please share your log on GitHub or DBM Discord", 1) end end -- updateAllTimers(self, 3.4) elseif spellId == 453140 then--Mythic self.vb.collapsingCount = self.vb.collapsingCount + 1 specWarnCollapsingNight:Show(self.vb.collapsingCount) specWarnCollapsingNight:Play("watchstep") local timer = self:GetFromTimersTable(allTimers, true, self.vb.phase, 453140, self.vb.collapsingCount+1) if timer then timerCollapsingNightCD:Start(timer, self.vb.collapsingCount+1) else timerCollapsingNightCD():Start(25.9, self.vb.collapsingCount+1)--Still start a timer with lowest known value if not warnedTimerMissing then warnedTimerMissing = true DBM:AddMsg("Collapsing Night timer missing for count: "..self.vb.collapsingCount+1 .. ". Please share your log on GitHub or DBM Discord", 1) end end -- updateAllTimers(self, 3.4) elseif spellId == 426734 then self.vb.shadowsCount = self.vb.shadowsCount + 1 local timer = self:GetFromTimersTable(allTimers, false, self.vb.phase, self:IsMythic() and 4267342 or 4267341, self.vb.shadowsCount+1) if timer then timerBurningShadowsCD:Start(timer, self.vb.shadowsCount+1) else timerBurningShadowsCD:Start(17, self.vb.shadowsCount+1)--Still start a timer with lowest known value if not warnedTimerMissing then warnedTimerMissing = true DBM:AddMsg("Burning Shadows timer missing for count: "..self.vb.shadowsCount+1 .. ". Please share your log on GitHub or DBM Discord", 1) end end -- updateAllTimers(self, 3.7) end end --[[ function mod:SPELL_CAST_SUCCESS(args) local spellId = args.spellId if spellId == 372858 then end end --]] function mod:SPELL_AURA_APPLIED(args) local spellId = args.spellId if spellId == 453859 then self.vb.darknessCount = self.vb.darknessCount + 1 specWarnDarknessComes:Show(self.vb.darknessCount) specWarnDarknessComes:Play("justrun") --Stop Timers timerObsidianBlastCD:Stop() timerCollapsingDarknessCD:Stop() timerBurningShadowsCD:Stop() timerObsidianBeamCD:Stop() timerCollapsingNightCD:Stop() elseif spellId == 426735 then if args:IsPlayer() then specWarnBurningShadows:Show() specWarnBurningShadows:Play("targetyou") else warnBurnignShadows:Show(args.destName) end end end --mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED function mod:SPELL_AURA_REMOVED(args) local spellId = args.spellId if spellId == 453859 then if self.vb.darknessCount == 1 then--First one at 50% self:SetStage(2) --Restart timers if self:IsMythic() then timerCollapsingNightCD:Start(8.8, 1) timerBurningShadowsCD:Start(12.2, 1) timerObsidianBeamCD:Start(15.9, 1) else timerObsidianBlastCD:Start(6.8, 1) timerBurningShadowsCD:Start(10.1, 1) timerCollapsingDarknessCD:Start(13.8, 1) end end end end --[[ function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName) if spellId == 372820 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 --]]