local mod = DBM : NewMod ( 1737 , " DBM-Raids-Legion " , 3 , 786 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240426185020 " )
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 : NewPhaseTimer ( 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 ( name , 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 ( name , 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