local mod = DBM : NewMod ( 2530 , " DBM-Aberrus " , nil , 1208 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20230410070828 " )
mod : SetCreatureID ( 200912 , 200913 , 200918 )
mod : SetEncounterID ( 2693 )
mod : SetUsedIcons ( 1 , 2 , 3 )
mod : SetBossHPInfoToHighest ( )
mod : SetHotfixNoticeRev ( 20230408000000 )
--mod:SetMinSyncRevision(20221215000000)
--mod.respawnTime = 29
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 406358 404472 407733 404713 405042 405492 405375 406227 407552 405391 407775 " ,
-- "SPELL_CAST_SUCCESS",
" SPELL_AURA_APPLIED 406313 407302 407327 407617 405392 " ,
" SPELL_AURA_APPLIED_DOSE 406313 407302 " ,
" SPELL_AURA_REMOVED 407327 " ,
-- "SPELL_PERIODIC_DAMAGE",
-- "SPELL_PERIODIC_MISSED",
" UNIT_DIED " ,
" INSTANCE_ENCOUNTER_ENGAGE_UNIT " ,
" UNIT_SPELLCAST_SUCCEEDED boss1 boss2 boss3 "
)
--[[
( ability.id = 406358 or ability.id = 407733 or ability.id = 404472 or ability.id = 404713 or ability.id = 405042 or ability.id = 405492 or ability.id = 407775 or ability.id = 405375 or ability.id = 406227 or ability.id = 407552 or ability.id = 405391 ) and type = " begincast "
or ( source.type = " NPC " and source.firstSeen = timestamp ) and ( source.id = 200912 or source.id = 200913 or source.id = 200918 ) or ( target.type = " NPC " and target.firstSeen = timestamp ) and ( target.id = 200912 or target.id = 200913 or target.id = 200918 )
--]]
--TODO, what do you actually do with Temporal Anomaly, soak it?
--NOTE, Rending Charge is a private aura
--General
--local specWarnGTFO = mod:NewSpecialWarningGTFO(370648, nil, nil, nil, 1, 8)
local timerInfusedStrikes = mod : NewBuffFadesTimer ( 20 , 407302 , nil , nil , nil , 5 , nil , DBM_COMMON_L.TANK_ICON .. DBM_COMMON_L.HEALER_ICON ) --Track the aura that needs to fall off before tanks "clear" again
--local berserkTimer = mod:NewBerserkTimer(600)
--Neldris
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 26001 ) )
local warnInfusedStrikes = mod : NewStackAnnounce ( 406313 , 2 , nil , " Tank|Healer " )
local specWarnRendingCharge = mod : NewSpecialWarningIncomingCount ( 406358 , nil , nil , nil , 1 , 14 )
local specWarnMassiveSlam = mod : NewSpecialWarningDodgeCount ( 404472 , nil , nil , nil , 2 , 2 )
local specWarnBellowingRoar = mod : NewSpecialWarningCount ( 404713 , nil , nil , nil , 2 , 2 )
local timerRendingChargeCD = mod : NewCDCountTimer ( 34.2 , 406358 , nil , nil , nil , 3 , nil , DBM_COMMON_L.BLEED_ICON )
local timerMassiveSlamCD = mod : NewCDCountTimer ( 39 , 404472 , nil , nil , nil , 3 )
local timerBellowingRoarCD = mod : NewCDCountTimer ( 23.1 , 404713 , nil , nil , nil , 2 )
--mod:AddInfoFrameOption(361651, true)
--mod:AddRangeFrameOption(5, 390715)
--mod:AddNamePlateOption("NPAuraOnAscension", 385541)
--Thadrion
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 26322 ) )
local warnUnstableEssence = mod : NewCastAnnounce ( 405042 , 3 )
local warnUnstableEssenceTargets = mod : NewTargetAnnounce ( 405042 , 2 )
local specWarnUnstableEssence = mod : NewSpecialWarningYou ( 405042 , nil , nil , nil , 1 , 2 )
local specWarnVolatileSpew = mod : NewSpecialWarningDodgeCount ( 405492 , nil , nil , nil , 2 , 2 )
local specWarnViolentEruption = mod : NewSpecialWarningCount ( 405375 , nil , nil , nil , 2 , 2 )
local timerUnstableEssenceCD = mod : NewCDCountTimer ( 29.2 , 405042 , nil , nil , nil , 3 , nil , DBM_COMMON_L.MAGIC_ICON )
local timerVolatileSpewCD = mod : NewCDCountTimer ( 26 , 405492 , nil , nil , nil , 3 )
local timerViolentEruptionCD = mod : NewCDCountTimer ( 68.3 , 405375 , nil , nil , nil , 2 , nil , DBM_COMMON_L.HEALER_ICON )
mod : AddSetIconOption ( " SetIconOnEssence " , 405042 , false , 0 , { 1 , 2 , 3 } )
--Rionthus
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 26329 ) )
local warnTemporalAnomaly = mod : NewCastAnnounce ( 407552 , 3 )
local warnTemporalAnomalyAbsorbed = mod : NewTargetNoFilterAnnounce ( 407552 , 2 )
local warnDisintegrate = mod : NewTargetAnnounce ( 405391 , 2 )
local specWarnDeepBreath = mod : NewSpecialWarningDodgeCount ( 406227 , nil , nil , nil , 2 , 2 )
local specWarnDisintegrate = mod : NewSpecialWarningMoveAway ( 405392 , nil , nil , nil , 1 , 2 )
local yellDisintegrate = mod : NewShortYell ( 405392 )
local timerDeepBreathCD = mod : NewCDCountTimer ( 42.7 , 406227 , nil , nil , nil , 3 , nil , DBM_COMMON_L.DEADLY_ICON )
local timerTemporalAnomalyCD = mod : NewCDCountTimer ( 43.7 , 407552 , nil , nil , nil , 5 )
local timerDisintegrateCD = mod : NewCDCountTimer ( 43.7 , 405391 , nil , nil , nil , 3 )
mod.vb . rendingCount = 0
mod.vb . massiveSlamCount = 0
mod.vb . roarCount = 0
mod.vb . essenceCount = 0
mod.vb . volatileSpewCount = 0
mod.vb . eruptionCount = 0
mod.vb . breathCount = 0
mod.vb . disintegrateCount = 0
mod.vb . anomalyCount = 0
local essenceMarks = { }
local bossActive = { }
local difficultyName = " normal "
local thadBugged = 0 --0 no 1 yes
local allTimers = {
[ " mythic " ] = {
--Rending Charge
-- [406358] = {14.0, 37.0, 18.0, 37.0, 18.0, 37.0},
--Bellowing Roar
-- [404713] = {36.0, 55.0, 55.0},
--Massive Slam
-- [404472] = {5.9, 18.0, 18.0, 19.0, 18.0, 18.0, 19.0, 18.0, 18.0},
--Volatile Spew (Working)
[ 4054920 ] = { 0 , 20.0 , 35.0 , 20.0 , 35.1 , 20.0 , 35.0 } ,
--Volatile Spew (Bugged)
[ 4054921 ] = { 0 , 35.0 , 20.0 , 35.0 , 20.0 , 35.0 , 20.0 } ,
--Unstable Essence (Working)
[ 4050420 ] = { 0 , 21.0 , 34.0 , 21.0 , 34.1 , 21.0 , 34.0 } ,
--Unstable Essence (Bugged)
[ 4050421 ] = { 0 , 34.0 , 21.0 , 34.0 , 21.0 , 34.0 , 21.0 } ,
--Violent Eruption
-- [405375] = {0, 55.0, 55.0, 55.0},
--Deep Breath
-- [406227] = {0, 55.0, 55.0, 55.0, 55.0},
--Temporal Anomaly
-- [407552] = {0, 22.0, 33.0, 22.0, 33.0, 22.0, 33.0},
--Disintegrate
-- [405391] = {0, 55.0, 55.0, 55.0},
} ,
[ " heroic " ] = {
--Rending Charge
-- [406358] = {14.4, 33.7, 44.2, 45.0, 46.3},
--Bellowing Roar
-- [404713] = {5.8, 35.0, 23.1, 23.0, 23.1, 23.1, 23.1, 23.2, 23.1},
--Massive Slam
-- [404472] = {30.2, 39, 46.2, 46.2, 46.2},
--Volatile Spew
[ 405492 ] = { 0 , 26.8 , 28.8 , 25.6 , 37.7 , 25.6 , 25.5 } ,
--Unstable Essence
[ 405042 ] = { 0 , 51.2 , 29.2 , 31.6 , 29.2 , 34.0 } ,
--Violent Eruption
-- [405375] = {0, 68.2, 69.3},
--Deep Breath
-- [406227] = {0s, 42.6, 43.8, 43.7, 43.7, 43.7, 43.7},
--Temporal Anomaly
-- [407552] = {0, 45.1, 43.8, 43.7, 43.7, 43.7, 43.7},
--Disintegrate
-- [405391] = {0, 43.9, 43.8, 43.8, 43.7, 43.8, 43.7},
} ,
[ " normal " ] = {
--Rending Charge
-- [406358] = {14.5, 34.8, 44.1, 44.5, 45, 44.2, 45.1, 46.2, 44.9, 46.1, 45.8, 46.1, 44.9},
--Bellowing Roar
-- [404713] = {5.6, 35.7, 22.7, 22.2, 22.6, 22.2, 22.7, 23, 23.1, 23, 22.3, 22.7, 22.3, 23, 22.7, 22.2, 22.6, 23.4, 23.1, 23.1, 22.6, 23, 23.1, 22.2, 22.7},
--Massive Slam
-- [404472] = {30.4, 38.5, 44.9, 44.9, 46.2, 45.4, 45, 46.2, 44.5, 46.6, 45.8, 46.1, 44.9},
--Volatile Spew
[ 405492 ] = { 5.6 , 21.9 , 36.8 , 30.4 , 30 , 30.4 , 33.2 , 31.1 , 35.2 , 30.4 } ,
--Unstable Essence
[ 405042 ] = { 16.6 , 39.3 , 27.5 , 35.2 , 27.9 , 38 , 27.5 , 38.9 , 28 } ,
--Violent Eruption
-- [405375] = {38.8, 68.1, 66.5, 66},
--Deep Breath
-- [406227] = {0, 42.6, 43.8, 43.8, 43.8, 43.8, 43.8, 43.8, 43.1, 43.3, 43.7, 43.8, 43.8, 43.8, 43.8, 43.8},
--Temporal Anomaly
-- [407552] = {0, 46.6, 43.8, 43.8, 43.7, 43.8, 43.8, 43.7, 43.8, 43.8, 43.8, 43.7, 43.8, 43.8, 43.7, 43.8, 43.8},
--Disintegrate
-- [405391] = {0, 45.5, 43.8, 43.8, 43.7, 43.8, 43.7, 43.8, 43.8, 43.9, 43.7, 43.8, 43.7, 43.8, 43.8, 43.8, 43.8},
} ,
}
function mod : OnCombatStart ( delay )
table.wipe ( bossActive )
--Neldris
self.vb . rendingCount = 0
self.vb . massiveSlamCount = 0
self.vb . roarCount = 0
if self : IsMythic ( ) then
difficultyName = " mythic "
timerMassiveSlamCD : Start ( 5.9 - delay , 1 )
timerRendingChargeCD : Start ( 14 - delay , 1 )
timerBellowingRoarCD : Start ( 36 - delay , 1 )
else
if self : IsHeroic ( ) then
difficultyName = " heroic "
else
difficultyName = " normal "
end
timerBellowingRoarCD : Start ( 6.2 - delay , 1 )
timerRendingChargeCD : Start ( 14.3 - delay , 1 )
timerMassiveSlamCD : Start ( 30.2 - delay , 1 )
end
--Thadrion
table.wipe ( essenceMarks )
self.vb . essenceCount = 0
self.vb . volatileSpewCount = 0
self.vb . eruptionCount = 0
--Rionthus
self.vb . breathCount = 0
self.vb . disintegrateCount = 0
self.vb . anomalyCount = 0
-- if self.Options.NPAuraOnAscension then
-- DBM:FireEvent("BossMod_EnableHostileNameplates")
-- end
end
--function mod:OnCombatEnd()
-- if self.Options.RangeFrame then
-- DBM.RangeCheck:Hide()
-- end
-- if self.Options.InfoFrame then
-- DBM.InfoFrame:Hide()
-- end
-- if self.Options.NPAuraOnAscension then
-- DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
-- end
--end
function mod : OnTimerRecovery ( )
if self : IsMythic ( ) then
difficultyName = " mythic "
elseif self : IsHeroic ( ) then
difficultyName = " heroic "
else
difficultyName = " normal "
end
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 406358 then
self.vb . rendingCount = self.vb . rendingCount + 1
specWarnRendingCharge : Show ( self.vb . rendingCount )
specWarnRendingCharge : Play ( " incomingdebuff " )
timerRendingChargeCD : Start ( self : IsMythic ( ) and ( ( self.vb . rendingCount % 2 == 0 ) and 18 or 37 ) or self.vb . rendingCount == 1 and 33.7 or 44.1 , self.vb . rendingCount + 1 )
elseif spellId == 407733 or spellId == 404472 then --2nd and later casts, first cast
self.vb . massiveSlamCount = self.vb . massiveSlamCount + 1
specWarnMassiveSlam : Show ( self.vb . massiveSlamCount )
specWarnMassiveSlam : Play ( " shockwave " )
timerMassiveSlamCD : Start ( self : IsMythic ( ) and 18 or self.vb . massiveSlamCount == 1 and 38 or 44.2 , self.vb . massiveSlamCount + 1 )
elseif spellId == 404713 then
self.vb . roarCount = self.vb . roarCount + 1
specWarnBellowingRoar : Show ( self.vb . roarCount )
specWarnBellowingRoar : Play ( " carefly " )
timerBellowingRoarCD : Start ( self : IsMythic ( ) and 55 or self.vb . roarCount == 1 and 35 or 23 , self.vb . roarCount + 1 )
elseif spellId == 405042 then
self.vb . essenceCount = self.vb . essenceCount + 1
warnUnstableEssence : Show ( self.vb . essenceCount )
local alteredSpellID = self : IsMythic ( ) and spellId .. thadBugged or spellId
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , alteredSpellID , self.vb . essenceCount + 1 ) or 29.2
timerUnstableEssenceCD : Start ( timer , self.vb . essenceCount + 1 )
elseif spellId == 405492 then
self.vb . volatileSpewCount = self.vb . volatileSpewCount + 1
specWarnVolatileSpew : Show ( self.vb . volatileSpewCount )
local alteredSpellID = self : IsMythic ( ) and spellId .. thadBugged or spellId
local timer = self : GetFromTimersTable ( allTimers , difficultyName , false , alteredSpellID , self.vb . volatileSpewCount + 1 ) or 25.5
timerVolatileSpewCD : Start ( timer , self.vb . volatileSpewCount + 1 )
elseif spellId == 405375 or spellId == 407775 then
self.vb . eruptionCount = self.vb . eruptionCount + 1
specWarnViolentEruption : Show ( self.vb . eruptionCount )
specWarnViolentEruption : Play ( " aesoon " )
timerViolentEruptionCD : Start ( self : IsMythic ( ) and 55 or 66 , self.vb . eruptionCount + 1 )
elseif spellId == 406227 and self : AntiSpam ( 5 , 2 ) then
self.vb . breathCount = self.vb . breathCount + 1
specWarnDeepBreath : Show ( self.vb . breathCount )
specWarnDeepBreath : Play ( " breathsoon " )
timerDeepBreathCD : Start ( self : IsMythic ( ) and 55 or 43.7 , self.vb . breathCount + 1 )
elseif spellId == 407552 then
self.vb . anomalyCount = self.vb . anomalyCount + 1
warnTemporalAnomaly : Show ( self.vb . anomalyCount )
--0, 22.0, 33.0, 22.0, 33.0, 22.0, 33.0
timerTemporalAnomalyCD : Start ( self : IsMythic ( ) and ( ( self.vb . anomalyCount % 2 == 0 ) and 33 or 22 ) or 43.7 , self.vb . anomalyCount + 1 )
elseif spellId == 405391 then
self.vb . disintegrateCount = self.vb . disintegrateCount + 1
timerDisintegrateCD : Start ( self : IsMythic ( ) and 55 or 43.7 , self.vb . disintegrateCount + 1 )
end
end
--[[
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if spellId == 394917 then
end
end
--]]
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 406313 and not args : IsPlayer ( ) then
local amount = args.amount or 1
if amount % 3 == 0 then --Guessed, Filler
warnInfusedStrikes : Show ( args.destName , amount )
end
elseif spellId == 407302 and self : AntiSpam ( 3 , 1 ) then
timerInfusedStrikes : Restart ( )
elseif spellId == 407327 then
warnUnstableEssenceTargets : CombinedShow ( 0.3 , args.destName )
if args : IsPlayer ( ) then
specWarnUnstableEssence : Show ( )
specWarnUnstableEssence : Play ( " targetyou " )
end
if self.Options . SetIconOnEssence then
for i = 1 , 3 , 1 do
if not essenceMarks [ i ] then
essenceMarks [ i ] = args.destGUID
self : SetIcon ( args.destName , i )
return
end
end
end
elseif spellId == 407617 then
warnTemporalAnomalyAbsorbed : Show ( args.destName )
elseif spellId == 405392 then
warnDisintegrate : CombinedShow ( 0.5 , args.destName )
if args : IsPlayer ( ) then
specWarnDisintegrate : Show ( )
specWarnDisintegrate : Play ( " range5 " )
yellDisintegrate : Yell ( )
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod : SPELL_AURA_REMOVED ( args )
local spellId = args.spellId
if spellId == 407327 then
if self.Options . SetIconOnEssence then
for i = 1 , 3 , 1 do
if essenceMarks [ i ] == args.destGUID then
essenceMarks [ i ] = nil
self : SetIcon ( args.destName , 0 )
return
end
end
end
end
end
--[[
function mod : SPELL_PERIODIC_DAMAGE ( _ , _ , _ , _ , destGUID , _ , _ , _ , spellId , spellName )
if spellId == 370648 and destGUID == UnitGUID ( " player " ) and self : AntiSpam ( 2 , 2 ) then
specWarnGTFO : Show ( spellName )
specWarnGTFO : Play ( " watchfeet " )
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
--]]
function mod : UNIT_DIED ( args )
local cid = self : GetCIDFromGUID ( args.destGUID )
if cid == 200912 then --Neldris
timerRendingChargeCD : Stop ( )
timerMassiveSlamCD : Stop ( )
timerBellowingRoarCD : Stop ( )
elseif cid == 200918 then --Rionthus
timerDeepBreathCD : Stop ( )
timerTemporalAnomalyCD : Stop ( )
timerDisintegrateCD : Stop ( )
elseif cid == 200913 then --Thadrion
timerUnstableEssenceCD : Stop ( )
timerVolatileSpewCD : Stop ( )
timerViolentEruptionCD : Stop ( )
end
end
function mod : INSTANCE_ENCOUNTER_ENGAGE_UNIT ( )
for i = 1 , 3 do
local unitID = " boss " .. i
local GUID = UnitGUID ( unitID )
if GUID and not bossActive [ GUID ] then
bossActive [ GUID ] = true
local cid = self : GetCIDFromGUID ( GUID )
if cid == 200918 then --Rionthus
timerDisintegrateCD : Start ( 6.8 , 1 )
timerTemporalAnomalyCD : Start ( 17.8 , 1 )
timerDeepBreathCD : Start ( 30.4 , 1 )
elseif cid == 200913 then --Thadrion
timerUnstableEssenceCD : Start ( 17 , 1 )
if UnitPower ( unitID ) >= 50 then --Coming out bugged
thadBugged = 1
--Will use Violent Eruption right away and it'll invert the spew and essence timers
timerVolatileSpewCD : Start ( 26.6 , 1 )
else
timerVolatileSpewCD : Start ( 5.3 , 1 )
timerViolentEruptionCD : Start ( 44.3 , 1 )
end
--elseif cid == 200912 then--Neldris (in case a diff boss can start)
-- timerRendingChargeCD:Stop()
-- timerMassiveSlamCD:Stop()
-- timerBellowingRoarCD:Stop()
end
end
end
end
--Slightly faster than CLEU
-- "<289.58 23:45:20> [UNIT_SPELLCAST_SUCCEEDED] Rionthus(80.8%-100.0%){Target:Andykay} -Deep Breath- [[boss2:Cast-3-2083-2569-2683-405814-01031E2802:405814]]",
-- "<289.62 23:45:20> [CHAT_MSG_RAID_BOSS_EMOTE] |TInterface\\\\Icons\\\\Ability_Evoker_DeepBreath.blp:20|tRionthus prepares to take in a |cFFFF0000|Hspell:406227|h[Deep Breath]|h|r!
-- "<290.65 23:45:21> [CLEU] SPELL_CAST_START#Creature-0-2083-2569-2683-200918-00001E266C#Rionthus(80.4%-100.0%)##nil#406227#Deep Breath#nil#nil",
function mod : UNIT_SPELLCAST_SUCCEEDED ( uId , _ , spellId )
if spellId == 405814 and self : AntiSpam ( 5 , 2 ) then --Deep Breath
self.vb . breathCount = self.vb . breathCount + 1
specWarnDeepBreath : Show ( self.vb . breathCount )
specWarnDeepBreath : Play ( " breathsoon " )
timerDeepBreathCD : Start ( self : IsMythic ( ) and 55 or 43.7 , self.vb . breathCount + 1 )
end
end