local mod = DBM : NewMod ( 1985 , " DBM-Raids-Legion " , 1 , 946 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240426185020 " )
mod : SetCreatureID ( 122104 )
mod : SetEncounterID ( 2064 )
mod : DisableESCombatDetection ( ) --Remove if blizz fixes clicking portals causing this event to fire (even though boss isn't engaged)
--mod:SetBossHPInfoToHighest()
--mod:SetUsedIcons(1, 2, 3, 4, 5, 6)
mod.respawnTime = 35
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 243983 244709 245504 244607 244915 246805 244689 244000 246316 " ,
" SPELL_CAST_SUCCESS 245050 244598 244016 " ,
" SPELL_AURA_APPLIED 244016 244383 244613 244949 244849 245050 245118 245075 " ,
" SPELL_AURA_APPLIED_DOSE 244016 " ,
" SPELL_AURA_REFRESH 244016 " ,
" SPELL_AURA_REMOVED 244383 244613 244849 245118 245075 " ,
-- "SPELL_PERIODIC_DAMAGE",
-- "SPELL_PERIODIC_MISSED",
" UNIT_DIED " ,
" UNIT_SPELLCAST_SUCCEEDED boss1 player "
)
local Nexus = DBM : EJ_GetSectionInfo ( 15799 )
local Xoroth = DBM : EJ_GetSectionInfo ( 15800 )
local Rancora = DBM : EJ_GetSectionInfo ( 15801 )
local Nathreza = DBM : EJ_GetSectionInfo ( 15802 )
--TODO, interrupt rotation helper for Flames of Xoroth?
--TODO, find a workable cast ID for corrupt and enable interrupt warning
--TODO, an overview info frame showing the needs of portal worlds (how many shields up, how much fel miasma, how many fires in dark realm if possible)
--[[
( ability.id = 243983 or ability.id = 244689 or ability.id = 244000 ) and type = " begincast "
or ability.id = 244016 and type = " cast "
or ( ability.id = 245504 or ability.id = 244607 or ability.id = 246316 or ability.id = 244915 or ability.id = 246805 ) and type = " begincast "
or ( ability.id = 245050 or ability.id = 244598 ) and type = " cast "
--]]
--Platform: Nexus
mod : AddTimerLine ( Nexus )
local warnRealityTear = mod : NewStackAnnounce ( 244016 , 2 , nil , " Tank " )
local specWarnRealityTear = mod : NewSpecialWarningStack ( 244016 , nil , 2 , nil , nil , 1 , 6 )
local specWarnRealityTearOther = mod : NewSpecialWarningTaunt ( 244016 , nil , nil , nil , 1 , 2 )
local specWarnTransportPortal = mod : NewSpecialWarningSwitch ( 244677 , " -Healer " , nil , 2 , 1 , 2 )
local specWarnCollapsingWorld = mod : NewSpecialWarningCount ( 243983 , nil , nil , nil , 2 , 2 )
local specWarnFelstormBarrage = mod : NewSpecialWarningDodge ( 244000 , nil , nil , nil , 2 , 2 )
local specWarnFieryDetonation = mod : NewSpecialWarningInterrupt ( 244709 , " HasInterrupt " , nil , 2 , 1 , 2 )
local specWarnHowlingShadows = mod : NewSpecialWarningInterrupt ( 245504 , " HasInterrupt " , nil , nil , 1 , 2 )
local timerRealityTearCD = mod : NewCDTimer ( 12.1 , 244016 , nil , " Tank " , nil , 5 , nil , DBM_COMMON_L.TANK_ICON )
local timerCollapsingWorldCD = mod : NewCDTimer ( 32.9 , 243983 , nil , nil , nil , 2 , nil , DBM_COMMON_L.DEADLY_ICON , nil , 1 , 3 ) --32.9-41
local timerFelstormBarrageCD = mod : NewCDTimer ( 32.2 , 244000 , nil , nil , nil , 3 , nil , nil , nil , 3 , 3 ) --32.9-41
local timerTransportPortalCD = mod : NewCDTimer ( 41.2 , 244677 , nil , nil , nil , 1 ) --41.2-60. most of time 42 on nose.
--local berserkTimer = mod:NewBerserkTimer(600)
mod : AddRangeFrameOption ( " 8/10 " )
mod : AddBoolOption ( " ShowAllPlatforms " , false )
--Platform: Xoroth
mod : AddTimerLine ( Xoroth )
local warnXorothPortal = mod : NewSpellAnnounce ( 244318 , 2 , nil , nil , nil , nil , nil , 7 )
local warnAegisofFlames = mod : NewTargetAnnounce ( 244383 , 3 , nil , nil , nil , nil , nil , nil , true )
local warnAegisofFlamesEnded = mod : NewEndAnnounce ( 244383 , 1 )
local warnEverburningFlames = mod : NewTargetAnnounce ( 244613 , 2 , nil , false )
local specWarnFlamesofXoroth = mod : NewSpecialWarningInterrupt ( 244607 , " HasInterrupt " , nil , nil , 1 , 2 )
local specWarnSupernova = mod : NewSpecialWarningDodge ( 244598 , nil , nil , nil , 2 , 2 )
local specWarnEverburningFlames = mod : NewSpecialWarningMoveTo ( 244613 , nil , nil , nil , 1 ) --No voice yet
local yellEverburningFlames = mod : NewFadesYell ( 244613 )
--local timerSupernovaCD = mod:NewCDTimer(6.1, 244598, nil, nil, nil, 3)
local timerFlamesofXorothCD = mod : NewCDTimer ( 6.9 , 244607 , nil , nil , nil , 4 , nil , DBM_COMMON_L.INTERRUPT_ICON )
--Platform: Rancora
mod : AddTimerLine ( Rancora )
local warnRancoraPortal = mod : NewSpellAnnounce ( 246082 , 2 , nil , nil , nil , nil , nil , 7 )
local warnCausticSlime = mod : NewTargetAnnounce ( 244849 , 2 , nil , false )
local specWarnFelSilkWrap = mod : NewSpecialWarningYou ( 244949 , nil , nil , nil , 1 , 2 )
local yellFelSilkWrap = mod : NewYell ( 244949 )
local specWarnFelSilkWrapOther = mod : NewSpecialWarningSwitch ( 244949 , " Dps " , nil , nil , 1 , 2 )
local specWarnLeechEssence = mod : NewSpecialWarningSpell ( 244915 , nil , nil , nil , 1 , 2 ) --Don't know what to do for voice yet til strat divised
local specWarnCausticSlime = mod : NewSpecialWarningMoveTo ( 244849 , nil , nil , nil , 1 ) --No voice yet
local specWarnCausticSlimeLFR = mod : NewSpecialWarningMoveAway ( 244849 , nil , nil , nil , 1 ) --No voice yet
local yellCausticSlime = mod : NewFadesYell ( 244849 )
local timerFelSilkWrapCD = mod : NewCDTimer ( 16.6 , 244949 , nil , nil , nil , 3 )
local timerPoisonEssenceCD = mod : NewCDTimer ( 9.4 , 246316 , nil , nil , nil , 2 , nil , DBM_COMMON_L.HEALER_ICON )
local timerLeechEssenceCD = mod : NewCDTimer ( 9.4 , 244915 , nil , nil , nil , 2 , nil , DBM_COMMON_L.HEALER_ICON )
--Platform: Nathreza
mod : AddTimerLine ( Nathreza )
local warnNathrezaPortal = mod : NewSpellAnnounce ( 246157 , 2 , nil , nil , nil , nil , nil , 7 )
local warnDelusions = mod : NewTargetAnnounce ( 245050 , 2 , nil , " Healer " )
local warnCloyingShadows = mod : NewTargetAnnounce ( 245118 , 2 , nil , false )
local warnHungeringGloom = mod : NewTargetAnnounce ( 245075 , 2 , nil , false )
local specWarnDelusions = mod : NewSpecialWarningYou ( 245050 , nil , nil , nil , 1 , 2 )
--local specWarnCorrupt = mod:NewSpecialWarningInterrupt(245040, "HasInterrupt", nil, nil, 1, 2)
local specWarnCloyingShadows = mod : NewSpecialWarningYou ( 245118 , nil , nil , nil , 1 ) --No voice yet (you warning for now, since it's secondary debuff you move to fel miasma)
local yellCloyingShadows = mod : NewFadesYell ( 245118 )
local specWarnHungeringGloom = mod : NewSpecialWarningMoveTo ( 245075 , nil , nil , nil , 1 ) --No voice yet
local timerDelusionsCD = mod : NewCDTimer ( 14.6 , 245050 , nil , nil , nil , 3 , nil , DBM_COMMON_L.HEALER_ICON .. DBM_COMMON_L.MAGIC_ICON )
mod.vb . shieldsActive = false
mod.vb . felBarrageCast = 0
mod.vb . worldCount = 0
mod.vb . firstPortal = false
local playerPlatform = 1 --1 Nexus, 2 Xoroth, 3 Rancora, 4 Nathreza
local mindFog , aegisFlames , felMiasma = DBM : GetSpellName ( 245099 ) , DBM : GetSpellName ( 244383 ) , DBM : GetSpellName ( 244826 )
local updateRangeFrame
do
local function debuffFilter ( uId )
if DBM : UnitDebuff ( uId , 244613 , 245075 , 244849 ) then
return true
end
end
updateRangeFrame = function ( self )
if not self.Options . RangeFrame then return end
if DBM : UnitDebuff ( " player " , 244849 ) then
DBM.RangeCheck : Show ( 10 )
elseif DBM : UnitDebuff ( " player " , 244613 , 245118 , 245075 ) then
DBM.RangeCheck : Show ( 8 )
else
DBM.RangeCheck : Show ( 10 , debuffFilter )
end
end
end
local function updateAllTimers ( self , ICD )
DBM : Debug ( " updateAllTimers running " , 3 )
if timerCollapsingWorldCD : GetRemaining ( ) < ICD then
local elapsed , total = timerCollapsingWorldCD : GetTime ( )
local extend = ICD - ( total - elapsed )
DBM : Debug ( " timerCollapsingWorldCD extended by: " .. extend , 2 )
timerCollapsingWorldCD : Stop ( )
timerCollapsingWorldCD : Update ( elapsed , total + extend )
end
if timerFelstormBarrageCD : GetRemaining ( ) < ICD then
local elapsed , total = timerFelstormBarrageCD : GetTime ( )
local extend = ICD - ( total - elapsed )
DBM : Debug ( " timerFelstormBarrageCD extended by: " .. extend , 2 )
timerFelstormBarrageCD : Stop ( )
timerFelstormBarrageCD : Update ( elapsed , total + extend )
end
if self.vb . firstPortal and timerTransportPortalCD : GetRemaining ( ) < ICD then
local elapsed , total = timerTransportPortalCD : GetTime ( )
local extend = ICD - ( total - elapsed )
DBM : Debug ( " timerTransportPortalCD extended by: " .. extend , 2 )
timerTransportPortalCD : Stop ( )
timerTransportPortalCD : Update ( elapsed , total + extend )
end
end
function mod : OnCombatStart ( delay )
self.vb . shieldsActive = false
self.vb . firstPortal = false
self.vb . felBarrageCast = 0
self.vb . worldCount = 0
playerPlatform = 1 --Nexus
timerRealityTearCD : Start ( 6.2 - delay )
timerCollapsingWorldCD : Start ( 10.5 - delay ) --Still variable, 10.5-18
timerFelstormBarrageCD : Start ( 25.2 - delay )
end
function mod : OnCombatEnd ( )
if self.Options . RangeFrame then
DBM.RangeCheck : Hide ( )
end
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 243983 then
self.vb . worldCount = self.vb . worldCount + 1
if self : IsEasy ( ) then
timerCollapsingWorldCD : Start ( 37.7 ) --37, but offen delayed by ICD
elseif self : IsMythic ( ) then
timerCollapsingWorldCD : Start ( 27.1 )
else
timerCollapsingWorldCD : Start ( )
end
if self.Options . ShowAllPlatforms or playerPlatform == 1 then --Actually on nexus platform
specWarnCollapsingWorld : Show ( self.vb . worldCount )
specWarnCollapsingWorld : Play ( " watchstep " )
end
updateAllTimers ( self , 9.7 )
elseif spellId == 244709 and self : CheckInterruptFilter ( args.sourceGUID , false , true ) then
specWarnFieryDetonation : Show ( args.sourceName )
specWarnFieryDetonation : Play ( " kickcast " )
elseif spellId == 245504 and self : CheckInterruptFilter ( args.sourceGUID , false , true ) then
specWarnHowlingShadows : Show ( args.sourceName )
specWarnHowlingShadows : Play ( " kickcast " )
elseif spellId == 244607 and self : CheckInterruptFilter ( args.sourceGUID , false , true ) then
specWarnFlamesofXoroth : Show ( args.sourceName )
specWarnFlamesofXoroth : Play ( " kickcast " )
timerFlamesofXorothCD : Start ( )
elseif spellId == 246316 then --Rancora platform
timerPoisonEssenceCD : Start ( )
elseif spellId == 244915 or spellId == 246805 then
if self.Options . ShowAllPlatforms or playerPlatform == 3 then --Actually on Rancora platform
timerLeechEssenceCD : Start ( )
specWarnLeechEssence : Show ( )
end
elseif spellId == 244689 then
if self : IsMythic ( ) then
timerTransportPortalCD : Start ( 36.5 )
else
timerTransportPortalCD : Start ( )
end
if self.Options . ShowAllPlatforms or playerPlatform == 1 then --Actually on nexus platform
specWarnTransportPortal : Show ( )
specWarnTransportPortal : Play ( " killmob " )
end
updateAllTimers ( self , 8.5 )
elseif spellId == 244000 then --Felstorm Barrage
self.vb . felBarrageCast = self.vb . felBarrageCast + 1
if self : IsEasy ( ) then
timerFelstormBarrageCD : Start ( 37.8 ) --37.8-43.8
elseif self : IsMythic ( ) then
timerFelstormBarrageCD : Start ( 27.1 )
else
timerFelstormBarrageCD : Start ( ) --32.9-41
end
if self.Options . ShowAllPlatforms or playerPlatform == 1 then --Actually on nexus platform
specWarnFelstormBarrage : Show ( )
specWarnFelstormBarrage : Play ( " farfromline " )
end
updateAllTimers ( self , 9.7 )
end
end
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if spellId == 245050 then --Delusions
timerDelusionsCD : Start ( )
elseif spellId == 244598 and self : AntiSpam ( 5 , 1 ) then --Supernova
if self.Options . ShowAllPlatforms or playerPlatform == 2 then --Actually on Xoroth platform
specWarnSupernova : Show ( )
specWarnSupernova : Play ( " watchstep " )
end
elseif spellId == 244016 then
timerRealityTearCD : Start ( )
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 244016 then
local uId = DBM : GetRaidUnitId ( args.destName )
-- if self:IsTanking(uId) then
local amount = args.amount or 1
if amount >= 2 then
if args : IsPlayer ( ) then --At this point the other tank SHOULD be clear.
specWarnRealityTear : Show ( amount )
specWarnRealityTear : Play ( " stackhigh " )
else --Taunt as soon as stacks are clear, regardless of stack count.
local _ , _ , _ , _ , _ , expireTime = DBM : UnitDebuff ( " player " , spellId )
local remaining
if expireTime then
remaining = expireTime - GetTime ( )
end
if not UnitIsDeadOrGhost ( " player " ) and ( not remaining or remaining and remaining < 12 ) then
specWarnRealityTearOther : Show ( args.destName )
specWarnRealityTearOther : Play ( " tauntboss " )
else
warnRealityTear : Show ( args.destName , amount )
end
end
else
warnRealityTear : Show ( args.destName , amount )
end
-- end
elseif spellId == 244383 and self : AntiSpam ( 2 , args.destName ) then --Aegis of Flames
self.vb . shieldsActive = true
warnAegisofFlames : Show ( args.destName )
elseif spellId == 244613 then --Everburning Flames
warnEverburningFlames : CombinedShow ( 1 , args.destName )
if args : IsPlayer ( ) then
specWarnEverburningFlames : Show ( mindFog )
yellEverburningFlames : Countdown ( 10 )
updateRangeFrame ( self )
end
elseif spellId == 244849 then --Caustic Slime
warnCausticSlime : CombinedShow ( 1 , args.destName )
if args : IsPlayer ( ) then
if self.vb . shieldsActive then --Show moveto message
specWarnCausticSlime : Show ( aegisFlames )
else --Show LFR/You message
specWarnCausticSlimeLFR : Show ( )
end
yellCausticSlime : Countdown ( 20 )
updateRangeFrame ( self )
end
elseif spellId == 245118 then --Cloying Shadows
warnCloyingShadows : CombinedShow ( 1 , args.destName )
if args : IsPlayer ( ) then
specWarnCloyingShadows : Show ( )
yellCloyingShadows : Countdown ( 30 )
updateRangeFrame ( self )
end
elseif spellId == 245075 then
warnHungeringGloom : CombinedShow ( 1 , args.destName )
if args : IsPlayer ( ) then
specWarnHungeringGloom : Show ( felMiasma )
updateRangeFrame ( self )
end
elseif spellId == 244949 then --Felsilk Wrap
if args : IsPlayer ( ) then
specWarnFelSilkWrap : Show ( )
specWarnRealityTearOther : Play ( " targetyou " )
yellFelSilkWrap : Yell ( )
else
if self.Options . ShowAllPlatforms or playerPlatform == 3 then --Actually on Rancora platform
timerFelSilkWrapCD : Start ( )
specWarnFelSilkWrapOther : Show ( )
if self.Options . SpecWarn244949switch then
specWarnFelSilkWrapOther : Play ( " changetarget " )
end
end
end
elseif spellId == 245050 then --Delusions
warnDelusions : CombinedShow ( 0.3 , args.destName )
if args : IsPlayer ( ) then
specWarnDelusions : Show ( )
specWarnDelusions : Play ( " targetyou " )
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
mod.SPELL_AURA_REFRESH = mod.SPELL_AURA_APPLIED
function mod : SPELL_AURA_REMOVED ( args )
local spellId = args.spellId
if spellId == 244383 then --Aegis of Flames
self.vb . shieldsActive = false
warnAegisofFlamesEnded : Show ( )
elseif spellId == 244613 then --Everburning Flames
if args : IsPlayer ( ) then
yellEverburningFlames : Cancel ( )
updateRangeFrame ( self )
end
elseif spellId == 244849 then --Caustic Slime
if args : IsPlayer ( ) then
yellCausticSlime : Cancel ( )
updateRangeFrame ( self )
end
elseif spellId == 245118 then --Cloying Shadows
if args : IsPlayer ( ) then
yellCloyingShadows : Cancel ( )
--updateRangeFrame(self)
end
elseif spellId == 245075 then --Hungering Gloom
if args : IsPlayer ( ) then
updateRangeFrame ( self )
end
end
end
--[[
function mod : SPELL_PERIODIC_DAMAGE ( _ , _ , _ , _ , destGUID , _ , _ , _ , spellId )
if spellId == 228007 and destGUID == UnitGUID ( " player " ) and self : AntiSpam ( 2 , 4 ) then
specWarnGTFO : Show ( )
specWarnGTFO : 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 == 124396 then --Baron Vulcanar (Platform: Xoroth)
--timerSupernovaCD:Stop()
timerFlamesofXorothCD : Stop ( )
elseif cid == 124395 then --Lady Dacidion (Platform: Rancora)
timerFelSilkWrapCD : Stop ( )
timerLeechEssenceCD : Stop ( ) --Add appropriate boss filter when mythic add support added
elseif cid == 124394 then --Lord Eilgar (Platform: Nathreza)
timerDelusionsCD : Stop ( ) --Add appropriate boss filter when mythic add support added
end
end
function mod : UNIT_SPELLCAST_SUCCEEDED ( uId , _ , spellId )
if spellId == 257939 then
self.vb . firstPortal = true
warnXorothPortal : Show ( )
warnXorothPortal : Play ( " newportal " )
elseif spellId == 257941 then
warnRancoraPortal : Show ( )
warnRancoraPortal : Play ( " newportal " )
elseif spellId == 257942 then
warnNathrezaPortal : Show ( )
warnNathrezaPortal : Play ( " newportal " )
elseif spellId == 244455 then --Platform: Xoroth
playerPlatform = 2
elseif spellId == 244512 then --Platform: Rancora
playerPlatform = 3
elseif spellId == 244513 then --Platform: Nathreza
playerPlatform = 4
elseif spellId == 244450 then --Platform: Nexus
playerPlatform = 1
end
end