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.

380 lines
15 KiB

4 years ago
local mod = DBM:NewMod(2463, "DBM-Sepulcher", nil, 1195)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20220402045705")
4 years ago
mod:SetCreatureID(180906)
mod:SetEncounterID(2529)
mod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7)
mod:SetHotfixNoticeRev(20220314000000)
mod:SetMinSyncRevision(20220314000000)
4 years ago
--mod.respawnTime = 29
mod:RegisterCombat("combat")
4 years ago
mod.disableHealthCombat = true--Boss stays active and even heals up after combat, we don't want these events to trigger new combat
--mod:DisableIEEUCombatDetection()--Not sure if required yet
--mod:DisableFriendlyDetection()--Not sure if required yet
4 years ago
mod:RegisterEventsInCombat(
"SPELL_CAST_START 361676 360977 367079 359236 364979 360115 368957 368529 359235",
4 years ago
"SPELL_CAST_SUCCESS 365294",--361602
"SPELL_AURA_APPLIED 365297 361309 368671 368969",
-- "SPELL_AURA_APPLIED_DOSE",
"SPELL_AURA_REMOVED 368671 368969 360115"
4 years ago
-- "SPELL_PERIODIC_DAMAGE 361002 360114",
-- "SPELL_PERIODIC_MISSED 361002 360114",
4 years ago
-- "UNIT_DIED",
-- "UNIT_SPELLCAST_SUCCEEDED boss1"
4 years ago
)
--TODO, enable GTFO once it's confirmed debuff doesn't actually linger when you leave pool, misleading tooltip
4 years ago
--TODO, infoframe for reclaim absorb shield %?
--TODO, is Shatter (formerly detonation) still a dps switch warning?
4 years ago
--[[
4 years ago
(ability.id = 363340 or ability.id = 363408 or ability.id = 367079 or ability.id = 361676 or ability.id = 360977 or ability.id = 359236 or ability.id = 364979 or ability.id = 360115 or ability.id = 359235) and type = "begincast"
or (ability.id = 365294 or ability.id = 359235 or ability.id = 361602 or ability.id = 359236) and type = "cast"
4 years ago
or ability.id = 365297 and type = "applydebuff"
or (ability.id = 364229 or ability.id = 362056) and type = "begincast"
4 years ago
or ability.id = 368347 and type = "applydebuff"
or ability.id = 360115 and type = "removebuff"
4 years ago
--]]
--Stage One: The Reclaimer
local warnReclamationForm = mod:NewCastAnnounce(359235, 2)
4 years ago
local warnSeismicTremors = mod:NewCountAnnounce(367079, 2)
local warnCrushingPrism = mod:NewTargetCountAnnounce(365297, 3, nil, "RemoveMagic", nil, nil, nil, nil, true)
4 years ago
--Stage Two: The Shimmering Cliffs
local warnRelocationForm = mod:NewCastAnnounce(359236, 2)
4 years ago
--Stage Three:
local warnEternityOverdrive = mod:NewCastAnnounce(368529, 2)
--Mythic
local specWarnVolatileCharges = mod:NewSpecialWarningCount(368957, nil, nil, nil, 2, 6, 4)
local specWarnVolatileChargeYou = mod:NewSpecialWarningCount(368969, nil, nil, nil, 1, 2, 12)
local yellVolatileCharge = mod:NewYell(368969, nil, false, 2)
4 years ago
local yellVolatileChargeFades = mod:NewShortFadesYell(368969)
4 years ago
--Stage One: The Reclaimer
4 years ago
local specWarnReclaim = mod:NewSpecialWarningCount(360115, nil, nil, nil, 1, 2)
local specWarnSeismicTremors = mod:NewSpecialWarningCount(367079, false, nil, nil, 1, 2)--I don't even understand mechanic anymore it's been changed so much, no idea if it should be on or off by default
local specWarnEarthbreakerMissiles = mod:NewSpecialWarningMoveAway(361676, nil, 183426, nil, 2, 2)
4 years ago
local specWarnCrushingPrism = mod:NewSpecialWarningYou(365297, nil, nil, nil, 1, 2)
local specWarnLightshatterBeam = mod:NewSpecialWarningMoveTo(360977, nil, 202046, nil, 1, 2)
local specWarnLightshatterBeamTaunt = mod:NewSpecialWarningTaunt(360977, nil, 202046, nil, 1, 2)
4 years ago
--local specWarnGTFO = mod:NewSpecialWarningGTFO(361002, nil, nil, nil, 1, 8)
4 years ago
--Stage Two: The Shimmering Cliffs
local specWarnShatter = mod:NewSpecialWarningDodge(362056, nil, nil, nil, 2, 2)
4 years ago
--mod:AddTimerLine(BOSS)
4 years ago
--Mythic
--local timerVolatileChargesCD = mod:NewAITimer(36.5, 368957, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)
4 years ago
--Stage One: The Reclaimer
4 years ago
local timerReclaimCD = mod:NewCDCountTimer(60, 360115, nil, nil, nil, 5)
local timerSeismicTremorsCD = mod:NewCDCountTimer(26.7, 367079, nil, nil, nil, 5)--Make me count timer when leaving AI
local timerEarthbreakerMissilesCD = mod:NewCDCountTimer(26.1, 361676, 183426, nil, nil, 3)--shorttext "Missiles"
4 years ago
local timerPlanetcrackerBeamCD = mod:NewCDTimer(33.2, 369210, nil, nil, nil, 3)
local timerCrushingPrismCD = mod:NewCDCountTimer(26.9, 365297, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)
4 years ago
--Stage Two: The Shimmering Cliffs
local timerRelocationForm = mod:NewCastTimer(6, 359236, nil, nil, nil, 6)
4 years ago
local timerShatterCD = mod:NewCDCountTimer(6, 362056, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON)
4 years ago
--local berserkTimer = mod:NewBerserkTimer(600)
--mod:AddRangeFrameOption("8")
4 years ago
mod:AddInfoFrameOption(360115, true)
mod:AddSetIconOption("SetIconOnCrushing2", 365297, true, false, {1, 2, 3, 4, 5, 6, 7})
4 years ago
mod:AddNamePlateOption("NPAuraOnFractal", 368671, true)
mod:GroupSpells(368957, 368969)--Combine the cast (Charges with the debuff Charge)
4 years ago
4 years ago
mod.vb.chargeCount = 0
mod.vb.tremorCount = 0
mod.vb.missilesCount = 0
mod.vb.reclaimCount = 0
mod.vb.seismicIcon = 1
mod.vb.shatterCount = 0
4 years ago
mod.vb.crushingCast = 0
4 years ago
mod.vb.crushIcon = 1
local movementTimers = {
[2] = {
--Shatter
[364979] = {30.1, 22},
--Earthbreaker Missiles
[361676] = {16.1, 26.1},
--Crushing Prism
[365297] = {37.3},
--Mythic Crushing Prism
[3652970] = {11.1, 26, 14},
4 years ago
},
[4] = {
--Shatter
[364979] = {24, 24, 17.9},
--Earthbreaker Missiles
[361676] = {12, 18, 26},
--Crushing Prism
[365297] = {47.3},
--Mythic Crushing Prism
[3652970] = {8.7, 18, 17.9},
4 years ago
},
4 years ago
}
local p5MissileTimers = {17, 24.5, 37.2, 12.6, 25}
local p5MissileMythicTimers = {17, 24.5, 37.2}--First 3 same, 4th and 5th not
4 years ago
function mod:OnCombatStart(delay)
self:SetStage(1)
self.vb.crushingCast = 0
4 years ago
self.vb.chargeCount = 0
self.vb.tremorCount = 0
self.vb.missilesCount = 0
self.vb.reclaimCount = 0
self.vb.seismicIcon = 1
if self:IsMythic() then--Same as post reclaimm
-- timerVolatileChargesCD:Start(1-delay)
timerSeismicTremorsCD:Start(4-delay, 1)
--timerPlanetcrackerBeamCD:Start(11.6-delay)--Needs checking
timerCrushingPrismCD:Start(17-delay, 1)
timerEarthbreakerMissilesCD:Start(11.1-delay, 1)
else--Slowed down first time around
timerSeismicTremorsCD:Start(8-delay, 1)
if self:IsHeroic() then
timerPlanetcrackerBeamCD:Start(11.6-delay)
end
timerCrushingPrismCD:Start(21-delay, 1)
timerEarthbreakerMissilesCD:Start(43-delay, 1)
4 years ago
end
timerReclaimCD:Start(60, 1)--Seems same
4 years ago
if self.Options.NPAuraOnFractal then
DBM:FireEvent("BossMod_EnableHostileNameplates")
4 years ago
end
end
function mod:OnCombatEnd()
-- if self.Options.InfoFrame then
-- DBM.InfoFrame:Hide()
-- end
4 years ago
if self.Options.NPAuraOnFractal then
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
end
4 years ago
end
--[[
function mod:OnTimerRecovery()
end
--]]
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
4 years ago
if spellId == 367079 then
self.vb.tremorCount = self.vb.tremorCount + 1
4 years ago
if self.Options.SpecWarn367079count then
4 years ago
specWarnSeismicTremors:Show(self.vb.tremorCount)--Text alert doesn't sasy what to do, just count
specWarnSeismicTremors:Play("specialsoon")
4 years ago
else
4 years ago
warnSeismicTremors:Show(self.vb.tremorCount)
4 years ago
end
4 years ago
timerSeismicTremorsCD:Start(nil, self.vb.tremorCount+1)
elseif spellId == 361676 then
self.vb.missilesCount = self.vb.missilesCount + 1
specWarnEarthbreakerMissiles:Show(self.vb.missilesCount)
4 years ago
specWarnEarthbreakerMissiles:Play("scatter")
if self.vb.stageTotality then
local timer = self.vb.stageTotality == 5 and (self:IsMythic() and p5MissileMythicTimers[self.vb.missilesCount+1] or p5MissileTimers[self.vb.missilesCount+1]) or self.vb.phase == 1 and 26.1 or self:GetFromTimersTable(movementTimers, false, self.vb.stageTotality, 361676, self.vb.missilesCount+1)
if timer then
timerEarthbreakerMissilesCD:Start(timer, self.vb.missilesCount+1)
end
4 years ago
end
4 years ago
elseif spellId == 360977 then
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then--Change to boss1 check if boss is always boss1, right now unsure
4 years ago
specWarnLightshatterBeam:Show(L.Mote)
4 years ago
specWarnLightshatterBeam:Play("defensive")
end
elseif spellId == 359236 then--Relocation Form
4 years ago
self:SetStage(2)--Stage, as determined by dungeon journal
4 years ago
self.vb.shatterCount = 0
4 years ago
self.vb.crushingCast = 0
4 years ago
self.vb.missilesCount = 0
4 years ago
warnRelocationForm:Show()
timerRelocationForm:Start()
--Stop stationary timers
timerEarthbreakerMissilesCD:Stop()
-- timerVolatileChargesCD:Stop()
4 years ago
timerCrushingPrismCD:Stop()
4 years ago
timerReclaimCD:Stop()
timerSeismicTremorsCD:Stop()
timerPlanetcrackerBeamCD:Stop()--Future proofing, you know, when phase is shorter than 12 seconds
4 years ago
--Start mobile ones
--Halondrus is a phase 1, 2, 1, 2 boss.
--We want to distinguish between first phase 2 and second phase 2 (per dungeon journals termonology)
--So this is first mod in wows history that is actually using a stageTotality check.
if self.vb.stageTotality == 2 then--First movement
timerEarthbreakerMissilesCD:Start(16.1, 1)
4 years ago
timerShatterCD:Start(30.1, 1)
timerCrushingPrismCD:Start(self:IsMythic() and 11.1 or 37.3, 1)
4 years ago
else--Second movement (self.vb.stageTotality == 4)
4 years ago
timerEarthbreakerMissilesCD:Start(12.1, 1)
timerShatterCD:Start(30.1, 1)
timerCrushingPrismCD:Start(47.3, 1)
4 years ago
end
elseif spellId == 359235 then
self:SetStage(1)--Stage, as determined by dungeon journal
self.vb.crushingCast = 0
4 years ago
self.vb.chargeCount = 0
self.vb.tremorCount = 0
self.vb.reclaimCount = 0
self.vb.missilesCount = 0
4 years ago
warnReclamationForm:Show()
--Stop mobile timers
4 years ago
timerEarthbreakerMissilesCD:Stop()--Remove if not needed
timerShatterCD:Stop()
4 years ago
timerCrushingPrismCD:Stop()
-- timerVolatileChargesCD:Stop()
4 years ago
--Start Stationary ones
if self.vb.stageTotality == 3 then--Second stationary (after first movement)
4 years ago
timerSeismicTremorsCD:Start(10.1, 1)
timerEarthbreakerMissilesCD:Start(17.8, 1)
timerCrushingPrismCD:Start(23.1, 1)
if self:IsHard() then
timerPlanetcrackerBeamCD:Start(33.2)
end
timerReclaimCD:Start(68)
-- if self:IsMythic() then
-- timerVolatileChargesCD:Start(3)
-- end
4 years ago
else--Third stationary, after 2nd movement (stageTotality == 5)
4 years ago
if self:IsHard() then
timerPlanetcrackerBeamCD:Start(14.2)
end
timerEarthbreakerMissilesCD:Start(17.1, 1)
-- if self:IsMythic() then
-- timerVolatileChargesCD:Start(5)
-- end
4 years ago
end
4 years ago
elseif spellId == 368529 then
warnEternityOverdrive:Show()
elseif spellId == 364979 then--Casts slightly faster than 362056
specWarnShatter:Show()
specWarnShatter:Play("watchstep")
if self.vb.stageTotality then
local timer = self:GetFromTimersTable(movementTimers, false, self.vb.stageTotality, spellId, self.vb.shatterCount+1)
if timer then
timerShatterCD:Start(timer, self.vb.shatterCount+1)
end
4 years ago
end
elseif spellId == 360115 then
self.vb.reclaimCount = self.vb.reclaimCount + 1
specWarnReclaim:Show(self.vb.reclaimCount)
specWarnReclaim:Play("attackshield")
--Stop other stage timers
timerSeismicTremorsCD:Stop()
timerEarthbreakerMissilesCD:Stop()
timerCrushingPrismCD:Stop()
-- timerVolatileChargesCD:Stop()
4 years ago
elseif spellId == 368957 then
self.vb.chargeCount = self.vb.chargeCount + 1
specWarnVolatileCharges:Show(self.vb.chargeCount)
specWarnVolatileCharges:Play("bombsoon")
-- timerVolatileChargesCD:Start()
4 years ago
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 365294 then
DBM:Debug("Crushing Prism unhidden from combat log. Notify DBM Authors")
4 years ago
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
4 years ago
if spellId == 365297 then
if self:AntiSpam(5, 2) then
self.vb.crushIcon = 1
4 years ago
self.vb.crushingCast = self.vb.crushingCast + 1
if self.vb.stageTotality then
--use tabled timers during movements, regular CD during stanary subject to ICD live updates
local checkedId = self:IsMythic() and 3652970 or 365297
local timer = self.vb.phase == 1 and 26 or self:GetFromTimersTable(movementTimers, false, self.vb.stageTotality, checkedId, self.vb.crushingCast+1)
if timer then
timerCrushingPrismCD:Start(timer, self.vb.crushingCast+1)
end
4 years ago
end
end
if args:IsPlayer() then
specWarnCrushingPrism:Show()
specWarnCrushingPrism:Play("targetyou")
end
if self.Options.SetIconOnCrushing2 and self.vb.crushIcon < 8 then
4 years ago
self:SetIcon(args.destName, self.vb.crushIcon)
end
warnCrushingPrism:CombinedShow(0.5, self.vb.crushingCast, args.destName)
4 years ago
self.vb.crushIcon = self.vb.crushIcon + 1
elseif spellId == 361309 and not args:IsPlayer() then--and not DBM:UnitDebuff("player", spellId)
local _, _, _, _, _, expireTime = DBM:UnitDebuff("player", spellId)
local remaining
if expireTime then
remaining = expireTime-GetTime()
end
if (not remaining or remaining and remaining < 3) and not UnitIsDeadOrGhost("player") then
specWarnLightshatterBeamTaunt:Show(args.destName)
specWarnLightshatterBeamTaunt:Play("tauntboss")
end
4 years ago
elseif spellId == 368671 then
if self.Options.NPAuraOnFractal then
DBM.Nameplate:Show(true, args.destGUID, spellId)
end
elseif spellId == 368969 then
if args:IsPlayer() then
specWarnVolatileChargeYou:Show()
specWarnVolatileChargeYou:Play("bombyou")
yellVolatileCharge:Yell()
yellVolatileChargeFades:Countdown(spellId, 3)
4 years ago
end
4 years ago
end
end
--mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
4 years ago
if spellId == 368671 then
if self.Options.NPAuraOnFractal then
DBM.Nameplate:Hide(true, args.destGUID, spellId)
end
elseif spellId == 368969 then
4 years ago
if args:IsPlayer() then
4 years ago
yellVolatileChargeFades:Cancel()
4 years ago
end
4 years ago
elseif spellId == 360115 then
self.vb.crushingCast = 0
self.vb.chargeCount = 0
self.vb.tremorCount = 0
self.vb.missilesCount = 0
--Seems same in reclaim form 1 and 2. and NA for 3
timerSeismicTremorsCD:Start(4, 1)
4 years ago
timerEarthbreakerMissilesCD:Start(11, 1)
timerCrushingPrismCD:Start(17, 1)
timerReclaimCD:Start(62, self.vb.reclaimCount+1)--My guess confirmed
4 years ago
end
end
4 years ago
--[[
4 years ago
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 183870 then--Pylons
4 years ago
4 years ago
end
end
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if (spellId == 361002 or spellId == 360114) and destGUID == UnitGUID("player") and not playerDebuff 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)
4 years ago
if spellId == 369207 then--Planetcracker Beam
specWarnPlanetcrackerBeam:Show()
specWarnPlanetcrackerBeam:Play("watchstep")--or farfromline if it's a line
4 years ago
end
end
4 years ago
--]]