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.

848 lines
35 KiB

local mod = DBM:NewMod(1737, "DBM-Raids-Legion", 3, 786)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20240629024612")
mod:SetCreatureID(104154)--The Demon Within (111022)
mod:SetEncounterID(1866)
mod:SetUsedIcons(1, 2, 3, 4, 5, 6)
mod:SetHotfixNoticeRev(16172)
mod.respawnTime = 29
mod:RegisterCombat("combat")
mod:SetWipeTime(30)
mod:RegisterEventsInCombat(
"SPELL_CAST_START 206219 206220 206514 206675 206840 207938 104534 208545 209270 211152 208672 206744 206883 206221 206222 221783 211439 220957 227008 221408 221486",
"SPELL_CAST_SUCCESS 206222 206221 221783 212258 227008 221336 221486",
"SPELL_AURA_APPLIED 206219 206220 209011 206354 206384 209086 208903 211162 221891 208802 221606 221603 221785 221784 212686 227427 206516 206847 206983 206458 227009 206310",
"SPELL_AURA_APPLIED_DOSE 211162 208802",
"SPELL_AURA_REMOVED 209011 206354 206384 209086 221603 221785 221784 212686 221606 206847 206458 206310",
-- "SPELL_DAMAGE",
-- "SPELL_MISSED",
"UNIT_DIED",
"UNIT_SPELLCAST_SUCCEEDED boss1 boss2 boss3 boss4 boss5"
)
mod:RegisterEvents(
"CHAT_MSG_MONSTER_YELL"
)
--[[
(ability.id = 206219 or ability.id = 206220 or ability.id = 206514 or ability.id = 206675 or ability.id = 206840 or ability.id = 207938 or ability.id = 206883 or ability.id = 208545 or ability.id = 209270 or ability.id = 211152 or ability.id = 208672 or ability.id = 167819 or ability.id = 206939 or ability.id = 206744) and type = "begincast"
or (ability.id = 206222 or ability.id = 206221 or ability.id = 221783 or ability.id = 212258) and type = "cast"
or (ability.id = 227427 or ability.id = 206516) and type = "applybuff"
or (ability.id = 227427 or ability.id = 206516) and type = "removebuff"
--]]
local Kurazmal = DBM:EJ_GetSectionInfo(13121)
local Vethriz = DBM:EJ_GetSectionInfo(13124)
local Dzorykx = DBM:EJ_GetSectionInfo(13129)
--Stage One: The Council of Elders
----Gul'dan
local warnLiquidHellfire = mod:NewCastAnnounce(206219, 3)
----Inquisitor Vethriz
local warnGazeofVethriz = mod:NewSpellAnnounce(206840, 3)
local warnShadowblink = mod:NewSpellAnnounce(207938, 2)
----D'zorykx the Trapper
local warnSoulVortex = mod:NewTargetAnnounce(206883, 3)
local warnAnguishedSpirits = mod:NewSpellAnnounce(208545, 2)
--Stage Two: The Ritual of Aman'thul
local warnPhase2 = mod:NewPhaseAnnounce(2, 2, nil, nil, nil, nil, nil, 2)
local warnBondsofFel = mod:NewTargetAnnounce(206222, 3)
local warnEmpBondsofFel = mod:NewTargetAnnounce(209086, 4)
--Stage Three: The Master's Power
local warnPhase3Soon = mod:NewPrePhaseAnnounce(3, 2)
local warnPhase3 = mod:NewPhaseAnnounce(3, 2, nil, nil, nil, nil, nil, 2)
local warnSoulSiphon = mod:NewTargetAnnounce(221891, 3, nil, "Healer")
local warnFlamesofSargeras = mod:NewTargetAnnounce(221606, 4)
--Mythic Only
local warnParasiticWound = mod:NewTargetAnnounce(206847, 3)
local warnShadowyGaze = mod:NewTargetAnnounce(206983, 3)
local warnWounded = mod:NewSpellAnnounce(227009, 1)
--Stage One: The Council of Elders
----Gul'dan
local specWarnLiquidHellfire = mod:NewSpecialWarningDodge(206219, nil, nil, nil, 1, 2)
local specWarnFelEfflux = mod:NewSpecialWarningDodge(206514, nil, nil, nil, 1, 12)
----Fel Lord Kuraz'mal
local specWarnShatterEssence = mod:NewSpecialWarningDefensive(206675, nil, nil, nil, 3, 2)
local specWarnFelObelisk = mod:NewSpecialWarningDodge(229945, nil, nil, nil, 1, 2)
----D'zorykx the Trapper
local specWarnSoulVortex = mod:NewSpecialWarningSpell(206883, nil, nil, nil, 2, 2)
local yellSoulVortex = mod:NewYell(206883)
--Stage Two: The Ritual of Aman'thul
local specWarnBondsofFel = mod:NewSpecialWarningYou(206222, nil, nil, nil, 1, 2)
local specWarnBondsofFelTank = mod:NewSpecialWarningTaunt(206222, nil, nil, nil, 1, 2)
local yellBondsofFel = mod:NewPosYell(206222)
local specWarnHandofGuldan = mod:NewSpecialWarningSwitch(212258, "-Healer", nil, nil, 1, 2)
local specWarnEyeofGuldan = mod:NewSpecialWarningSwitchCount(209270, "Dps", nil, nil, 1, 2)
local specWarnCarrionWave = mod:NewSpecialWarningInterrupt(208672, "HasInterrupt", nil, nil, 1, 2)
--Stage Three: The Master's Power
local specWarnStormOfDestroyer = mod:NewSpecialWarningDodge(161121, nil, nil, nil, 2, 2)
local specWarnSoulCorrosion = mod:NewSpecialWarningStack(208802, nil, 5, nil, nil, 1, 6)--stack guessed
local specWarnBlackHarvest = mod:NewSpecialWarningCount(206744, nil, nil, nil, 2, 2)
local specWarnFlamesOfSargeras = mod:NewSpecialWarningMoveAway(221606, nil, nil, nil, 3, 2)
local yellFlamesofSargeras = mod:NewPosYell(221606, 15643)
local specWarnFlamesOfSargerasTank = mod:NewSpecialWarningTaunt(221606, nil, nil, nil, 1, 2)
--Mythic Only
local specWarnWilloftheDemonWithin = mod:NewSpecialWarningSpell(211439, nil, nil, nil, 1, 2)
local specWarnParasiticWound = mod:NewSpecialWarningMoveAway(206847, nil, nil, nil, 3, 2)
local yellParasiticWound = mod:NewYell(206847, 36469)
local yellParasiticWoundFades = mod:NewFadesYell(206847, 36469)
--local specWarnShearedSoul = mod:NewSpecialWarningYou(206458, nil, nil, nil, 1)
local specWarnSoulsever = mod:NewSpecialWarningCount(220957, nil, nil, nil, 3, 2)--Needs voice, but what?
local specWarnVisionsofDarkTitan = mod:NewSpecialWarningMoveTo(227008, nil, nil, nil, 3, 7)
local specWarnSummonNightorb = mod:NewSpecialWarningCount(227283, "Dps", nil, nil, 1, 2)
--Shard
local specWarnManifestAzzinoth = mod:NewSpecialWarningSwitchCount(221149, "-Healer", nil, nil, 1, 2)
local specWarnBulwarkofAzzinoth = mod:NewSpecialWarningSpell(221408, nil, nil, nil, 1)--Needs voice, but what?
local specWarnPurifiedEssence = mod:NewSpecialWarningMoveTo(221486, nil, nil, nil, 3, 7)
--Stage One: The Council of Elders
----Gul'dan
local timerRP = mod:NewRPTimer(78)
mod:AddTimerLine(SCENARIO_STAGE:format(1))
local timerLiquidHellfireCD = mod:NewNextCountTimer(25, 206219, nil, nil, nil, 3)
local timerFelEffluxCD = mod:NewCDCountTimer(10.7, 206514, nil, nil, nil, 3)--10.7-13.5 (14-15 on normal)
----Fel Lord Kuraz'mal
mod:AddTimerLine(Kurazmal)
local timerFelLordKurazCD = mod:NewCastTimer(16, "ej13121", nil, nil, nil, 1, 212258, nil, nil, mod:IsTank() and 2 or nil, 4)
local timerShatterEssenceCD = mod:NewCDTimer(54, 206675, nil, "Tank", nil, 5, nil, DBM_COMMON_L.DEADLY_ICON..DBM_COMMON_L.TANK_ICON)
local timerFelObeliskCD = mod:NewCDTimer(16, 206841, nil, nil, nil, 3)
----Inquisitor Vethriz
mod:AddTimerLine(Vethriz)
local timerVethrizCD = mod:NewCastTimer(25, "ej13124", nil, nil, nil, 1, 212258, nil, nil, mod:IsTank() and 2 or nil, 4)
local timerGazeofVethrizCD = mod:NewCDTimer(4.7, 206840, nil, nil, nil, 3)
----D'zorykx the Trapper
mod:AddTimerLine(Dzorykx)
local timerDzorykxCD = mod:NewCastTimer(35, "ej13129", nil, nil, nil, 1, 212258, nil, nil, mod:IsTank() and 2 or nil, 4)
local timerSoulVortexCD = mod:NewCDTimer(21, 206883, nil, nil, nil, 3)--34-36
--Stage Two: The Ritual of Aman'thul
mod:AddTimerLine(SCENARIO_STAGE:format(2))
local timerTransition = mod:NewStageTimer(19)
local timerHandofGuldanCD = mod:NewNextCountTimer(58.5, 212258, nil, nil, nil, 1, nil, nil, nil, mod:IsTank() and 2 or nil, 4)
local timerBondsofFelCD = mod:NewNextCountTimer(50, 206222, nil, nil, nil, 3, nil, nil, nil, 1, 4)
local timerEyeofGuldanCD = mod:NewNextCountTimer(60, 209270, nil, nil, nil, 1, nil, nil, nil, not mod:IsTank() and 2 or nil, 4)
--Stage Three: The Master's Power
mod:AddTimerLine(SCENARIO_STAGE:format(3))
local timerFlamesofSargerasCD = mod:NewNextCountTimer("d58.5", 221783, 15643, nil, nil, 3)
local timerStormOfDestroyerCD = mod:NewNextCountTimer(16, 161121, 196871, nil, nil, 3)
local timerWellOfSouls = mod:NewCastTimer(16, 206939, nil, nil, nil, 5)
local timerBlackHarvestCD = mod:NewNextCountTimer(83, 206744, nil, nil, nil, 2, nil, nil, nil, 3, 4)
--Mythic Only
mod:AddTimerLine(ENCOUNTER_JOURNAL_SECTION_FLAG12)
local timerWindsCD = mod:NewCDCountTimer(39, 199446, nil, nil, nil, 2)
local timerWilloftheDemonWithin = mod:NewCastTimer(43, 211439, nil, nil, nil, 2)
local timerParasiticWoundCD = mod:NewCDTimer(36, 206847, nil, nil, nil, 3)
local timerWounded = mod:NewBuffActiveTimer(36, 227009, nil, nil, nil, 6)
local timerSoulSeverCD = mod:NewCDCountTimer(36, 220957, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON, nil, mod:IsTank() and 2 or nil, 6)
local timerVisionsofDarkTitan = mod:NewCastTimer(9, 227008, nil, nil, nil, 2)
local timerVisionsofDarkTitanCD = mod:NewCDCountTimer(9, 227008, nil, nil, nil, 2, nil, nil, nil, 1, 6)
local timerFlameCrashCD = mod:NewCDCountTimer(20, 227071, nil, nil, nil, 3, nil, nil, nil, mod:IsTank() and 3 or nil, 6)
local timerSummonNightorbCD = mod:NewCDCountTimer(10.9, 227283, nil, nil, nil, 1, 225133)
--Shard
mod:AddTimerLine(DBM_COMMON_L.ADDS)
local timerManifestAzzinothCD = mod:NewCDCountTimer(10.9, 221149, nil, nil, nil, 1, 236237)
local timerChaosSeedCD = mod:NewCDTimer(10.9, 221336, nil, nil, nil, 3)
local timerBulwarkofAzzinothCD = mod:NewCDTimer(10.9, 221408, nil, nil, nil, 6)
local timerPurifiedEssence = mod:NewCastTimer(4, 221486, nil, nil, nil, 2)
mod:AddRangeFrameOption(8, 221606)
mod:AddSetIconOption("SetIconOnBondsOfFlames", 221783, true)
mod:AddSetIconOption("SetIconOnBondsOfFel", 206222, true)
mod:AddInfoFrameOption(206310)
mod.vb.phase = 1
mod.vb.addsDied = 0
mod.vb.liquidHellfireCast = 0
mod.vb.felEffluxCast = 0
mod.vb.handofGuldanCast = 0
mod.vb.stormCast = 0
mod.vb.blackHarvestCast = 0
mod.vb.eyeCast = 0
mod.vb.flamesSargCast = 0
mod.vb.flamesTargets = 0
mod.vb.bondsofFelCast = 0
--Mythic only Phase
mod.vb.obeliskCastCount = 0
mod.vb.severCastCount = 0
mod.vb.crashCastCount = 0
mod.vb.orbCastCount = 0
mod.vb.visionCastCount = 0
mod.vb.azzCount = 0
--Mythic only Phase end
local felEffluxTimers = {11.0, 14.0, 18.5, 12.0, 12.2, 12.0}
local felEffluxTimersEasy = {11.0, 14.0, 19.9, 15.6, 16.8, 15.9, 15.8}
local handofGuldanTimers = {14.5, 48.9, 138.8}
--local mythicHandofGuldanTimers = {17, 165, 0, 0, 0}
local stormTimersEasy = {94, 78.6, 70.0, 87}
local stormTimers = {84.1, 68.7, 61.3, 76.5}
local stormTimersMythic = {72.6, 57.9, 51.6, 64.7, 57.4}--Credit to JustWait
local blackHarvestTimersEasy = {63, 82.9, 100.0}
local blackHarvestTimers = {64.1, 72.5, 87.5}
local blackHarvestTimersMythic = {55.7, 61.0, 75.3, 86.8}--Credit to JustWait
--local phase2Eyes = {29, 53.3, 53.4, 53.3, 53.3, 53.3, 66}--Not used, not needed if only 1 is different. need longer pulls to see what happens after 66
--local p1EyesMythic = {26, 48, 48}
local p3EmpoweredEyeTimersEasy = {42.5, 71.5, 71.4, 28.6, 114}--114 is guessed on the 1/8th formula
local p3EmpoweredEyeTimers = {39.1, 62.5, 62.5, 25, 100}--100 is confirmed
local p3EmpoweredEyeTimersMythic = {35.1, 52.6, 53.3, 20.4, 84.2, 52.6}--Credit to JustWait
local bondsIcons = {}
local flamesIcons = {}
local timeStopBuff, parasiteName = DBM:GetSpellName(206310), DBM:GetSpellName(206847)
local function upValueCapsAreStupid(self)
self.vb.phase = 3
timerWindsCD:Stop()
self:SetBossHPInfoToHighest()
specWarnWilloftheDemonWithin:Show()
specWarnWilloftheDemonWithin:Play("carefly")
timerWilloftheDemonWithin:Update(39, 43)
self.vb.severCastCount = 0
self.vb.crashCastCount = 0
self.vb.orbCastCount = 0
self.vb.visionCastCount = 0
self.vb.azzCount = 0
timerParasiticWoundCD:Start(8.3)
timerSoulSeverCD:Start(19.3, 1)
timerManifestAzzinothCD:Start(26.3, 1)
timerFlameCrashCD:Start(29.3, 1)
timerSummonNightorbCD:Start(39.3, 1)
timerVisionsofDarkTitanCD:Start(95.1, 1)
end
function mod:OnCombatStart(delay)
self.vb.phase = 1
self.vb.addsDied = 0
self.vb.liquidHellfireCast = 0
self.vb.felEffluxCast = 0
self.vb.handofGuldanCast = 0
self.vb.stormCast = 0
self.vb.blackHarvestCast = 0
self.vb.eyeCast = 0
self.vb.flamesSargCast = 0
self.vb.flamesTargets = 0
self.vb.bondsofFelCast = 0
self.vb.obeliskCastCount = 0
table.wipe(bondsIcons)
table.wipe(flamesIcons)
if self:IsMythic() then
self:SetCreatureID(104154, 111022)
timerBondsofFelCD:Start(self:IsTank() and 6.4 or 8.4, 1)
timerDzorykxCD:Start(17-delay)
timerEyeofGuldanCD:Start(26.1-delay, 1)
timerLiquidHellfireCD:Start(36-delay, 1)
else
self:SetCreatureID(104154)
timerLiquidHellfireCD:Start(2-delay, 1)
timerFelEffluxCD:Start(11-delay, 1)
timerFelLordKurazCD:Start(11-delay)
timerVethrizCD:Start(25-delay)
timerDzorykxCD:Start(35-delay)
self:SetCreatureID(104154)
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:OnTimerRecovery()
if self:IsMythic() then
self:SetCreatureID(104154, 111022)
else
self:SetCreatureID(104154)
end
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 206219 or spellId == 206220 then
self.vb.liquidHellfireCast = self.vb.liquidHellfireCast + 1
specWarnLiquidHellfire:Show()
specWarnLiquidHellfire:Play("watchstep")
if self:IsMythic() or self.vb.phase >= 2 then
local longTimer, shortTimer, mediumTimer
if self:IsMythic() then
longTimer, shortTimer, mediumTimer = 66, 28.9, 33
elseif self:IsHeroic() then
longTimer, shortTimer, mediumTimer = 74, 31.6, 36
elseif self:IsNormal() then--Normal
longTimer, shortTimer, mediumTimer = 84, 36, 41
else
longTimer, shortTimer, mediumTimer = 88, 38.6, 44
end
if self.vb.liquidHellfireCast == 4 or self.vb.liquidHellfireCast == 6 then
timerLiquidHellfireCD:Start(longTimer, self.vb.liquidHellfireCast+1)
elseif self.vb.liquidHellfireCast == 7 then--TODO, if a longer phase 2 than 7 casts, and continue to see diff timers than 36, build a table
timerLiquidHellfireCD:Start(shortTimer, self.vb.liquidHellfireCast+1)
else
timerLiquidHellfireCD:Start(mediumTimer, self.vb.liquidHellfireCast+1)
end
elseif self.vb.phase == 1.5 then
if self.vb.liquidHellfireCast == 2 or self:IsHeroic() then
timerLiquidHellfireCD:Start(23.8, self.vb.liquidHellfireCast+1)
else--On LFR/Normal the rest are 32 in phase 1.5
timerLiquidHellfireCD:Start(32.5, self.vb.liquidHellfireCast+1)
end
else--Phase 1
timerLiquidHellfireCD:Start(15, self.vb.liquidHellfireCast+1)
end
elseif spellId == 206514 then
self.vb.felEffluxCast = self.vb.felEffluxCast + 1
specWarnFelEfflux:Show()
specWarnFelEfflux:Play("flamejet")
local timer = self:IsEasy() and felEffluxTimersEasy[self.vb.felEffluxCast+1] or felEffluxTimers[self.vb.felEffluxCast+1] or 12
timerFelEffluxCD:Start(timer, self.vb.felEffluxCast+1)
elseif spellId == 206675 then
if self:IsMythic() then
timerShatterEssenceCD:Start(21)
else
timerShatterEssenceCD:Start()
end
local targetName, uId, bossuid = self:GetBossTarget(104537)--Add true if it has a boss unitID
if self:IsTanking("player", bossuid, nil, true) then--Player is current target
specWarnShatterEssence:Show()
specWarnShatterEssence:Play("defensive")
end
elseif spellId == 206840 then
warnGazeofVethriz:Show()
timerGazeofVethrizCD:Start()
elseif spellId == 207938 then
warnShadowblink:Show()
--timerShadowBlinkCD:Start()
elseif spellId == 206883 then
if self:IsMythic() then--On mythic it's just tossed into center of room, not at tank
specWarnSoulVortex:Show()
specWarnSoulVortex:Play("watchstep")
timerSoulVortexCD:Start(21)
else
local targetName, uId, bossuid = self:GetBossTarget(104534, true)
if self:IsTanking("player", bossuid, nil, true) then--Player is current target
specWarnSoulVortex:Show()
specWarnSoulVortex:Play("runout")
yellSoulVortex:Yell()
elseif targetName then
warnSoulVortex:Show(targetName)
end
end
elseif spellId == 208545 then
warnAnguishedSpirits:Show()
elseif spellId == 209270 or spellId == 211152 then
self.vb.eyeCast = self.vb.eyeCast + 1
specWarnEyeofGuldan:Show(self.vb.eyeCast)
specWarnEyeofGuldan:Play("killmob")
if self:IsMythic() and self.vb.phase == 2 or self.vb.phase == 3 then
local timer = self:IsMythic() and p3EmpoweredEyeTimersMythic[self.vb.eyeCast+1] or self:IsEasy() and p3EmpoweredEyeTimersEasy[self.vb.eyeCast+1] or p3EmpoweredEyeTimers[self.vb.eyeCast+1]
if timer then
timerEyeofGuldanCD:Start(timer, self.vb.eyeCast+1)
end
else
local longTimer, shortTimer
if self:IsMythic() then
longTimer, shortTimer = 80, 48
elseif self:IsHeroic() then
longTimer, shortTimer = 66, 53
elseif self:IsNormal() then--Normal
longTimer, shortTimer = 75, 60
else--LFR
longTimer, shortTimer = 80, 64
end
if self.vb.eyeCast == 6 then
timerEyeofGuldanCD:Start(longTimer, self.vb.eyeCast+1)--An oddball cast
else
timerEyeofGuldanCD:Start(shortTimer, self.vb.eyeCast+1)
end
end
elseif spellId == 208672 then
if self:CheckInterruptFilter(args.sourceGUID, false, true) then
specWarnCarrionWave:Show(args.sourceName)
specWarnCarrionWave:Play("kickcast")
end
elseif spellId == 206744 then
self.vb.blackHarvestCast = self.vb.blackHarvestCast + 1
specWarnBlackHarvest:Show(self.vb.blackHarvestCast)
specWarnBlackHarvest:Play("aesoon")
local timer = self:IsMythic() and blackHarvestTimersMythic[self.vb.blackHarvestCast+1] or self:IsEasy() and blackHarvestTimersEasy[self.vb.blackHarvestCast+1] or blackHarvestTimers[self.vb.blackHarvestCast+1]
if timer then
timerBlackHarvestCD:Start(timer, self.vb.blackHarvestCast+1)
end
if self:IsMythic() then
if self.vb.blackHarvestCast == 2 then
timerWindsCD:Start(67, 3)
elseif self.vb.blackHarvestCast == 3 then
timerWindsCD:Start(75, 4)
end
end
elseif spellId == 206222 or spellId == 206221 then
table.wipe(bondsIcons)
if self:IsTanking("player", "boss1", nil, true) then
if spellId == 206221 then
specWarnBondsofFel:Play("carefly")
end
else
local targetName = UnitName("boss1target") or DBM_COMMON_L.UNKNOWN
if not UnitIsUnit("player", "boss1target") then--the very first bonds of fel, threat is broken and not available yet, so we need an additional filter
if self:AntiSpam(5, targetName) then
specWarnBondsofFelTank:Show(targetName)
specWarnBondsofFelTank:Play("tauntboss")
end
end
end
elseif spellId == 221783 then
table.wipe(flamesIcons)
self.vb.flamesTargets = 0
--Begin Mythic Only Stuff
elseif spellId == 211439 then--Will of the Demon Within
upValueCapsAreStupid(self)
elseif spellId == 220957 then
self.vb.severCastCount = self.vb.severCastCount + 1
local _, _, bossuid = self:GetBossTarget(111022, true)
if self:IsTanking("player", bossuid, nil, true) then
specWarnSoulsever:Show(self.vb.severCastCount)
specWarnSoulsever:Play("defensive")
end
if self.vb.severCastCount == 4 or self.vb.severCastCount == 7 then
timerSoulSeverCD:Start(50, self.vb.severCastCount+1)
else
timerSoulSeverCD:Start(20, self.vb.severCastCount+1)
end
elseif spellId == 227008 then
self.vb.visionCastCount = self.vb.visionCastCount+1
specWarnVisionsofDarkTitan:Show(timeStopBuff)
specWarnVisionsofDarkTitan:Play("movetimebubble")
timerVisionsofDarkTitan:Start()
if self.vb.visionCastCount ~= 3 then
if self.vb.visionCastCount == 2 then
timerVisionsofDarkTitanCD:Start(150)
else
timerVisionsofDarkTitanCD:Start(90)
end
end
if self.Options.InfoFrame then
DBM.InfoFrame:SetHeader(DBM_COMMON_L.NO_DEBUFF:format(timeStopBuff))
DBM.InfoFrame:Show(10, "playergooddebuff", timeStopBuff)
end
elseif spellId == 221408 then
specWarnBulwarkofAzzinoth:Show()
elseif spellId == 221486 and self:AntiSpam(5, 4) then
specWarnPurifiedEssence:Show(timeStopBuff)
specWarnPurifiedEssence:Play("movetimebubble")
timerPurifiedEssence:Start()
if self.Options.InfoFrame then
DBM.InfoFrame:SetHeader(DBM_COMMON_L.NO_DEBUFF:format(timeStopBuff))
DBM.InfoFrame:Show(10, "playergooddebuff", timeStopBuff)
end
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 206222 or spellId == 206221 then
self.vb.bondsofFelCast = self.vb.bondsofFelCast + 1
if self:IsMythic() then
local timer = self:IsTank() and 38 or 40
timerBondsofFelCD:Start(timer, self.vb.bondsofFelCast+1)
elseif self:IsHeroic() then
local timer = self:IsTank() and 42.4 or 44.4
timerBondsofFelCD:Start(timer, self.vb.bondsofFelCast+1)
elseif self:IsNormal() then
local timer = self:IsTank() and 48 or 50
timerBondsofFelCD:Start(timer, self.vb.bondsofFelCast+1)
else
local timer = self:IsTank() and 51 or 53
timerBondsofFelCD:Start(timer, self.vb.bondsofFelCast+1)
end
elseif spellId == 221783 and self:AntiSpam(35, 1) then
self.vb.flamesSargCast = self.vb.flamesSargCast + 1
if self:IsMythic() then
timerFlamesofSargerasCD:Start(6.3, (self.vb.flamesSargCast).."-"..2)
timerFlamesofSargerasCD:Start(13.6, (self.vb.flamesSargCast).."-"..3)
timerFlamesofSargerasCD:Start(45, (self.vb.flamesSargCast+1).."-"..1)
if self.vb.flamesSargCast == 2 then
timerWindsCD:Start(31, 2)
end
elseif self:IsHeroic() then
timerFlamesofSargerasCD:Start(7.7, (self.vb.flamesSargCast).."-"..2)
timerFlamesofSargerasCD:Start(16.4, (self.vb.flamesSargCast).."-"..3)
timerFlamesofSargerasCD:Start(50, (self.vb.flamesSargCast+1).."-"..1)--5-6 is 50, 1-5 is 51. For time being using a simple 50 timer
else--Normal, LFR?
timerFlamesofSargerasCD:Start(18.9, (self.vb.flamesSargCast).."-"..2)
timerFlamesofSargerasCD:Start(58.5, (self.vb.flamesSargCast+1).."-"..1)
end
elseif spellId == 212258 and (self:IsMythic() or self.vb.phase > 1.5) then--Ignore phase 1 adds with this cast
self.vb.handofGuldanCast = self.vb.handofGuldanCast + 1
specWarnHandofGuldan:Show()
specWarnHandofGuldan:Play("bigmob")
if self:IsMythic() then
if self.vb.handofGuldanCast == 1 then
timerFelLordKurazCD:Start(165)
end
else
local timer = handofGuldanTimers[self.vb.handofGuldanCast+1]
if timer then
timerHandofGuldanCD:Start(timer, self.vb.handofGuldanCast+1)
end
end
elseif spellId == 227008 then
if self.Options.InfoFrame then
DBM.InfoFrame:Hide()
end
elseif spellId == 221486 then
if self.Options.InfoFrame then
DBM.InfoFrame:Hide()
end
elseif spellId == 221336 then
timerChaosSeedCD:Start(10.5, args.sourceGUID)
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 209011 or spellId == 206354 or spellId == 206384 or spellId == 209086 then--206354/206366 unconfirmed on normal/heroic. LFR/Mythic?
local isPlayer = args:IsPlayer()
local name = args.destName
if not tContains(bondsIcons, name) then
bondsIcons[#bondsIcons+1] = name
end
local count = #bondsIcons
if spellId == 206384 or spellId == 209086 then
warnEmpBondsofFel:CombinedShow(0.5, name)
else
warnBondsofFel:CombinedShow(0.5, name)
end
if isPlayer then
specWarnBondsofFel:Show()
specWarnBondsofFel:Play("targetyou")
yellBondsofFel:Yell(count, count, count)
else
local uId = DBM:GetRaidUnitId(name)
if self:IsTanking(uId, "boss1") and not self:IsTanking("player", "boss1", nil, true) then
--secondary warning, in case first one didn't go through
if self:AntiSpam(5, name) then
specWarnBondsofFelTank:Show(name)
specWarnBondsofFelTank:Play("tauntboss")
end
end
end
if self.Options.SetIconOnBondsOfFel then
self:SetIcon(args.destName, count)
end
elseif spellId == 221891 then
warnSoulSiphon:CombinedShow(0.3, args.destName)
elseif spellId == 208802 then
local amount = args.amount or 1
if args:IsPlayer() and amount >= 5 then
specWarnSoulCorrosion:Show(amount)
specWarnSoulCorrosion:Play("stackhigh")
end
elseif spellId == 221606 then--Looks like the 3 second pre targeting debuff for flames of sargeras
if self:AntiSpam(35, 1) then
self.vb.flamesSargCast = self.vb.flamesSargCast + 1
if self:IsMythic() then
timerFlamesofSargerasCD:Start(6.3, (self.vb.flamesSargCast).."-"..2)
timerFlamesofSargerasCD:Start(13.6, (self.vb.flamesSargCast).."-"..3)
timerFlamesofSargerasCD:Start(45, (self.vb.flamesSargCast+1).."-"..1)
if self.vb.flamesSargCast == 2 then
timerWindsCD:Start(31, 2)
end
elseif self:IsHeroic() then
timerFlamesofSargerasCD:Start(7.7, (self.vb.flamesSargCast).."-"..2)
timerFlamesofSargerasCD:Start(16.4, (self.vb.flamesSargCast).."-"..3)
timerFlamesofSargerasCD:Start(50, (self.vb.flamesSargCast+1).."-"..1)--5-6 is 50, 1-5 is 51. For time being using a simple 50 timer
else--Normal, LFR
timerFlamesofSargerasCD:Start(18.9, (self.vb.flamesSargCast).."-"..2)
timerFlamesofSargerasCD:Start(58.5, (self.vb.flamesSargCast+1).."-"..1)
end
end
local name = args.destName
self.vb.flamesTargets = self.vb.flamesTargets + 1
if not tContains(flamesIcons, name) then
flamesIcons[#flamesIcons+1] = name
end
local count = #flamesIcons+3
warnFlamesofSargeras:CombinedShow(0.3, name)
if args:IsPlayer() then
specWarnFlamesOfSargeras:Show()
specWarnFlamesOfSargeras:Play("runout")
yellFlamesofSargeras:Yell(count, count, count)
else
local uId = DBM:GetRaidUnitId(name)
if self:IsTanking(uId, "boss1") then
specWarnFlamesOfSargerasTank:Show(name)
specWarnFlamesOfSargerasTank:Play("tauntboss")
end
end
if self.Options.SetIconOnBondsOfFlames and count < 9 then
self:SetIcon(args.destName, count)--Should start at icon 4 and go up from there (because icons 1-3 are used by bonds of fel)
end
elseif spellId == 221603 or spellId == 221785 or spellId == 221784 or spellId == 212686 then--4 different duration versions of Flames of sargeras?
if args:IsPlayer() then
if self.Options.RangeFrame then
DBM.RangeCheck:Show(8)
end
end
elseif spellId == 206516 then--The Eye of Aman'Thul (phase 1 buff)
self.vb.phase = 1.5
timerLiquidHellfireCD:Stop()
timerFelEffluxCD:Stop()
timerLiquidHellfireCD:Start(5, self.vb.liquidHellfireCast+1)
timerFelEffluxCD:Start(10, self.vb.felEffluxCast+1)
elseif spellId == 227427 then--The Eye of Aman'Thul (phase 3 transition buff)
timerBondsofFelCD:Stop()
timerLiquidHellfireCD:Stop()
timerEyeofGuldanCD:Stop()
timerHandofGuldanCD:Stop()
timerWindsCD:Start(12, 1)
timerWellOfSouls:Start(15)
self.vb.eyeCast = 0
if self:IsMythic() then
self.vb.phase = 2
warnPhase2:Show()
warnPhase2:Play("ptwo")
timerDzorykxCD:Stop()
timerFelLordKurazCD:Stop()
timerFlamesofSargerasCD:Start(24.5, "1-1")
timerEyeofGuldanCD:Start(34.3, 1)
timerBlackHarvestCD:Start(55.7, 1)
timerStormOfDestroyerCD:Start(72.6, 1)
else
self.vb.phase = 3
warnPhase3:Show()
warnPhase3:Play("pthree")
timerBlackHarvestCD:Start(self:IsLFR() and 73 or 63, 1)
if self:IsEasy() then
timerFlamesofSargerasCD:Start(29, 1)
timerEyeofGuldanCD:Start(42.5, 1)
timerStormOfDestroyerCD:Start(94, 1)
else
timerFlamesofSargerasCD:Start(27.5, "1-1")
timerEyeofGuldanCD:Start(39, 1)
timerStormOfDestroyerCD:Start(84, 1)
end
end
elseif spellId == 206847 then
warnParasiticWound:CombinedShow(0.3, args.destName)
if args:IsPlayer() then
local _, _, _, _, _, expires = DBM:UnitDebuff(args.destName, args.spellName)
local remaining = expires-GetTime()
specWarnParasiticWound:Show()
specWarnParasiticWound:Play("scatter")
yellParasiticWound:Yell()
yellParasiticWoundFades:Countdown(remaining)
end
elseif spellId == 206983 and self:AntiSpam(2, args.destName) then
warnShadowyGaze:CombinedShow(0.3, args.destName)
elseif spellId == 206458 then
if args:IsPlayer() then
--specWarnShearedSoul:Show()
--specWarnShearedSoul:Play("defensive")
end
elseif spellId == 227009 then
warnWounded:Show()
timerWounded:Start()
timerVisionsofDarkTitan:Stop()
elseif spellId == 206310 and args:IsPlayer() then
yellParasiticWoundFades:Cancel()
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 209011 or spellId == 206354 then
if self.Options.SetIconOnBondsOfFel then
self:SetIcon(args.destName, 0)
end
elseif spellId == 206384 or spellId == 209086 then--(206366: stunned version mythic?)
if self.Options.SetIconOnBondsOfFel then
self:SetIcon(args.destName, 0)
end
elseif spellId == 221606 then
self.vb.flamesTargets = self.vb.flamesTargets - 1
if self.vb.flamesTargets == 0 then
table.wipe(flamesIcons)
end
elseif spellId == 221603 or spellId == 221785 or spellId == 221784 or spellId == 212686 then--4 different duration versions of Flames of sargeras?
if args:IsPlayer() then
if self.Options.RangeFrame then
DBM.RangeCheck:Hide()
end
end
if self.Options.SetIconOnBondsOfFlames then
self:SetIcon(args.destName, 0)
end
elseif spellId == 206847 then
if args:IsPlayer() then
yellParasiticWoundFades:Cancel()
end
elseif spellId == 206310 and args:IsPlayer() then
if DBM:UnitDebuff("player", parasiteName) then
local _, _, _, _, _, expires = DBM:UnitDebuff("player", parasiteName)
local remaining = expires-GetTime()
yellParasiticWoundFades:Countdown(remaining)
end
end
end
--[[
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId)
if spellId == 205611 and destGUID == UnitGUID("player") and self:AntiSpam(2, 2) then
-- specWarnMiasma:Show()
-- specWarnMiasma:Play("runaway")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
--]]
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 111070 then--Azzinoth
timerChaosSeedCD:Stop(args.destGUID)
elseif cid == 104154 and self:IsMythic() then--Gul'dan
self.vb.bossLeft = self.vb.bossLeft - 1
timerFlamesofSargerasCD:Stop()
timerEyeofGuldanCD:Stop()
timerBlackHarvestCD:Stop()
timerStormOfDestroyerCD:Stop()
timerWindsCD:Stop()
end
end
function mod:CHAT_MSG_MONSTER_YELL(msg)
if (msg == L.prePullRP or msg:find(L.prePullRP)) and self:LatencyCheck() then
self:SendSync("GuldanRP")
elseif ( msg == L.mythicPhase3 or msg:find(L.mythicPhase3)) and self:IsMythic() then
self:SendSync("mythicPhase3")
end
end
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
if spellId == 161121 then--Assumed this is a script like felseeker
self.vb.stormCast = self.vb.stormCast + 1
specWarnStormOfDestroyer:Show()
specWarnStormOfDestroyer:Play("watchstep")
local timer = self:IsMythic() and stormTimersMythic[self.vb.stormCast+1] or self:IsEasy() and stormTimersEasy[self.vb.stormCast+1] or stormTimers[self.vb.stormCast+1]
if timer then
timerStormOfDestroyerCD:Start(timer, self.vb.stormCast+1)
end
elseif spellId == 215736 then--Hand of Guldan (Fel Lord Kuraz'mal)
if self:IsMythic() then
timerShatterEssenceCD:Start(21)
else
timerShatterEssenceCD:Start(19)--Same on normal and heroic. mythic/LFR need vetting.
end
elseif spellId == 215738 then--Hand of Guldan (Inquisitor Vethriz)
if self:IsEasy() then
--Unknown, died before casting either one
else
--timerShadowBlinkCD:Start(27.8)
timerGazeofVethrizCD:Start(27.8)--Basically starts casting it right after blink, then every 5 seconds
end
elseif spellId == 215739 then--Hand of Guldan (D'zorykx the Trapper)
if self:IsMythic() then
timerSoulVortexCD:Start(3)
end
--[[if self:IsEasy() then
timerSoulVortexCD:Start(52)--Normal verified, LFR assumed
else
timerSoulVortexCD:Start(35)--Heroic Jan 21
end--]]
elseif spellId == 210273 then--Fel Obelisk
self.vb.obeliskCastCount = self.vb.obeliskCastCount + 1
specWarnFelObelisk:Show()
specWarnFelObelisk:Play("watchstep")
if self:IsMythic() then
if self.vb.obeliskCastCount % 2 == 0 then
timerFelObeliskCD:Start(16)
else
timerFelObeliskCD:Start(5)
end
else
timerFelObeliskCD:Start(23)
end
elseif spellId == 209601 or spellId == 209637 or spellId == 208831 then--Fel Lord, Inquisitor, Jailer (they cast these on death, more reliable than UNIT_DIED which often doesn't fire for inquisitor)
local cid = self:GetUnitCreatureId(uId)
if cid == 104537 or cid == 104536 or cid == 104534 then
self.vb.addsDied = self.vb.addsDied + 1
if cid == 104537 then--Fel Lord Kuraz'mal
timerShatterEssenceCD:Stop()
timerFelObeliskCD:Stop()
elseif cid == 104536 then--Inquisitor Vethriz
timerGazeofVethrizCD:Stop()
--timerShadowBlinkCD:Stop()
elseif cid == 104534 then--D'zorykx the Trapper
timerSoulVortexCD:Stop()
end
if self.vb.addsDied == 3 and not self:IsMythic() then
--This probably needs refactoring for mythic since phase 1 and 2 happen at same time
self.vb.phase = 2
self.vb.liquidHellfireCast = 0
warnPhase2:Show()
warnPhase2:Play("ptwo")
timerLiquidHellfireCD:Stop()
timerFelEffluxCD:Stop()
timerTransition:Start(19)
timerBondsofFelCD:Start(self:IsTank() and 25.5 or 27.6, 1)
if self:IsLFR() then
timerEyeofGuldanCD:Start(54, 1)
timerLiquidHellfireCD:Start(67, 1)
elseif self:IsNormal() then
timerEyeofGuldanCD:Start(50.6, 1)
timerLiquidHellfireCD:Start(63.1, 1)
else--Heroic
timerHandofGuldanCD:Start(33, 1)
timerEyeofGuldanCD:Start(48, 1)
timerLiquidHellfireCD:Start(59, 1)
end
end
end
elseif spellId == 227035 then -- Parasitic Wound
timerParasiticWoundCD:Start()
elseif spellId == 221149 or spellId == 227277 then -- Manifest Azzinoth
self.vb.azzCount = self.vb.azzCount + 1
local count = self.vb.azzCount
specWarnManifestAzzinoth:Show(count)
specWarnManifestAzzinoth:Play("bigmob")
specWarnManifestAzzinoth:ScheduleVoice(1.2, nil, "Interface\\AddOns\\DBM-VP"..DBM.Options.ChosenVoicePack2.."\\count\\"..count..".ogg")
timerBulwarkofAzzinothCD:Start(15)
timerManifestAzzinothCD:Start(40, count+1)
elseif spellId == 227071 then -- Flame Crash
self.vb.crashCastCount = self.vb.crashCastCount + 1
if self.vb.crashCastCount == 4 or self.vb.crashCastCount == 7 then
timerFlameCrashCD:Start(50, self.vb.crashCastCount+1)
else
timerFlameCrashCD:Start(20, self.vb.crashCastCount+1)
end
elseif spellId == 227283 then -- Nightorb
self.vb.orbCastCount = self.vb.orbCastCount + 1
specWarnSummonNightorb:Show(self.vb.orbCastCount)
specWarnSummonNightorb:Play("mobsoon")
if self.vb.orbCastCount ~= 4 then
if self.vb.orbCastCount == 2 then
timerSummonNightorbCD:Start(60, self.vb.orbCastCount+1)
elseif self.vb.orbCastCount == 3 then
timerSummonNightorbCD:Start(40, self.vb.orbCastCount+1)
else
timerSummonNightorbCD:Start(45, self.vb.orbCastCount+1)
end
end
end
end
function mod:OnSync(msg)
if msg == "GuldanRP" and self:AntiSpam(10, 3) then
timerRP:Start()
end
if not self:IsInCombat() then return end
if msg == "mythicPhase3" and self:IsMythic() then
warnPhase3Soon:Show()
timerWilloftheDemonWithin:Start(43)
end
end