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
380 lines
15 KiB
local mod = DBM:NewMod(2470, "DBM-Sepulcher", nil, 1195)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20220114041418")
|
|
mod:SetCreatureID(183501)
|
|
mod:SetEncounterID(2553)
|
|
mod:SetUsedIcons(1, 2, 3, 5, 6, 7, 8)
|
|
mod:SetHotfixNoticeRev(20211211000000)
|
|
mod:SetMinSyncRevision(20211211000000)
|
|
--mod.respawnTime = 29
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_CAST_START 363485 365682 362841 362801 362849 364040",
|
|
"SPELL_CAST_SUCCESS 362885 364040 366752 362721 363258 364465 364030",
|
|
"SPELL_AURA_APPLIED 365577 365681 365701 362615 362614 362803 362882",
|
|
"SPELL_AURA_APPLIED_DOSE 365681",
|
|
"SPELL_AURA_REMOVED 365577 365701 363034 363139 362615 362614 362803",
|
|
-- "SPELL_PERIODIC_DAMAGE",
|
|
-- "SPELL_PERIODIC_MISSED",
|
|
"UNIT_DIED",
|
|
"UNIT_SPELLCAST_SUCCEEDED boss1"
|
|
)
|
|
|
|
--TODO, what to really do with https://ptr.wowhead.com/spell=365745/rotary-body-armor
|
|
--TODO, how does Gunship/hyperlight barrage work? Probably https://ptr.wowhead.com/spell=364376/hyperlight-barrage 3 sec periodic trigger
|
|
--TODO, possibly sequence out timers for certain things, like P2 Glpyh might actually be 40, 42, 37
|
|
--[[
|
|
(ability.id = 363485 or ability.id = 362841 or ability.id = 362801 or ability.id = 362849) and type = "begincast"
|
|
or (ability.id = 362885 or ability.id = 366752 or ability.id = 364040 or ability.id = 362721 or ability.id = 363258 or ability.id = 364465) and type = "cast"
|
|
or (ability.id = 363034 or ability.id = 363139) and type = "removebuff"
|
|
or (ability.id = 365682 or ability.id = 364040) and type = "begincast"
|
|
or ability.id = 364030 and type = "cast"
|
|
--]]
|
|
--Xy Decipherers
|
|
----Cartel Overseer
|
|
local warnSystemShock = mod:NewStackAnnounce(365681, 2, nil, "Tank|Healer")
|
|
local warnHyperlightAscension = mod:NewCastAnnounce(364040, 3)
|
|
--Boss
|
|
local warnDecipherRelic = mod:NewSpellAnnounce(363139, 2)
|
|
local warnDecipherRelicOver = mod:NewEndAnnounce(363139, 2)
|
|
local warnRiftBlasts = mod:NewSpellAnnounce(362841, 2)
|
|
local warnDimensionalTear = mod:NewTargetNoFilterAnnounce(362615, 3, nil, nil, 67833)
|
|
local warnStasisTrap = mod:NewTargetNoFilterAnnounce(362882, 2)--Failing to dodge it
|
|
|
|
--Adds
|
|
----Cartel Plunderers
|
|
local specWarnCartelPlunderers = mod:NewSpecialWarningSwitch(363485, "-Healer", nil, nil, 1, 2, 4)
|
|
----Cartel Overseer
|
|
local specWarnSystemShock = mod:NewSpecialWarningDefensive(365682, nil, nil, nil, 1, 2)
|
|
local specWarnSystemShockTaunt = mod:NewSpecialWarningTaunt(365681, nil, nil, nil, 1, 2)
|
|
--Boss
|
|
local specWarnGenesisRings = mod:NewSpecialWarningDodgeCount(363520, nil, nil, nil, 2, 2)
|
|
local specWarnFracturingRiftBlasts = mod:NewSpecialWarningDodge(362841, false, nil, nil, 2, 2, 4)--Mythic only, kinda spammy so off by default
|
|
local specWarnDimensionalTear = mod:NewSpecialWarningYouPos(362615, nil, 67833, nil, 1, 2)
|
|
local yellDimensionalTear = mod:NewPosYell(362615, 327770)
|
|
local yellDimensionalTearFades = mod:NewIconFadesYell(362615, 327770)
|
|
local specWarnGlyphofRelocation = mod:NewSpecialWarningMoveAway(362803, nil, nil, nil, 1, 2)
|
|
local yellGlyphofRelocation = mod:NewYell(362803)
|
|
local yellGlyphofRelocationFades = mod:NewShortFadesYell(362803)
|
|
local specWarnGlyphofRelocationTaunt = mod:NewSpecialWarningTaunt(362803, nil, nil, nil, 1, 2)
|
|
local specWarnHyperlightSpark = mod:NewSpecialWarningCount(362849, nil, nil, nil, 2, 2)
|
|
local specWarnStasisTrap = mod:NewSpecialWarningDodge(362885, nil, nil, nil, 2, 2)
|
|
local yellStasisTrap = mod:NewYell(362882)--Failing to dodge it
|
|
--Hyperlight Adds
|
|
local specWarnDebilitatingRay = mod:NewSpecialWarningInterruptCount(364030, "HasInterrupt", nil, nil, 1, 2)
|
|
--local specWarnGTFO = mod:NewSpecialWarningGTFO(340324, nil, nil, nil, 1, 8)
|
|
|
|
--mod:AddTimerLine(BOSS)
|
|
local timerGenesisRingsCD = mod:NewNextCountTimer(30, 363520, nil, nil, nil, 3)
|
|
----Cartel Plunderers
|
|
local timerCartelPlunderersCD = mod:NewCDTimer(28.8, 363485, nil, nil, nil, 1, nil, DBM_COMMON_L.MYTHIC_ICON)
|
|
----Cartel Overseer
|
|
local timerSystemShockCD = mod:NewCDTimer(11.5, 365682, nil, "Tank", nil, 5, nil, DBM_COMMON_L.TANK_ICON)--11.5-12.2
|
|
--Boss
|
|
local timerRiftBlastsCD = mod:NewCDTimer(6, 362841, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)--Initial ones only on phasing, after that they can get kinda desynced plus very frequent
|
|
local timerDimensionalTearCD = mod:NewNextTimer(8, 362615, 327770, nil, nil, 3)
|
|
local timerGlyphofRelocationCD = mod:NewCDCountTimer(30, 362801, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
|
|
local timerGlyphExplostion = mod:NewTargetTimer(5, 362803, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON)
|
|
local timerHyperlightSparknovaCD = mod:NewCDCountTimer(28, 362849, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON)--28-34
|
|
local timerStasisTrapCD = mod:NewCDTimer(28, 362885, nil, nil, nil, 3)--28-32. it attemts to average 30 but has ~2 in either direction for some reason
|
|
--Hyperlight Adds
|
|
--local timerDebilitatingRayCD = mod:NewAITimer(28.8, 364030, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
|
|
--local berserkTimer = mod:NewBerserkTimer(600)
|
|
|
|
--mod:AddRangeFrameOption("8")
|
|
--mod:AddInfoFrameOption(328897, true)
|
|
mod:AddSetIconOption("SetIconOnHyperlightAdds", 364021, true, true, {4, 5, 6, 7, 8})
|
|
mod:AddSetIconOption("SetIconOnWormhole", 362615, true, false, {1, 2})
|
|
mod:AddSetIconOption("SetIconGlyphofRelocation", 362803, false, false, {3})
|
|
mod:AddNamePlateOption("NPAuraOnDecipherRelic", 365577, true)
|
|
mod:AddNamePlateOption("NPAuraOnOverseersOrders", 365701, true)
|
|
mod:AddNamePlateOption("NPAuraOnAscension", 364040, true)
|
|
|
|
local castsPerGUID = {}
|
|
mod.vb.tearIcon = 1
|
|
mod.vb.sparkCount = 0
|
|
mod.vb.ringCount = 0
|
|
mod.vb.glyphCount = 0
|
|
|
|
function mod:OnCombatStart(delay)
|
|
self:SetStage(1)
|
|
self.vb.sparkCount = 0
|
|
self.vb.ringCount = 0
|
|
self.vb.glyphCount = 0
|
|
timerDimensionalTearCD:Start(8-delay)
|
|
timerHyperlightSparknovaCD:Start(14-delay, 1)
|
|
timerStasisTrapCD:Start(21-delay)
|
|
timerGenesisRingsCD:Start(26-delay, 1)
|
|
if self:IsMythic() then
|
|
timerCartelPlunderersCD:Start(13.4-delay)
|
|
timerRiftBlastsCD:Start(13.6-delay)
|
|
timerGlyphofRelocationCD:Start(44.4-delay, 1)
|
|
else
|
|
timerGlyphofRelocationCD:Start(40-delay, 1)--TODO, recheck
|
|
end
|
|
-- if self.Options.InfoFrame then
|
|
-- DBM.InfoFrame:SetHeader(DBM:GetSpellInfo(328897))
|
|
-- DBM.InfoFrame:Show(10, "table", ExsanguinatedStacks, 1)
|
|
-- end
|
|
if self.Options.NPAuraOnDecipherRelic or self.Options.NPAuraOnOverseersOrder or self.Options.NPAuraOnAscension then
|
|
DBM:FireEvent("BossMod_EnableHostileNameplates")
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatEnd()
|
|
table.wipe(castsPerGUID)
|
|
-- if self.Options.InfoFrame then
|
|
-- DBM.InfoFrame:Hide()
|
|
-- end
|
|
if self.Options.NPAuraOnDecipherRelic or self.Options.NPAuraOnOverseersOrder or self.Options.NPAuraOnAscension then
|
|
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
|
|
end
|
|
end
|
|
|
|
--[[
|
|
function mod:OnTimerRecovery()
|
|
|
|
end
|
|
--]]
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 363485 then
|
|
DBM:AddMsg("The Cartel Elite added to combat log, notify DBM authors")
|
|
elseif spellId == 365682 then
|
|
if self:IsTanking("player", nil, nil, nil, args.sourseGUID) then
|
|
specWarnSystemShock:Show()
|
|
specWarnSystemShock:Play("defensive")
|
|
end
|
|
timerSystemShockCD:Start(11.5, args.sourceGUID)
|
|
elseif spellId == 362841 and self:AntiSpam(3, 1) then
|
|
if self.Options.SpecWarn362841dodge then
|
|
specWarnFracturingRiftBlasts:Show()
|
|
specWarnFracturingRiftBlasts:Play("farfromline")
|
|
else
|
|
warnRiftBlasts:Show()
|
|
end
|
|
-- timerRiftBlastsCD:Start()
|
|
elseif spellId == 362801 then
|
|
self.vb.glyphCount = self.vb.glyphCount + 1
|
|
timerGlyphofRelocationCD:Start(nil, self.vb.glyphCount+1)
|
|
elseif spellId == 362849 then
|
|
self.vb.sparkCount = self.vb.sparkCount + 1
|
|
specWarnHyperlightSpark:Show(self.vb.sparkCount)
|
|
specWarnHyperlightSpark:Play("aesoon")
|
|
timerHyperlightSparknovaCD:Start(nil, self.vb.sparkCount+1)
|
|
elseif spellId == 364040 then
|
|
if self:AntiSpam(2, 2) then
|
|
warnHyperlightAscension:Show()
|
|
end
|
|
if self.Options.NPAuraOnAscension then
|
|
DBM.Nameplate:Show(true, args.sourceGUID, spellId, nil, 10)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
local spellId = args.spellId
|
|
if (spellId == 362885 or spellId == 366752) and self:AntiSpam(10, 3) then--362885 verified on heroic
|
|
specWarnStasisTrap:Show()
|
|
specWarnStasisTrap:Play("watchstep")
|
|
timerStasisTrapCD:Start()
|
|
elseif spellId == 364040 then
|
|
if self.Options.NPAuraOnAscension then
|
|
DBM.Nameplate:Hide(true, args.sourceGUID, spellId)
|
|
end
|
|
elseif spellId == 362721 then
|
|
self.vb.tearIcon = 1
|
|
-- timerDimensionalTearCD:Start()--Not used second time per phase?
|
|
elseif spellId == 363258 then--Slightly faster than SPELL_CAST_START/APPLIED
|
|
warnDecipherRelic:Show()
|
|
--Stop timers
|
|
timerGenesisRingsCD:Stop()
|
|
timerCartelPlunderersCD:Stop()
|
|
timerRiftBlastsCD:Stop()
|
|
timerDimensionalTearCD:Stop()
|
|
timerGlyphofRelocationCD:Stop()
|
|
timerHyperlightSparknovaCD:Stop()
|
|
timerStasisTrapCD:Stop()
|
|
--Only scan for acolytes and mark them with skull and cross, then stop scanning
|
|
if self.Options.SetIconOnHyperlightAdds then
|
|
self:ScanForMobs(184140, 0, 8, 2, {184140, 184143}, 12, "SetIconOnHyperlightAdds")
|
|
end
|
|
--Secondary scan that's marking Debilitators with 6 5 and 4
|
|
if self.Options.SetIconOnHyperlightAdds then
|
|
self:ScanForMobs(183707, 0, 6, 3, nil, 12, "SetIconOnHyperlightAdds")
|
|
end
|
|
elseif spellId == 364465 then
|
|
self.vb.ringCount = self.vb.ringCount + 1
|
|
specWarnGenesisRings:Show(self.vb.ringCount)
|
|
specWarnGenesisRings:Play("watchwave")
|
|
--More data needed, no phase 3 data for mythic, and did heroic change to also not be 30 anymore?
|
|
local timer = self:IsMythic() and (self.vb.phase == 1 and 33 or self.vb.phase == 2 and 40) or 30
|
|
timerGenesisRingsCD:Start(timer, self.vb.ringCount+1)
|
|
elseif spellId == 364030 then
|
|
if not castsPerGUID[args.sourceGUID] then--Shouldn't happen, but failsafe
|
|
castsPerGUID[args.sourceGUID] = 0
|
|
end
|
|
castsPerGUID[args.sourceGUID] = castsPerGUID[args.sourceGUID] + 1
|
|
local count = castsPerGUID[args.sourceGUID]
|
|
-- timerDebilitatingRayCD:Start(17, count, args.sourceGUID)
|
|
if self:CheckInterruptFilter(args.sourceGUID, false, false) then
|
|
specWarnDebilitatingRay:Show(args.sourceName, count)
|
|
if count == 1 then
|
|
specWarnDebilitatingRay:Play("kick1r")
|
|
elseif count == 2 then
|
|
specWarnDebilitatingRay:Play("kick2r")
|
|
elseif count == 3 then
|
|
specWarnDebilitatingRay:Play("kick3r")
|
|
elseif count == 4 then
|
|
specWarnDebilitatingRay:Play("kick4r")
|
|
elseif count == 5 then
|
|
specWarnDebilitatingRay:Play("kick5r")
|
|
else
|
|
specWarnDebilitatingRay:Play("kickcast")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 365577 then
|
|
if self.Options.NPAuraOnDecipherRelic then
|
|
DBM.Nameplate:Show(true, args.sourceGUID, spellId, nil, 25)
|
|
end
|
|
elseif spellId == 365701 then
|
|
if self.Options.NPAuraOnOverseersOrders then
|
|
DBM.Nameplate:Show(true, args.sourceGUID, spellId)
|
|
end
|
|
elseif spellId == 365681 then
|
|
local uId = DBM:GetRaidUnitId(args.destName)
|
|
if self:IsTanking(uId) then
|
|
local amount = args.amount or 1
|
|
if amount >= 2 then
|
|
if not args:IsPlayer() then
|
|
--Because multiple adds up on diff CDs, can't do fancy debuff remaining checks, it just needs to be gone
|
|
if not DBM:UnitDebuff("player", spellId) and not UnitIsDeadOrGhost("player") then
|
|
specWarnSystemShockTaunt:Show(args.destName)
|
|
specWarnSystemShockTaunt:Play("tauntboss")
|
|
else
|
|
warnSystemShock:Show(args.destName, amount)
|
|
end
|
|
end
|
|
else
|
|
warnSystemShock:Show(args.destName, amount)
|
|
end
|
|
end
|
|
elseif spellId == 362615 or spellId == 362614 then
|
|
local icon = self.vb.tearIcon
|
|
if self.Options.SetIconOnWormhole then
|
|
self:SetIcon(args.destName, icon)
|
|
end
|
|
if args:IsPlayer() then
|
|
specWarnDimensionalTear:Show(self:IconNumToTexture(icon))
|
|
specWarnDimensionalTear:Play("mm"..icon)
|
|
yellDimensionalTear:Yell(icon, icon, icon)
|
|
yellDimensionalTearFades:Countdown(spellId, 7, icon)
|
|
end
|
|
warnDimensionalTear:CombinedShow(1, args.destName)
|
|
self.vb.tearIcon = self.vb.tearIcon + 1
|
|
elseif spellId == 362803 then
|
|
if self.Options.SetIconGlyphofRelocation then
|
|
self:SetIcon(args.destName, 3)
|
|
end
|
|
if args:IsPlayer() then
|
|
specWarnGlyphofRelocation:Show(self.vb.destructionCount)
|
|
specWarnGlyphofRelocation:Play("runout")
|
|
yellGlyphofRelocation:Yell()
|
|
yellGlyphofRelocationFades:Countdown(spellId)
|
|
else
|
|
specWarnGlyphofRelocationTaunt:Show(args.destName)
|
|
specWarnGlyphofRelocationTaunt:Play("tauntboss")
|
|
end
|
|
timerGlyphExplostion:Start(args.destName)
|
|
elseif spellId == 362882 then
|
|
warnStasisTrap:CombinedShow(1, args.destName)
|
|
if args:IsPlayer() then
|
|
yellStasisTrap:Yell()
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 365577 then
|
|
if self.Options.NPAuraOnDecipherRelic then
|
|
DBM.Nameplate:Hide(true, args.sourceGUID, spellId)
|
|
end
|
|
elseif spellId == 365701 then
|
|
if self.Options.NPAuraOnOverseersOrders then
|
|
DBM.Nameplate:Hide(true, args.sourceGUID, spellId)
|
|
end
|
|
elseif spellId == 363034 or spellId == 363139 then--Decipher Relic 1 min (boss casts)
|
|
self:SetStage(0)
|
|
self.vb.sparkCount = 0
|
|
self.vb.ringCount = 0
|
|
self.vb.glyphCount = 0
|
|
warnDecipherRelicOver:Show()
|
|
--Restart Timers (exactly same as pull)
|
|
timerDimensionalTearCD:Start(8)
|
|
timerHyperlightSparknovaCD:Start(14, 1)
|
|
timerStasisTrapCD:Start(21)
|
|
timerGenesisRingsCD:Start(26, 1)
|
|
timerGlyphofRelocationCD:Start(40, 1)
|
|
if self:IsMythic() then
|
|
timerCartelPlunderersCD:Start(12)
|
|
timerRiftBlastsCD:Start(12.2)
|
|
end
|
|
elseif spellId == 362615 or spellId == 362614 then
|
|
if self.Options.SetIconOnWormhole then
|
|
self:SetIcon(args.destName, 0)
|
|
end
|
|
if args:IsPlayer() then
|
|
yellDimensionalTearFades:Cancel()
|
|
end
|
|
elseif spellId == 362803 then
|
|
if self.Options.SetIconGlyphofRelocation then
|
|
self:SetIcon(args.destName, 0)
|
|
end
|
|
if args:IsPlayer() then
|
|
yellGlyphofRelocationFades:Cancel()
|
|
end
|
|
timerGlyphExplostion:Stop(args.destName)
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 184140 or cid == 184143 then--Xy Acolyte, Xy Archon
|
|
timerSystemShockCD:Stop(args.destGUID)
|
|
if self.Options.NPAuraOnAscension then
|
|
DBM.Nameplate:Hide(true, args.destGUID, 364040)
|
|
end
|
|
-- elseif cid == 183707 then--Cartel Xy Debilitator
|
|
|
|
end
|
|
end
|
|
|
|
--[[
|
|
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
|
|
if spellId == 340324 and destGUID == UnitGUID("player") and not playerDebuff and self:AntiSpam(2, 5) then
|
|
specWarnGTFO:Show(spellName)
|
|
specWarnGTFO:Play("watchfeet")
|
|
end
|
|
end
|
|
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
|
|
--]]
|
|
|
|
--"<19.51 22:08:21> [UNIT_SPELLCAST_SUCCEEDED] Artificer Xy'mox(Bookaine) -Hyperlight Reinforcements- boss1:Cast-3-4170-2481-12807-364046-006FB27045:364046
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
|
|
if spellId == 365428 then
|
|
specWarnCartelPlunderers:Show()
|
|
specWarnCartelPlunderers:Play("killadd")
|
|
--timerCartelPlunderersCD:Start()
|
|
end
|
|
end
|
|
|
|
|