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.

124 lines
4.3 KiB

local mod = DBM:NewMod(1140, "DBM-Party-WoD", 6, 537)
local L = mod:GetLocalizedStrings()
mod.statTypes = "normal,heroic,mythic,challenge,timewalker"
mod:SetRevision("20230504231118")
mod:SetCreatureID(75452)
mod:SetEncounterID(1679)
mod.sendMainBossGUID = true
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 154175 165578",
"SPELL_AURA_APPLIED 153804",
"SPELL_AURA_REMOVED 153804",
"SPELL_PERIODIC_DAMAGE 153692",
"SPELL_ABSORBED 153692",
"RAID_BOSS_EMOTE",
"UNIT_SPELLCAST_SUCCEEDED boss1",
"UNIT_DIED"
)
--Inhale and submerge timers iffy. Based on data, it's possible they share a CD and which one he uses is random of two.
--With that working theory, it's possible to add a 28-30 second timer for it maybe.
--However, being a 5 man boss. Plus not knowing for certain, not worth the time right now.
--[[
(ability.id = 154175 or ability.id = 165578) and type = "begincast"
or ability.id = 153804
or type = "dungeonencounterstart" or type = "dungeonencounterend"
--]]
local warnBodySlam = mod:NewTargetAnnounce(154175, 4)
local warnCorpseBreath = mod:NewSpellAnnounce(165578, 2)
local warnSubmerge = mod:NewSpellAnnounce(177694, 1)
local warnInhaleEnd = mod:NewEndAnnounce(153804, 1)
local specWarnBodySlam = mod:NewSpecialWarningDodge(154175, nil, nil, nil, 2, 2)
local specWarnInhale = mod:NewSpecialWarningRun(153804, nil, nil, 2, 4, 12)
local specWarnNecroticPitch = mod:NewSpecialWarningMove(153692, nil, nil, nil, 1, 8)
local timerBodySlamCD = mod:NewCDSourceTimer(23, 154175, nil, nil, nil, 3)--34
local timerInhaleCD = mod:NewCDTimer(22.1, 153804, nil, nil, nil, 6, nil, DBM_COMMON_L.DEADLY_ICON)
local timerInhale = mod:NewBuffActiveTimer(9, 153804, nil, nil, nil, 6, nil, DBM_COMMON_L.DEADLY_ICON)
local timerCorpseBreathCD = mod:NewCDTimer(28, 165578, nil, false, nil, 5)--32-37 Variation, also not that important so off by default since there will already be up to 3 smash timers
--local timerSubmergeCD = mod:NewCDTimer(80, 177694, nil, nil, nil, 6)
mod.vb.inhaleActive = false
function mod:OnCombatStart(delay)
self.vb.inhaleActive = false
timerBodySlamCD:Start(15-delay, UnitName("boss1") or BOSS, UnitGUID("boss1"))--17?
-- timerInhaleCD:Start(15-delay)--it's like 15-60 variation, disabling for now
-- timerSubmergeCD:Start(-delay)
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 154175 then
warnBodySlam:Show(args.sourceName)
if self:AntiSpam(3) then--Throttle special warning when more than 1 slam at once happens.
specWarnBodySlam:Show()
specWarnBodySlam:Play("watchstep")
end
if args:GetSrcCreatureID() == 75452 then--Source is Bonemaw, not one of his adds
timerBodySlamCD:Start(28, args.sourceName, args.sourceGUID)
else
timerBodySlamCD:Start(14, args.sourceName, args.sourceGUID)--little guys use it more often.
end
elseif spellId == 165578 then
warnCorpseBreath:Show()
timerCorpseBreathCD:Start()
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 153804 then
timerInhale:Start()
end
end
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 153804 then
self.vb.inhaleActive = false
warnInhaleEnd:Show()
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 76057 then--Carrion Centipede
timerBodySlamCD:Stop(args.destName, args.destGUID)
end
end
function mod:RAID_BOSS_EMOTE(msg)
if msg:find("spell:153804") then--Slightly faster than combat log (~2)
self.vb.inhaleActive = true
specWarnInhale:Show()
specWarnInhale:Play("inhalegetinpuddle")
timerInhaleCD:Start()
end
end
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
if spellId == 177694 then
warnSubmerge:Show()
timerInhaleCD:Stop()
local name, guid = UnitName(uId), UnitGUID(uId)
timerBodySlamCD:Stop(name, guid)
timerInhaleCD:Start(17.8)
-- timerSubmergeCD:Start()
end
end
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, destName, _, _, spellId)
if spellId == 153692 and not self.vb.inhaleActive and destGUID == UnitGUID("player") and self:AntiSpam(3, 1) then
specWarnNecroticPitch:Show()
specWarnNecroticPitch:Play("watchfeet")
end
end
mod.SPELL_ABSORBED = mod.SPELL_PERIODIC_DAMAGE