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.

164 lines
5.9 KiB

local mod = DBM:NewMod(2083, "DBM-Party-BfA", 1, 968)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20240123233936")
mod:SetCreatureID(122963)
mod:SetEncounterID(2086)
mod:SetHotfixNoticeRev(20231023000000)
mod:SetMinSyncRevision(20231023000000)
mod.respawnTime = 29
mod.sendMainBossGUID = true
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 255371 257407 260683",
"SPELL_CAST_SUCCESS 255434",
"SPELL_AURA_APPLIED 257407",
"SPELL_AURA_REMOVED 257407 255421",
"RAID_BOSS_WHISPER",
"CHAT_MSG_RAID_BOSS_EMOTE"
)
--[[
(ability.id = 255371 or ability.id = 257407 or ability.id = 260683) and type = "begincast"
or ability.id = 255434 and type = "cast"
or ability.id = 257407 or ability.id = 255421
or type = "dungeonencounterstart" or type = "dungeonencounterend"
--]]
--TODO, Bone Quake deleted in M+? It's in journal but never cast
--TODO, no two pulls are same timer wise. pursuit kinda fucks timers to hell. makes it hard to learn ACTUAL cds since spells get delayed by ICDs and spell queues
local warnPursuit = mod:NewTargetAnnounce(257407, 2)
local specWarnTeeth = mod:NewSpecialWarningDefensive(255434, nil, nil, nil, 1, 2)
local specWarnFear = mod:NewSpecialWarningMoveTo(255371, nil, nil, nil, 3, 13)
local yellPursuit = mod:NewYell(257407)
local specWarnPursuit = mod:NewSpecialWarningRun(257407, nil, nil, nil, 4, 2)
local specWarnBoneQuake = mod:NewSpecialWarningSpell(260683, nil, nil, nil, 2, 2)
local timerTeethCD = mod:NewCDCountTimer(25, 255434, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)--actual minimum timer not known
local timerFearCD = mod:NewCDCountTimer(35.1, 255371, nil, nil, nil, 2)--actual minimum timer not known
local timerPursuitCD = mod:NewCDCountTimer(35.1, 257407, nil, nil, nil, 3)--actual minimum timer not known
mod.vb.teethCount = 0--27.1, 49.7, 29.1, 47.5, 26.7 (some timer examples, min used, and timer correction used otherwise
mod.vb.fearCount = 0
mod.vb.pursuitCount = 0
--Pursuit/Devour ending triggers 9.1 ICD
--Terrifing Visage cast triggers 9.5 ICD
--Serrated teeth triggers 3.5 ICD
--Serated teeth has highest spell queue priority
--ICDs mess CDs all to hell since pursuit is a wild card
--it's likely we'll never learn any of these actual CDs are for true correctness
local function updateAllTimers(self, ICD)
DBM:Debug("updateAllTimers running", 3)
if timerTeethCD:GetRemaining(self.vb.teethCount+1) < ICD then
local elapsed, total = timerTeethCD:GetTime(self.vb.teethCount+1)
local extend = ICD - (total-elapsed)
DBM:Debug("timerTeethCD extended by: "..extend, 2)
timerTeethCD:Update(elapsed, total+extend, self.vb.teethCount+1)
end
if timerFearCD:GetRemaining(self.vb.fearCount+1) < ICD then
local elapsed, total = timerFearCD:GetTime(self.vb.fearCount+1)
local extend = ICD - (total-elapsed)
DBM:Debug("timerFearCD extended by: "..extend, 2)
timerFearCD:Update(elapsed, total+extend, self.vb.fearCount+1)
end
if timerPursuitCD:GetRemaining(self.vb.pursuitCount+1) < ICD then
local elapsed, total = timerPursuitCD:GetTime(self.vb.pursuitCount+1)
local extend = ICD - (total-elapsed)
DBM:Debug("timerPursuitCD extended by: "..extend, 2)
timerPursuitCD:Update(elapsed, total+extend, self.vb.pursuitCount+1)
end
end
function mod:OnCombatStart(delay)
self.vb.teethCount = 0
self.vb.fearCount = 0
self.vb.pursuitCount = 0
timerTeethCD:Start(6-delay, 1)--8.1
timerFearCD:Start(11.7-delay, 1)
timerPursuitCD:Start(21.7-delay, 1)
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 257407 and self:AntiSpam(5, args.destName) then--Backup if CHAT_MSG_RAID_BOSS_EMOTE/RAID_BOSS_WHISPER doesn't work
if args:IsPlayer() then
specWarnPursuit:Show()
specWarnPursuit:Play("justrun")
yellPursuit:Yell()
else
warnPursuit:Show(args.destName)
end
end
end
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 257407 or (spellId == 255421 and args:IsDestTypeHostile()) then--Pursuit ending with no devour happening, or devour ending on Rezan
updateAllTimers(self, 9.1)
end
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 255371 then
self.vb.fearCount = self.vb.fearCount + 1
specWarnFear:Show(DBM_COMMON_L.BREAK_LOS)
specWarnFear:Play("breaklos")
timerFearCD:Start(nil, self.vb.fearCount+1)
updateAllTimers(self, 9.5)
elseif spellId == 257407 then
self.vb.pursuitCount = self.vb.pursuitCount + 1
timerPursuitCD:Start(nil, self.vb.pursuitCount+1)
elseif spellId == 260683 then
specWarnBoneQuake:Show()
specWarnBoneQuake:Play("mobsoon")
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 255434 then
self.vb.teethCount = self.vb.teethCount + 1
if self:IsTanking("player", "boss1", nil, true) then
specWarnTeeth:Show()
specWarnTeeth:Play("defensive")
end
timerTeethCD:Start(nil, self.vb.teethCount+1)
updateAllTimers(self, 3.5)
end
end
--10.2 switched event to WHISPER
function mod:RAID_BOSS_WHISPER(msg)
if msg:find("spell:255421") then
specWarnPursuit:Show()
specWarnPursuit:Play("justrun")
yellPursuit:Yell()
end
end
function mod:OnTranscriptorSync(msg, targetName)
if msg:find("255421") and targetName and self:AntiSpam(5, targetName) then
targetName = Ambiguate(targetName, "none")
warnPursuit:Show(targetName)
end
end
--Same time as SPELL_CAST_START but has target information on normal
--Deprecated in 10.2
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg, _, _, _, targetName)
if msg:find("spell:255421") then
if targetName and self:AntiSpam(5, targetName) then
if targetName == UnitName("player") then
specWarnPursuit:Show()
specWarnPursuit:Play("justrun")
yellPursuit:Yell()
else
warnPursuit:Show(targetName)
end
end
end
end