You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
280 lines
12 KiB
280 lines
12 KiB
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
|
|
--]]
|
|
|