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.
366 lines
13 KiB
366 lines
13 KiB
|
5 years ago
|
local mod = DBM:NewMod(1867, "DBM-TombofSargeras", nil, 875)
|
||
|
|
local L = mod:GetLocalizedStrings()
|
||
|
|
|
||
|
|
mod:SetRevision("20200806141949")
|
||
|
|
mod:SetCreatureID(116691, 116689)--Belac (116691), Atrigan (116689)
|
||
|
|
mod:SetEncounterID(2048)
|
||
|
|
mod:SetBossHPInfoToHighest()
|
||
|
|
mod:SetUsedIcons(1, 2, 3, 5)
|
||
|
|
mod:SetHotfixNoticeRev(16282)
|
||
|
|
--mod.respawnTime = 29
|
||
|
|
|
||
|
|
mod:RegisterCombat("combat")
|
||
|
|
|
||
|
|
mod:RegisterEventsInCombat(
|
||
|
|
"SPELL_CAST_START 233426 234015 239401 233983",
|
||
|
|
"SPELL_CAST_SUCCESS 233431 233983",
|
||
|
|
"SPELL_AURA_APPLIED 233441 235230 233983 233431 236283",
|
||
|
|
"SPELL_AURA_APPLIED_DOSE 248713",
|
||
|
|
"SPELL_AURA_REMOVED 233441 235230 233983 236283 233431",
|
||
|
|
-- "SPELL_PERIODIC_DAMAGE",
|
||
|
|
-- "SPELL_PERIODIC_MISSED",
|
||
|
|
"UNIT_DIED",
|
||
|
|
"UNIT_SPELLCAST_SUCCEEDED boss1 boss2",
|
||
|
|
"UNIT_POWER_FREQUENT player"
|
||
|
|
)
|
||
|
|
|
||
|
|
--[[
|
||
|
|
(ability.id = 233426 or ability.id = 234015 or ability.id = 239401) and type = "begincast"or
|
||
|
|
(ability.id = 233431 or ability.id = 233983 or ability.id = 233894) and type = "cast" or
|
||
|
|
(ability.id = 233441) and type = "applydebuff" or
|
||
|
|
(ability.id = 235230 or ability.id = 233441) and (type = "removebuff" or type = "applybuff")
|
||
|
|
--]]
|
||
|
|
--Atrigan
|
||
|
|
local warnQuills = mod:NewTargetAnnounce(233431, 2)
|
||
|
|
--Belac
|
||
|
|
local warnEchoingAnguish = mod:NewTargetAnnounce(233983, 3)
|
||
|
|
local warnSuffocatingDark = mod:NewSpellAnnounce(233894, 3)
|
||
|
|
local warnPrison = mod:NewSpellAnnounce(236283, 2)
|
||
|
|
--local warnTormentingBurst = mod:NewCountAnnounce(234015, 2)
|
||
|
|
|
||
|
|
--Atrigan
|
||
|
|
local specWarnScytheSweep = mod:NewSpecialWarningSpell(233426, "Tank", nil, 2, 1, 2)
|
||
|
|
local specWarnCalcifiedQuills = mod:NewSpecialWarningMoveAway(233431, nil, nil, nil, 1, 2)
|
||
|
|
local yellCalcifiedQuills = mod:NewYell(233431)
|
||
|
|
local specWarnAttackAtrigan = mod:NewSpecialWarningSwitch("ej14645", "Dps", nil, nil, 1, 2)
|
||
|
|
local specWarnBoneSawMelee = mod:NewSpecialWarningRun(233441, "Melee", nil, 2, 4, 2)
|
||
|
|
local specWarnBoneSawEveryoneElse = mod:NewSpecialWarningReflect(233441, "-Melee", nil, nil, 1, 2)
|
||
|
|
--Belac
|
||
|
|
local specWarnPangsofGuilt = mod:NewSpecialWarningInterruptCount(239401, "HasInterrupt", nil, nil, 1, 3)
|
||
|
|
local specWarnEchoingAnguish = mod:NewSpecialWarningMoveAway(233983, nil, nil, nil, 1, 2)
|
||
|
|
local yellEchoingAnguish = mod:NewPosYell(233983, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION2)
|
||
|
|
local specWarnAttackBelac = mod:NewSpecialWarningSwitch("ej14646", "Dps", nil, nil, 1, 2)
|
||
|
|
local specWarnFelSquallMelee = mod:NewSpecialWarningRun(235230, "Melee", nil, 2, 4, 2)
|
||
|
|
local specWarnFelSquallEveryoneElse = mod:NewSpecialWarningReflect(235230, "-Melee", nil, nil, 1, 2)
|
||
|
|
local specWarnTormentingBurst = mod:NewSpecialWarningCount(234015, nil, nil, nil, 2, 2)
|
||
|
|
--Phase
|
||
|
|
local specWarnSoulCorruption = mod:NewSpecialWarningStack(248713, nil, 10, nil, nil, 1, 6)--stack guessed
|
||
|
|
local specWarnTorment = mod:NewSpecialWarningStack(233104, nil, 75, nil, nil, 1, 6)
|
||
|
|
|
||
|
|
--Atrigan
|
||
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(14645))
|
||
|
|
local timerScytheSweepCD = mod:NewCDCountTimer(23, 233426, nil, "Tank", 2, 5, nil, DBM_CORE_L.TANK_ICON)
|
||
|
|
local timerCalcifiedQuillsCD = mod:NewCDTimer(20.2, 233431, nil, nil, nil, 3)--20.2-20.5 unless delayed by scythe, or bone saw
|
||
|
|
local timerBoneSawCD = mod:NewCDCountTimer(45.4, 233441, nil, nil, nil, 2, nil, nil, nil, 1, 4)
|
||
|
|
local timerBoneSaw = mod:NewBuffActiveTimer(15, 233441, nil, nil, nil, 2)
|
||
|
|
--Belac
|
||
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(14646))
|
||
|
|
local timerEchoingAnguishCD = mod:NewCDTimer(22.9, 233983, nil, nil, nil, 3, nil, DBM_CORE_L.MAGIC_ICON)
|
||
|
|
local timerSuffocatingDarkCD = mod:NewCDTimer(24, 233894, nil, nil, nil, 3)
|
||
|
|
local timerTormentingBurstCD = mod:NewCDCountTimer(17.0, 234015, nil, nil, nil, 2)
|
||
|
|
local timerFelSquallCD = mod:NewCDCountTimer(45.7, 235230, nil, nil, nil, 2)
|
||
|
|
local timerFelSquall = mod:NewBuffActiveTimer(15, 235230, nil, nil, nil, 2)
|
||
|
|
|
||
|
|
local berserkTimer = mod:NewBerserkTimer(720)--482 in log, rounding to 8 even for now
|
||
|
|
|
||
|
|
mod:AddSetIconOption("SetIconOnQuills", 233431, true)
|
||
|
|
mod:AddSetIconOption("SetIconOnAnguish", 233983, true)
|
||
|
|
mod:AddInfoFrameOption(233104, true)
|
||
|
|
mod:AddRangeFrameOption(8, 233983)
|
||
|
|
|
||
|
|
mod.vb.burstCount = 0
|
||
|
|
mod.vb.scytheCount = 0
|
||
|
|
mod.vb.pangCount = 0
|
||
|
|
mod.vb.anguishIcon = 1
|
||
|
|
mod.vb.SoulsRemaining = 0
|
||
|
|
mod.vb.squallCount = 0
|
||
|
|
mod.vb.BonesawCount = 0
|
||
|
|
|
||
|
|
local function updateAllAtriganTimers(self, ICD, ignoreBoneSaw)
|
||
|
|
DBM:Debug("updateAllAtriganTimers running", 3)
|
||
|
|
if timerScytheSweepCD:GetRemaining(self.vb.scytheCount+1) < ICD then--4
|
||
|
|
local elapsed, total = timerScytheSweepCD:GetTime(self.vb.scytheCount+1)
|
||
|
|
local extend = ICD - (total-elapsed)
|
||
|
|
DBM:Debug("timerScytheSweepCD extended by: "..extend, 2)
|
||
|
|
timerScytheSweepCD:Stop()
|
||
|
|
timerScytheSweepCD:Update(elapsed, total+extend, self.vb.scytheCount+1)
|
||
|
|
end
|
||
|
|
if timerCalcifiedQuillsCD:GetRemaining() < ICD then--5
|
||
|
|
local elapsed, total = timerCalcifiedQuillsCD:GetTime()
|
||
|
|
local extend = ICD - (total-elapsed)
|
||
|
|
DBM:Debug("timerCalcifiedQuillsCD extended by: "..extend, 2)
|
||
|
|
timerCalcifiedQuillsCD:Stop()
|
||
|
|
timerCalcifiedQuillsCD:Update(elapsed, total+extend)
|
||
|
|
end
|
||
|
|
if not ignoreBoneSaw and timerBoneSawCD:GetRemaining(self.vb.BonesawCount+1) < ICD then--16
|
||
|
|
local elapsed, total = timerBoneSawCD:GetTime(self.vb.BonesawCount+1)
|
||
|
|
local extend = ICD - (total-elapsed)
|
||
|
|
DBM:Debug("timerBoneSawCD extended by: "..extend, 2)
|
||
|
|
timerBoneSawCD:Stop()
|
||
|
|
timerBoneSawCD:Update(elapsed, total+extend, self.vb.BonesawCount+1)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function updateAllBelacTimers(self, ICD, ignoreFelSquall)
|
||
|
|
DBM:Debug("updateAllBelacTimers running", 3)
|
||
|
|
local anguishRemaining = timerEchoingAnguishCD:GetRemaining()
|
||
|
|
if anguishRemaining ~= 0 and anguishRemaining < ICD then--2 (Cast START)
|
||
|
|
local elapsed, total = timerEchoingAnguishCD:GetTime()
|
||
|
|
local extend = ICD - (total-elapsed)
|
||
|
|
DBM:Debug("timerEchoingAnguishCD extended by: "..extend, 2)
|
||
|
|
timerEchoingAnguishCD:Stop()
|
||
|
|
timerEchoingAnguishCD:Update(elapsed, total+extend)
|
||
|
|
end
|
||
|
|
local suffocatingRemaining = timerSuffocatingDarkCD:GetRemaining()
|
||
|
|
if suffocatingRemaining ~= 0 and suffocatingRemaining < ICD then--No extend if dark is the cast
|
||
|
|
local elapsed, total = timerSuffocatingDarkCD:GetTime()
|
||
|
|
local extend = ICD - (total-elapsed)
|
||
|
|
DBM:Debug("timerSuffocatingDarkCD extended by: "..extend, 2)
|
||
|
|
timerSuffocatingDarkCD:Stop()
|
||
|
|
timerSuffocatingDarkCD:Update(elapsed, total+extend)
|
||
|
|
end
|
||
|
|
local tormentingRemaining = timerTormentingBurstCD:GetRemaining(self.vb.burstCount+1)
|
||
|
|
if tormentingRemaining ~= 0 and tormentingRemaining < ICD then--2 (Cast Start)
|
||
|
|
local elapsed, total = timerTormentingBurstCD:GetTime(self.vb.burstCount+1)
|
||
|
|
local extend = ICD - (total-elapsed)
|
||
|
|
DBM:Debug("timerTormentingBurstCD extended by: "..extend, 2)
|
||
|
|
timerTormentingBurstCD:Stop()
|
||
|
|
timerTormentingBurstCD:Update(elapsed, total+extend, self.vb.burstCount+1)
|
||
|
|
end
|
||
|
|
if not ignoreFelSquall and timerFelSquallCD:GetRemaining(self.vb.squallCount+1) < ICD then--16
|
||
|
|
local elapsed, total = timerFelSquallCD:GetTime(self.vb.squallCount+1)
|
||
|
|
local extend = ICD - (total-elapsed)
|
||
|
|
DBM:Debug("timerFelSquallCD extended by: "..extend, 2)
|
||
|
|
timerFelSquallCD:Stop()
|
||
|
|
timerFelSquallCD:Update(elapsed, total+extend, self.vb.squallCount+1)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:OnCombatStart(delay)
|
||
|
|
self.vb.burstCount = 0
|
||
|
|
self.vb.scytheCount = 0
|
||
|
|
self.vb.pangCount = 0
|
||
|
|
self.vb.anguishIcon = 1
|
||
|
|
self.vb.SoulsRemaining = 0
|
||
|
|
self.vb.squallCount = 0
|
||
|
|
self.vb.BonesawCount = 0
|
||
|
|
timerScytheSweepCD:Start(5.2-delay, 1)
|
||
|
|
if not self:IsEasy() then
|
||
|
|
timerCalcifiedQuillsCD:Start(8.5-delay)--8.5-11
|
||
|
|
end
|
||
|
|
timerBoneSawCD:Start(64.5-delay, 1)
|
||
|
|
-- timerEchoingAnguishCD:Start(1-delay)--6-20
|
||
|
|
-- timerSuffocatingDarkCD:Start(1-delay)--13-48
|
||
|
|
-- timerTormentingBurstCD:Start(1-delay, 1)--8-20
|
||
|
|
timerFelSquallCD:Start(35-delay, 1)--Always same, at least
|
||
|
|
if self.Options.InfoFrame then
|
||
|
|
DBM.InfoFrame:SetHeader(DBM:GetSpellInfo(233104))
|
||
|
|
DBM.InfoFrame:Show(8, "playerpower", 5, ALTERNATE_POWER_INDEX)
|
||
|
|
end
|
||
|
|
--https://www.warcraftlogs.com/reports/JgyrYdDCB63kx8Tb#fight=38&type=summary&pins=2%24Off%24%23244F4B%24expression%24ability.id%20%3D%20248671&view=events
|
||
|
|
if not self:IsLFR() then
|
||
|
|
berserkTimer:Start(720-delay)--482 technically but 480 sounds better
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:OnCombatEnd()
|
||
|
|
if self.Options.RangeFrame then
|
||
|
|
DBM.RangeCheck:Hide()
|
||
|
|
end
|
||
|
|
if self.Options.InfoFrame then
|
||
|
|
DBM.InfoFrame:Hide()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_CAST_START(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 233426 then
|
||
|
|
self.vb.scytheCount = self.vb.scytheCount + 1
|
||
|
|
specWarnScytheSweep:Show()
|
||
|
|
specWarnScytheSweep:Play("shockwave")
|
||
|
|
timerScytheSweepCD:Start(nil, self.vb.scytheCount+1)--23 unless affected by something
|
||
|
|
updateAllAtriganTimers(self, 4)
|
||
|
|
elseif spellId == 234015 then
|
||
|
|
self.vb.burstCount = self.vb.burstCount + 1
|
||
|
|
specWarnTormentingBurst:Show(self.vb.burstCount)
|
||
|
|
specWarnTormentingBurst:Play("aesoon")
|
||
|
|
timerTormentingBurstCD:Start(nil, self.vb.burstCount+1)
|
||
|
|
updateAllBelacTimers(self, 2)
|
||
|
|
elseif spellId == 239401 then
|
||
|
|
self.vb.pangCount = self.vb.pangCount + 1
|
||
|
|
if self.vb.pangCount == 4 then
|
||
|
|
self.vb.pangCount = 1
|
||
|
|
end
|
||
|
|
if self:CheckInterruptFilter(args.sourceGUID) then
|
||
|
|
local kickCount = self.vb.pangCount
|
||
|
|
specWarnPangsofGuilt:Show(args.sourceName, kickCount)
|
||
|
|
if kickCount == 1 then
|
||
|
|
specWarnPangsofGuilt:Play("kick1r")
|
||
|
|
elseif kickCount == 2 then
|
||
|
|
specWarnPangsofGuilt:Play("kick2r")
|
||
|
|
elseif kickCount == 3 then
|
||
|
|
specWarnPangsofGuilt:Play("kick3r")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif spellId == 233983 then
|
||
|
|
self.vb.anguishIcon = 1
|
||
|
|
updateAllBelacTimers(self, 2)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 233431 then
|
||
|
|
timerCalcifiedQuillsCD:Start()
|
||
|
|
updateAllAtriganTimers(self, 5)
|
||
|
|
elseif spellId == 233983 then
|
||
|
|
timerEchoingAnguishCD:Start()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_AURA_APPLIED(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 233441 then
|
||
|
|
self.vb.BonesawCount = self.vb.BonesawCount + 1
|
||
|
|
--Redundant warnings if still on wrong boss (or tank)
|
||
|
|
if UnitGUID("target") == args.sourceGUID then
|
||
|
|
specWarnBoneSawMelee:Show()
|
||
|
|
specWarnBoneSawEveryoneElse:Show(args.sourceName)
|
||
|
|
if self:IsMelee() then
|
||
|
|
specWarnBoneSawMelee:Play("runout")
|
||
|
|
end
|
||
|
|
specWarnBoneSawEveryoneElse:ScheduleVoice(1, "stopattack")
|
||
|
|
end
|
||
|
|
timerBoneSaw:Start(nil, self.vb.BonesawCount+1)
|
||
|
|
updateAllAtriganTimers(self, 16, true)
|
||
|
|
for i = 1, 2 do
|
||
|
|
local bossUnitID = "boss"..i
|
||
|
|
if UnitExists(bossUnitID) and UnitGUID(bossUnitID) == args.sourceGUID and self:IsTanking("player", bossUnitID, nil, true) then--We are highest threat target
|
||
|
|
specWarnBoneSawMelee:Schedule(2, "keepmove")--The active tank doesn't just run out, they keep kiting
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif spellId == 235230 then
|
||
|
|
self.vb.squallCount = self.vb.squallCount + 1
|
||
|
|
--Redundant warnings if still on wrong boss (or tank)
|
||
|
|
if UnitGUID("target") == args.sourceGUID then
|
||
|
|
specWarnFelSquallMelee:Show()
|
||
|
|
specWarnFelSquallEveryoneElse:Show(args.sourceName)
|
||
|
|
if self:IsMelee() then
|
||
|
|
specWarnFelSquallMelee:Play("runout")
|
||
|
|
end
|
||
|
|
specWarnFelSquallEveryoneElse:ScheduleVoice(1, "stopattack")
|
||
|
|
end
|
||
|
|
timerFelSquall:Start(nil, self.vb.squallCount+1)
|
||
|
|
updateAllBelacTimers(self, 16, true)
|
||
|
|
elseif spellId == 233983 then
|
||
|
|
warnEchoingAnguish:CombinedShow(0.3, args.destName)
|
||
|
|
local currentIcon = self.vb.anguishIcon
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnEchoingAnguish:Show()
|
||
|
|
specWarnEchoingAnguish:Play("runout")
|
||
|
|
yellEchoingAnguish:Yell(currentIcon, args.spellName, currentIcon)
|
||
|
|
if self.Options.RangeFrame then
|
||
|
|
DBM.RangeCheck:Show(8)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if self.Options.SetIconOnAnguish then
|
||
|
|
self:SetIcon(args.destName, currentIcon)
|
||
|
|
end
|
||
|
|
self.vb.anguishIcon = self.vb.anguishIcon + 1
|
||
|
|
elseif spellId == 233431 then
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnCalcifiedQuills:Show()
|
||
|
|
specWarnCalcifiedQuills:Play("runout")
|
||
|
|
yellCalcifiedQuills:Yell()
|
||
|
|
else
|
||
|
|
warnQuills:Show(args.destName)
|
||
|
|
end
|
||
|
|
if self.Options.SetIconOnQuills then
|
||
|
|
self:SetIcon(args.destName, 5)
|
||
|
|
end
|
||
|
|
elseif spellId == 208802 then
|
||
|
|
local amount = args.amount or 1
|
||
|
|
if args:IsPlayer() and amount >= 10 then
|
||
|
|
specWarnSoulCorruption:Show(amount)
|
||
|
|
specWarnSoulCorruption:Play("stackhigh")
|
||
|
|
end
|
||
|
|
elseif spellId == 236283 then
|
||
|
|
if args:IsPlayer() then
|
||
|
|
warnPrison:Show()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
||
|
|
|
||
|
|
function mod:SPELL_AURA_REMOVED(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 233441 then--Bone Saw
|
||
|
|
specWarnAttackAtrigan:Show()
|
||
|
|
specWarnAttackAtrigan:Play("targetchange")
|
||
|
|
timerBoneSaw:Stop()
|
||
|
|
timerBoneSawCD:Start()
|
||
|
|
elseif spellId == 233983 then
|
||
|
|
if args:IsPlayer() then
|
||
|
|
if self.Options.RangeFrame then
|
||
|
|
DBM.RangeCheck:Hide()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if self.Options.SetIconOnAnguish then
|
||
|
|
self:SetIcon(args.destName, 0)
|
||
|
|
end
|
||
|
|
elseif spellId == 235230 then
|
||
|
|
specWarnAttackBelac:Show()
|
||
|
|
specWarnAttackBelac:Play("targetchange")
|
||
|
|
timerFelSquallCD:Start()
|
||
|
|
elseif spellId == 233431 then
|
||
|
|
if self.Options.SetIconOnQuills then
|
||
|
|
self:SetIcon(args.destName, 0)
|
||
|
|
end
|
||
|
|
elseif spellId == 236283 then--Prison
|
||
|
|
self.vb.SoulsRemaining = self.vb.SoulsRemaining + 1
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
local warned = false
|
||
|
|
function mod:UNIT_POWER_FREQUENT(uId, type)
|
||
|
|
if type == "ALTERNATE" then
|
||
|
|
local playerPower = UnitPower("player", 10)
|
||
|
|
if not warned and playerPower >= 75 then
|
||
|
|
warned = true
|
||
|
|
specWarnTorment:Show(playerPower)
|
||
|
|
specWarnTorment:Play("stackhigh")
|
||
|
|
elseif warned and playerPower < 30 then
|
||
|
|
warned = false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:UNIT_DIED(args)
|
||
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
||
|
|
if cid == 117957 then--Tormented Soul
|
||
|
|
self.vb.SoulsRemaining = self.vb.SoulsRemaining - 1
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, bfaSpellId, _, legacySpellId)
|
||
|
|
local spellId = legacySpellId or bfaSpellId
|
||
|
|
if spellId == 233895 then
|
||
|
|
warnSuffocatingDark:Show()
|
||
|
|
timerSuffocatingDarkCD:Start()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|