local mod = DBM : NewMod ( 1830 , " DBM-Raids-Legion " , 4 , 861 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240426185020 " )
mod : SetCreatureID ( 114323 )
mod : SetEncounterID ( 1962 )
mod : SetUsedIcons ( 1 , 2 , 3 )
mod : SetHotfixNoticeRev ( 15651 )
mod.respawnTime = 15
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 227514 " ,
" SPELL_CAST_SUCCESS 227883 227816 228824 " ,
" SPELL_AURA_APPLIED 228744 228794 228810 228811 228818 228819 232173 228228 228253 228248 " ,
" SPELL_AURA_REMOVED 228744 228794 228810 228811 228818 228819 " ,
" UNIT_SPELLCAST_SUCCEEDED boss1 "
)
--(ability.id = 228247 or ability.id = 228251 or ability.id = 228227) and type = "cast"
local warnOffLeash = mod : NewSpellAnnounce ( 228201 , 2 , 129417 )
local warnFangs = mod : NewCountAnnounce ( 227514 , 2 )
local warnShadowLick = mod : NewTargetAnnounce ( 228253 , 2 , nil , " Healer " )
local warnFrostLick = mod : NewTargetAnnounce ( 228248 , 3 )
local specWarnBreath = mod : NewSpecialWarningCount ( 228187 , nil , nil , nil , 1 , 2 )
local specWarnLeap = mod : NewSpecialWarningCount ( 227883 , nil , nil , nil , 2 )
local specWarnCharge = mod : NewSpecialWarningDodge ( 227816 , nil , nil , nil , 2 , 2 )
local specWarnBerserk = mod : NewSpecialWarningSpell ( 227883 , nil , nil , nil , 3 )
local specWarnFlameLick = mod : NewSpecialWarningMoveAway ( 228228 , nil , nil , nil , 1 , 2 )
local yellFlameLick = mod : NewYell ( 228228 , nil , false , 2 )
local specWarnShadowLick = mod : NewSpecialWarningYou ( 228253 , false , nil , nil , 1 ) --Not sure warning player is helpful
local yellShadowLick = mod : NewYell ( 228253 , nil , false , 2 )
local specWarnFrostLick = mod : NewSpecialWarningYou ( 228248 , false , nil , nil , 1 ) --Warning player they are stunned probably somewhat useful. Still can't do much about it.
local yellFrostLick = mod : NewYell ( 228248 , nil , false , 2 )
local specWarnFrostLickDispel = mod : NewSpecialWarningDispel ( 228248 , " Healer " , nil , nil , 1 , 2 )
--Mythic
local specWarnFlamingFoam = mod : NewSpecialWarningYou ( 228744 , nil , nil , nil , 1 ) --228794 jump id
local yellFlameFoam = mod : NewPosYell ( 228744 , DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION )
local specWarnBrineyFoam = mod : NewSpecialWarningYou ( 228810 , nil , nil , nil , 1 ) --228811 jump id
local yellBrineyFoam = mod : NewPosYell ( 228810 , DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION )
local specWarnShadowyFoam = mod : NewSpecialWarningYou ( 228818 , nil , nil , nil , 1 )
local yellShadowyFoam = mod : NewPosYell ( 228818 , DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION )
--local timerLickCD = mod:NewCDCountTimer(45, "ej14463", nil, nil, nil, 3, 228228)
local timerLeashCD = mod : NewNextTimer ( 45 , 228201 , nil , nil , nil , 6 , 129417 )
local timerLeash = mod : NewBuffActiveTimer ( 30 , 228201 , nil , nil , nil , 6 )
local timerFangsCD = mod : NewCDCountTimer ( 20.5 , 227514 , nil , " Tank " , nil , 5 , nil , DBM_COMMON_L.TANK_ICON , nil , 2 , 4 ) --20.5-23
local timerBreathCD = mod : NewCDCountTimer ( 20.5 , 228187 , nil , nil , nil , 5 , nil , DBM_COMMON_L.DEADLY_ICON , nil , 1 , 4 )
local timerLeapCD = mod : NewCDCountTimer ( 22 , 227883 , nil , nil , nil , 3 )
local timerChargeCD = mod : NewCDTimer ( 10.9 , 227816 , nil , nil , nil , 3 , nil , DBM_COMMON_L.DEADLY_ICON )
mod : AddTimerLine ( ENCOUNTER_JOURNAL_SECTION_FLAG12 )
local timerVolatileFoamCD = mod : NewCDCountTimer ( 15.4 , 228824 , nil , nil , nil , 3 , nil , DBM_COMMON_L.HEROIC_ICON )
local berserkTimer = mod : NewBerserkTimer ( 300 )
mod : AddSetIconOption ( " SetIconOnFoam " , " ej14535 " , true )
mod : AddBoolOption ( " YellActualRaidIcon " , false )
mod : AddBoolOption ( " FilterSameColor " , true )
mod : AddInfoFrameOption ( 228824 , true )
mod : AddRangeFrameOption ( 5 , 228824 )
mod.vb . fangCast = 0
mod.vb . breathCast = 0
mod.vb . leapCast = 0
mod.vb . foamCast = 0
mod.vb . YellRealIcons = false
--Ugly way to do it, vs a local table, but this ensures that if icon setter disconnects, it doesn't get messed up
mod.vb . one = " None "
mod.vb . two = " None "
mod.vb . three = " None "
local updateInfoFrame
local fireFoam , frostFoam , shadowFoam = DBM : GetSpellName ( 228744 ) , DBM : GetSpellName ( 228810 ) , DBM : GetSpellName ( 228818 )
local fireDebuff , frostDebuff , shadowDebuff = DBM : GetSpellName ( 227539 ) , DBM : GetSpellName ( 227566 ) , DBM : GetSpellName ( 227570 )
do
local lines = { }
updateInfoFrame = function ( )
table.wipe ( lines )
for uId in DBM : GetGroupMembers ( ) do
if DBM : UnitDebuff ( uId , fireFoam ) then
if mod.Options . FilterSameColor and DBM : UnitDebuff ( uId , fireDebuff ) then
--Do nothing
else
lines [ UnitName ( uId ) ] = " |cffff0000 " .. STRING_SCHOOL_FIRE .. " |r "
end
elseif DBM : UnitDebuff ( uId , frostFoam ) then
if mod.Options . FilterSameColor and DBM : UnitDebuff ( uId , frostDebuff ) then
--Do nothing
else
lines [ UnitName ( uId ) ] = " |cff0000ff " .. STRING_SCHOOL_FROST .. " |r "
end
elseif DBM : UnitDebuff ( uId , shadowFoam ) then
if mod.Options . FilterSameColor and DBM : UnitDebuff ( uId , shadowDebuff ) then
--Do nothing
else
lines [ UnitName ( uId ) ] = " |cFF9932CD " .. STRING_SCHOOL_SHADOW .. " |r "
end
end
end
return lines
end
end
local function delayedSync ( self )
self : SendSync ( " YellActualRaidIcon " )
end
function mod : OnCombatStart ( delay )
self.vb . fangCast = 0
self.vb . breathCast = 0
self.vb . leapCast = 0
--All other combat start timers started by Helyatosis
if not self : IsLFR ( ) then
if self : IsMythic ( ) then
self.vb . one = " None "
self.vb . two = " None "
self.vb . three = " None "
self.vb . foamCast = 0
self.vb . YellRealIcons = false
--timerLickCD:Start(12.4, 1)
berserkTimer : Start ( 240 - delay )
if self.Options . InfoFrame then
DBM.InfoFrame : SetHeader ( DBM : GetSpellName ( 228824 ) )
DBM.InfoFrame : Show ( 5 , " function " , updateInfoFrame , false , true )
end
if UnitIsGroupLeader ( " player " ) then
if self.Options . YellActualRaidIcon then
self : Schedule ( 5 , delayedSync , self ) --Delayed to ensure it's not sent at same time as someone elses OnCombatStart firing and setting YellRealIcons back to false
end
end
else
berserkTimer : Start ( - delay )
end
if self.Options . RangeFrame then
DBM.RangeCheck : Show ( 5 )
end
else
berserkTimer : Start ( 420 - delay )
end
end
function mod : OnCombatEnd ( )
if self.Options . RangeFrame then
DBM.RangeCheck : Hide ( )
end
if self.Options . InfoFrame then
DBM.InfoFrame : Hide ( )
end
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 227514 then
self.vb . fangCast = self.vb . fangCast + 1
warnFangs : Show ( self.vb . fangCast )
if self.vb . fangCast == 1 then
timerFangsCD : Start ( nil , 2 )
end
end
end
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if spellId == 227883 then
self.vb . leapCast = self.vb . leapCast + 1
specWarnLeap : Show ( self.vb . leapCast )
if self.vb . leapCast == 1 then
timerLeapCD : Start ( nil , 2 )
end
elseif spellId == 227816 then
specWarnCharge : Show ( )
specWarnCharge : Play ( " chargemove " )
elseif spellId == 228824 then
self.vb . foamCast = self.vb . foamCast + 1
if self.vb . foamCast < 3 then
timerVolatileFoamCD : Start ( nil , self.vb . foamCast + 1 )
end
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if ( spellId == 228744 or spellId == 228794 or spellId == 228810 or spellId == 228811 or spellId == 228818 or spellId == 228819 ) and args : IsDestTypePlayer ( ) then
local icon = 0
local uId = DBM : GetRaidUnitId ( args.destName )
local currentIcon = GetRaidTargetIndex ( uId ) or 0
if currentIcon == 0 then --Only if player doesn't already have a debuff
if self.vb . one == " None " then
self.vb . one = args.destName
icon = 1
elseif self.vb . two == " None " then
self.vb . two = args.destName
icon = 2
elseif self.vb . three == " None " then
self.vb . three = args.destName
icon = 3
end
end
if spellId == 228744 or spellId == 228794 then
if self.Options . FilterSameColor and DBM : UnitDebuff ( uId , fireDebuff ) then
if icon == 1 then
self.vb . one = " None "
elseif icon == 2 then
self.vb . two = " None "
elseif icon == 3 then
self.vb . three = " None "
end
return
end
if args : IsPlayer ( ) then
specWarnFlamingFoam : Show ( )
if self.vb . YellRealIcons then
if icon ~= 0 then
yellFlameFoam : Yell ( icon , args.spellName , icon )
end
else
yellFlameFoam : Yell ( 7 , args.spellName , 7 )
end
end
if self.Options . SetIconOnFoam and icon ~= 0 then
self : SetIcon ( args.destName , icon )
end
elseif spellId == 228810 or spellId == 228811 then
if self.Options . FilterSameColor and DBM : UnitDebuff ( uId , frostDebuff ) then
if icon == 1 then
self.vb . one = " None "
elseif icon == 2 then
self.vb . two = " None "
elseif icon == 3 then
self.vb . three = " None "
end
return
end
if args : IsPlayer ( ) then
specWarnBrineyFoam : Show ( )
if self.vb . YellRealIcons then
if icon ~= 0 then
yellBrineyFoam : Yell ( icon , args.spellName , icon )
end
else
yellBrineyFoam : Yell ( 6 , args.spellName , 6 )
end
end
if self.Options . SetIconOnFoam and icon ~= 0 then
self : SetIcon ( args.destName , icon )
end
elseif spellId == 228818 or spellId == 228819 then
if self.Options . FilterSameColor and DBM : UnitDebuff ( uId , shadowDebuff ) then
if icon == 1 then
self.vb . one = " None "
elseif icon == 2 then
self.vb . two = " None "
elseif icon == 3 then
self.vb . three = " None "
end
return
end
if args : IsPlayer ( ) then
specWarnShadowyFoam : Show ( )
if self.vb . YellRealIcons then
if icon ~= 0 then
yellShadowyFoam : Yell ( icon , args.spellName , icon )
end
else
yellShadowyFoam : Yell ( 3 , args.spellName , 3 )
end
end
if self.Options . SetIconOnFoam and icon ~= 0 then
self : SetIcon ( args.destName , icon )
end
end
elseif spellId == 232173 then --Berserk
timerLeapCD : Stop ( )
timerChargeCD : Stop ( )
specWarnBerserk : Show ( )
elseif spellId == 228228 then
if args : IsPlayer ( ) then
specWarnFlameLick : Show ( )
specWarnFlameLick : Play ( " runout " )
yellFlameLick : Yell ( )
end
elseif spellId == 228253 then
warnShadowLick : CombinedShow ( 0.3 , args.destName )
if args : IsPlayer ( ) then
specWarnShadowLick : Show ( )
yellShadowLick : Yell ( )
end
elseif spellId == 228248 then
if self.Options . specwarn228248dispel then
specWarnFrostLickDispel : CombinedShow ( 0.3 , args.destName )
if self : AntiSpam ( 3 , 1 ) then
specWarnFrostLickDispel : Play ( " helpdispel " )
end
else
warnFrostLick : CombinedShow ( 0.3 , args.destName )
end
if args : IsPlayer ( ) then
specWarnFrostLick : Show ( )
yellFrostLick : Yell ( )
end
end
end
function mod : SPELL_AURA_REMOVED ( args )
local spellId = args.spellId
if ( spellId == 228744 or spellId == 228794 or spellId == 228810 or spellId == 228811 or spellId == 228818 or spellId == 228819 ) and args : IsDestTypePlayer ( ) then
local uId = DBM : GetRaidUnitId ( args.destName )
if self.Options . SetIconOnFoam and not ( DBM : UnitDebuff ( uId , fireFoam ) or DBM : UnitDebuff ( uId , frostFoam ) or DBM : UnitDebuff ( uId , shadowFoam ) ) then
if args.destName == self.vb . one then
self.vb . one = " None "
elseif args.destName == self.vb . two then
self.vb . two = " None "
elseif args.destName == self.vb . three then
self.vb . three = " None "
end
self : SetIcon ( args.destName , 0 )
end
end
end
--[[
Might be inversed depending on perspective .
227658 : Fiery left , Salty middle , Dark right
227660 : Fiery left , Dark middle , Salty right
227666 : Salty left , Fiery middle , Dark right
227667 : Salty left , Dark middle , Fiery right
227669 : Dark left , Fiery middle , Salty right
227673 : Dark left , Salty middle , Fiery right
--]]
--Better to just assume things aren't in cobmat log anymore, then switch if they actually are.
function mod : UNIT_SPELLCAST_SUCCEEDED ( uId , _ , spellId )
if spellId == 227573 then --Guardian's Breath (pre cast used for all 6 versions of breath. Not a bad guess for my drycode huh? :) )
self.vb . breathCast = self.vb . breathCast + 1
specWarnBreath : Show ( self.vb . breathCast )
specWarnBreath : Play ( " breathsoon " )
if self.vb . breathCast == 1 then
timerBreathCD : Start ( nil , 2 )
end
elseif spellId == 228201 then --Off the Leash
self.vb . leapCast = 0
warnOffLeash : Show ( )
timerLeash : Start ( )
--self:Schedule(30, cancelLeash, self)
timerChargeCD : Start ( )
elseif spellId == 231561 then --Helyatosis (off the leash ending)
self.vb . fangCast = 0
self.vb . breathCast = 0
timerFangsCD : Start ( 4 , 1 )
timerLeashCD : Start ( ) --45
timerBreathCD : Start ( 11 , 1 ) --11-14
if self : IsMythic ( ) then
self.vb . foamCast = 0
timerVolatileFoamCD : Start ( 10 , 1 )
end
end
end
function mod : OnSync ( msg )
---@diagnostic disable-next-line: dbm-sync-checker
if msg == " YellActualRaidIcon " then
DBM : Debug ( " YellRealIcons = true " , 2 )
self.vb . YellRealIcons = true
end
end