local mod = DBM:NewMod(1861, "DBM-TombofSargeras", nil, 875) local L = mod:GetLocalizedStrings() mod:SetRevision("20200806141949") mod:SetCreatureID(115767)--116328 Vellius, 115795 Abyss Stalker, 116329/116843 Sarukel mod:SetEncounterID(2037) mod:SetUsedIcons(1, 2, 3, 4) mod:SetHotfixNoticeRev(16600) mod.respawnTime = 40 mod:RegisterCombat("combat") mod:RegisterEventsInCombat( "SPELL_CAST_START 230273 232722 230384 234661 232746 232757 230358 230201", "SPELL_CAST_SUCCESS 230201 232757 232756 232746", "SPELL_AURA_APPLIED 239375 239362 230139 230201 230362 232916 230384 234661", "SPELL_AURA_REMOVED 239375 239362 230139 230201", "UNIT_SPELLCAST_SUCCEEDED boss1" ) --[[ (ability.id = 230273 or ability.id = 232722 or ability.id = 230384 or ability.id = 232746 or ability.id = 232757 or ability.id = 232827 or ability.id = 232756 or ability.id = 230358) and type = "begincast" or (ability.id = 230201 or ability.id = 232745) and type = "cast" or (target.id = 116329 or target.id = 116843 or target.id = 116328) and type = "death" or (ability.id = 239375 or ability.id = 239362 or ability.id = 230139) and type = "applydebuff" --]] --General Stuff local warnHydraShot = mod:NewTargetCountAnnounce(230139, 4) local warnDarkDepths = mod:NewSpellAnnounce(230273, 2, nil, false, 2) local warnBurdenAll = mod:NewTargetAnnounce(230214, 2) local warnFromtheAbyss = mod:NewSpellAnnounce(230227, 2) --Stage One: Ten Thousand Fangs local warnThunderingShock = mod:NewTargetAnnounce(230362, 2, nil, false) local warnConsumingHunger = mod:NewTargetAnnounce(230384, 2) --Stage Two: Terrors of the Deep local warnPhase2 = mod:NewPhaseAnnounce(2, 2, nil, nil, nil, nil, nil, 2) local warnSummonOssunet = mod:NewSpellAnnounce(232913, 2) local warnBefoulingInk = mod:NewTargetAnnounce(232916, 2, nil, false)--Optional warning if you want to know who's carrying ink --Stage three local warnPhase3 = mod:NewPhaseAnnounce(3, 2, nil, nil, nil, nil, nil, 2) --General Stuff local specWarnHydraShot = mod:NewSpecialWarningYouPos(230139, nil, nil, nil, 1, 2) local yellHydraShot = mod:NewPosYell(230139, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION2) local yellHydraShotFades = mod:NewIconFadesYell(230139) local specWarnBurdenofPain = mod:NewSpecialWarningYou(230201, nil, nil, nil, 1, 2) local specWarnBurdenofPainTaunt = mod:NewSpecialWarningTaunt(230201, nil, nil, 2, 3, 2) local yellBurdenofPain = mod:NewYell(230201, 214893) local specWarnDreadShark = mod:NewSpecialWarningDodge(239436, nil, nil, nil, 3, 2) --Stage One: Ten Thousand Fangs local specWarnSlicingTornado = mod:NewSpecialWarningDodge(232722, nil, nil, nil, 2, 2) local specWarnThunderingShock = mod:NewSpecialWarningDodge(230362, nil, nil, nil, 2, 7) local specWarnThunderingShockDispel = mod:NewSpecialWarningDispel(230362, "Healer", nil, nil, 1, 2) local specWarnConsumingHunger = mod:NewSpecialWarningMoveTo(230384, nil, nil, nil, 1, 7) --Stage Two: Terrors of the Deep local specWarnDevouringMaw = mod:NewSpecialWarningCount(234621, nil, nil, nil, 2, 7) local specWarnCrashingWave = mod:NewSpecialWarningDodge(232827, nil, nil, nil, 3, 2) --Mythic local specWarnDeliciousBufferfish = mod:NewSpecialWarningYou(239375, nil, nil, nil, 1, 2) local yellDeliciousBufferfish = mod:NewFadesYell(239375, DBM_CORE_L.AUTO_YELL_CUSTOM_FADE) --General Stuff mod:AddTimerLine(GENERAL) local timerHydraShotCD = mod:NewCDCountTimer(40, 230139, nil, nil, nil, 3, nil, nil, nil, 1, 4) local timerBurdenofPainCD = mod:NewCDCountTimer(27.6, 230201, nil, "Tank", nil, 5, nil, DBM_CORE_L.TANK_ICON, nil, 2, 4)--28-32 local timerFromtheAbyssCD = mod:NewCDTimer(27, 230227, nil, nil, nil, 1)--27-31 --Stage One: Ten Thousand Fangs mod:AddTimerLine(SCENARIO_STAGE:format(1)) local timerSlicingTornadoCD = mod:NewCDCountTimer(43.2, 232722, nil, nil, nil, 3, nil, DBM_CORE_L.DEADLY_ICON, nil, 3, 4)--43.2-54 local timerConsumingHungerCD = mod:NewCDTimer(31.6, 230920, nil, nil, nil, 1) local timerThunderingShockCD = mod:NewCDTimer(32.2, 230358, nil, nil, nil, 3, nil, DBM_CORE_L.MAGIC_ICON) --Stage Two: Terrors of the Deep mod:AddTimerLine(SCENARIO_STAGE:format(2)) local timerDevouringMawCD = mod:NewCDCountTimer(40.5, 234621, nil, nil, nil, 3, nil, DBM_CORE_L.IMPORTANT_ICON) local timerCrashingWaveCD = mod:NewCDCountTimer(40, 232827, nil, nil, nil, 3) local timerInkCD = mod:NewCDTimer(41, 232913, nil, nil, nil, 3) --Mythic mod:AddTimerLine(ENCOUNTER_JOURNAL_SECTION_FLAG12) local timerBufferSpawn = mod:NewNextTimer(20, 239362, nil, nil, nil, 5, nil, DBM_CORE_L.HEROIC_ICON) local berserkTimer = mod:NewBerserkTimer(480) mod:AddSetIconOption("SetIconOnHydraShot", 230139, true) mod:AddBoolOption("TauntOnPainSuccess", false) --mod:AddInfoFrameOption(227503, true) --mod:AddRangeFrameOption("5/8/15") mod.vb.phase = 1 mod.vb.crashingWaveCount = 0 mod.vb.hydraShotCount = 0 mod.vb.burdenCount = 0 mod.vb.tornadoCount = 0 mod.vb.mawCount = 0 local thunderingShock, consumingHunger, bufferFish = DBM:GetSpellInfo(230358), DBM:GetSpellInfo(230384), DBM:GetSpellInfo(239375) local hydraIcons = {} local eventsRegistered = false local p3MythicCrashingWave = {30.9, 30.9, 40.6, 35.8, 30.9}--All minus 2 because timer starts at SUCCESS but is for START function mod:OnCombatStart(delay) self.vb.phase = 1 self.vb.crashingWaveCount = 0 self.vb.hydraShotCount = 0 self.vb.burdenCount = 0 self.vb.tornadoCount = 0 self.vb.mawCount = 0 table.wipe(hydraIcons) timerThunderingShockCD:Start(10-delay)--10-11 if not self.Options.TauntOnPainSuccess then timerBurdenofPainCD:Start(15.4-delay, 1) else timerBurdenofPainCD:Start(17.9-delay, 1) end timerFromtheAbyssCD:Start(18-delay) timerConsumingHungerCD:Start(20-delay)--20-23 if self:IsEasy() then timerSlicingTornadoCD:Start(36-delay, 1)--36 else timerSlicingTornadoCD:Start(30-delay, 1) if self:IsMythic() then timerBufferSpawn:Start(12.5) end end if not self:IsLFR() then timerHydraShotCD:Start(25.2-delay, 1) berserkTimer:Start(480) end end function mod:OnCombatEnd() eventsRegistered = false self:UnregisterShortTermEvents() end function mod:SPELL_CAST_START(args) local spellId = args.spellId if spellId == 230273 then warnDarkDepths:Show() elseif spellId == 232722 then self.vb.tornadoCount = self.vb.tornadoCount + 1 specWarnSlicingTornado:Show() specWarnSlicingTornado:Play("watchwave") if self:IsMythic() then timerSlicingTornadoCD:Start(34, self.vb.tornadoCount+1) else timerSlicingTornadoCD:Start(nil, self.vb.tornadoCount+1) end elseif spellId == 230384 or spellId == 234661 then timerConsumingHungerCD:Start() elseif spellId == 232746 and self:AntiSpam(10, 5) then self.vb.mawCount = self.vb.mawCount + 1 specWarnDevouringMaw:Show(self.vb.mawCount) specWarnDevouringMaw:Play("inktoshark") elseif spellId == 232757 and self:AntiSpam(10, 6) then specWarnCrashingWave:Show() specWarnCrashingWave:Play("chargemove") elseif spellId == 230358 then if DBM:UnitDebuff("player", consumingHunger) then specWarnConsumingHunger:Show(thunderingShock) specWarnConsumingHunger:Play("movetojelly") else specWarnThunderingShock:Show() specWarnThunderingShock:Play("watchstep") end timerThunderingShockCD:Start() elseif spellId == 230201 then if self:IsTanking("player", "boss1", nil, true) then specWarnBurdenofPain:Show() specWarnBurdenofPain:Play("defensive") else if not self.Options.TauntOnPainSuccess then local targetName = UnitName("boss1target") or DBM_CORE_L.UNKNOWN if self:AntiSpam(5, targetName) and UnitName("player") ~= targetName then specWarnBurdenofPainTaunt:Show(targetName) specWarnBurdenofPainTaunt:Play("tauntboss") end end end end end function mod:SPELL_CAST_SUCCESS(args) local spellId = args.spellId if spellId == 230201 then self.vb.burdenCount = self.vb.burdenCount + 1 if not self.Options.TauntOnPainSuccess then timerBurdenofPainCD:Start(25.1, self.vb.burdenCount+1) else timerBurdenofPainCD:Start(27.6, self.vb.burdenCount+1) end if self:IsMythic() and not eventsRegistered then eventsRegistered = true self:RegisterShortTermEvents( "SPELL_DAMAGE 230214" ) end elseif spellId == 232757 then self.vb.crashingWaveCount = self.vb.crashingWaveCount + 1 if self:IsMythic() and self.vb.phase == 3 then local timer = p3MythicCrashingWave[self.vb.crashingWaveCount+1] if timer then timerCrashingWaveCD:Start(timer, self.vb.crashingWaveCount+1) else timerCrashingWaveCD:Start(30.9, self.vb.crashingWaveCount+1) end else timerCrashingWaveCD:Start(nil, self.vb.crashingWaveCount+1) end elseif spellId == 232756 then warnSummonOssunet:Show() if self.vb.phase < 3 then timerInkCD:Start(41.5) else timerInkCD:Start(26.7)--Variable, not sequence though cause differs pull to pull. just standard variable CD end elseif spellId == 232746 then timerDevouringMawCD:Start(nil, self.vb.mawCount+1) end end function mod:SPELL_AURA_APPLIED(args) local spellId = args.spellId if spellId == 239375 or spellId == 239362 then--Carring Bufferfish (239375 confirmed on mythic) if args:IsPlayer() then specWarnDeliciousBufferfish:Show() end elseif spellId == 230139 then local isPlayer = args:IsPlayer() local name = args.destName if not tContains(hydraIcons, name) then hydraIcons[#hydraIcons+1] = name end local count = #hydraIcons warnHydraShot:CombinedShow(0.3, self.vb.hydraShotCount, args.destName) if args:IsPlayer() then specWarnHydraShot:Show(self:IconNumToTexture(count)) if self:IsHard() then specWarnHydraShot:Play("mm"..count) else specWarnHydraShot:Play("targetyou") end yellHydraShot:Yell(count, args.spellName, count) yellHydraShotFades:Countdown(6, nil, count) end if self.Options.SetIconOnHydraShot then self:SetIcon(name, count) end elseif spellId == 230201 then if not args:IsPlayer() and self:AntiSpam(5, args.destName) then specWarnBurdenofPainTaunt:Show(args.destName) specWarnBurdenofPainTaunt:Play("tauntboss") end elseif spellId == 230362 then if self.Options.SpecWarn230362dispel then specWarnThunderingShock:CombinedShow(0.3, args.destName) if self:AntiSpam(3, 2) and self:IsHealer() then specWarnThunderingShock:Play("helpdispel") end else warnThunderingShock:CombinedShow(0.3, args.destName) end elseif spellId == 230384 or spellId == 234661 then--230384 warnConsumingHunger:CombinedShow(0.5, args.destName) if args:IsPlayer() then specWarnConsumingHunger:Show(thunderingShock) specWarnConsumingHunger:Play("movetojelly") end elseif spellId == 232916 then--Person is carrying ink warnBefoulingInk:CombinedShow(1, args.destName) end end --mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED function mod:SPELL_AURA_REMOVED(args) local spellId = args.spellId if spellId == 239375 or spellId == 239362 then--Carring Bufferfish if args:IsPlayer() then yellDeliciousBufferfish:Yell(args.spellName) end elseif spellId == 230139 then if self.Options.SetIconOnHydraShot then self:SetIcon(args.destName, 0) end if args:IsPlayer() then yellHydraShotFades:Cancel() end elseif spellId == 230201 then eventsRegistered = false self:UnregisterShortTermEvents() end end function mod:SPELL_DAMAGE(sourceGUID, _, _, _, _, _, _, _, spellId) if spellId == 230214 then eventsRegistered = false self:UnregisterShortTermEvents() warnBurdenAll:Show(ALL) if sourceGUID == UnitGUID("player") then yellBurdenofPain:Yell() end end end function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, bfaSpellId, _, legacySpellId) local spellId = legacySpellId or bfaSpellId if spellId == 230227 and self:AntiSpam(3, 3) then warnFromtheAbyss:Show() timerFromtheAbyssCD:Start() elseif spellId == 232753 and not self:IsLFR() then--Hydra Shot --event still fires in LFR even though mechanic doesn't exist there, so LFR must be filtered for timer table.wipe(hydraIcons) self.vb.hydraShotCount = self.vb.hydraShotCount + 1 if self:IsMythic() or self.vb.phase == 2 then timerHydraShotCD:Start(30, self.vb.hydraShotCount+1) else timerHydraShotCD:Start(40, self.vb.hydraShotCount+1) end elseif spellId == 239423 then--Dread Shark if self:IsMythic() then --Every two sharks specWarnDreadShark:Show() if DBM:UnitDebuff("player", bufferFish) then--Has bufferfish specWarnDreadShark:Play("takedamage") else specWarnDreadShark:Play("watchstep") end self.vb.phase = self.vb.phase + 0.5 timerBufferSpawn:Start(21) else --Non mythic seems to use this for phase change even though there are no dread sharks self.vb.phase = self.vb.phase + 1 end if self.vb.phase == 2 then self.vb.crashingWaveCount = 0 self.vb.hydraShotCount = 0 warnPhase2:Show() warnPhase2:Play("ptwo") timerThunderingShockCD:Stop() timerSlicingTornadoCD:Stop() timerConsumingHungerCD:Stop() timerHydraShotCD:Stop() timerBurdenofPainCD:Stop() timerFromtheAbyssCD:Stop() timerInkCD:Start(11.6) if self.Options.TauntOnPainSuccess then timerBurdenofPainCD:Start(26, self.vb.burdenCount+1) else timerBurdenofPainCD:Start(23.5, self.vb.burdenCount+1) end timerFromtheAbyssCD:Start(28) timerCrashingWaveCD:Start(30, 1) timerDevouringMawCD:Start(40, 1) if not self:IsLFR() then timerHydraShotCD:Start(15.8, 1) end elseif self.vb.phase == 3 then self.vb.crashingWaveCount = 0 self.vb.hydraShotCount = 0 warnPhase3:Show() warnPhase3:Play("pthree") timerCrashingWaveCD:Stop() timerInkCD:Stop() timerHydraShotCD:Stop() timerBurdenofPainCD:Stop() timerDevouringMawCD:Stop() timerFromtheAbyssCD:Stop() timerInkCD:Start(11.6) if self.Options.TauntOnPainSuccess then timerBurdenofPainCD:Start(26, self.vb.burdenCount+1) else timerBurdenofPainCD:Start(23.5, self.vb.burdenCount+1) end timerFromtheAbyssCD:Start(28) timerCrashingWaveCD:Start(30, 1)--START timerConsumingHungerCD:Start(39)--SUCCESS timerSlicingTornadoCD:Start(51, self.vb.tornadoCount+1) if not self:IsLFR() then timerHydraShotCD:Start(15.8, 1) end end end end