local mod = DBM : NewMod ( 1518 , " DBM-Party-Legion " , 1 , 740 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240714045506 " )
mod : SetCreatureID ( 98542 )
mod : SetEncounterID ( 1832 )
mod : SetHotfixNoticeRev ( 20231027000000 )
mod : SetMinSyncRevision ( 20231027000000 )
mod.respawnTime = 29
mod.sendMainBossGUID = true
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 195254 194966 194956 196078 196587 " ,
" SPELL_CAST_SUCCESS 196587 194956 " ,
" SPELL_AURA_APPLIED 194966 196930 " ,
" SPELL_AURA_APPLIED_DOSE 196930 "
)
--[[
( ability.id = 195254 or ability.id = 194966 or ability.id = 194956 or ability.id = 196078 or ability.id = 196587 ) and type = " begincast "
or ability.id = 196587 and type = " cast "
or type = " dungeonencounterstart " or type = " dungeonencounterend "
--]]
--NOTE, trash uses 194966 just like boss, the expression will pick up both
local warnSwirlingScythe = mod : NewTargetNoFilterAnnounce ( 195254 , 2 )
local warnSoulEchoes = mod : NewTargetAnnounce ( 194966 , 2 )
local warnCallSouls = mod : NewSpellAnnounce ( 196078 , 2 ) --Change to important warning if it becomes more relevant.
local warnSoulgorge = mod : NewStackAnnounce ( 196930 , 4 )
local specWarnReapSoul = mod : NewSpecialWarningDodgeCount ( 194956 , " Tank " , nil , nil , 3 , 2 )
local specWarnSoulEchos = mod : NewSpecialWarningRun ( 194966 , nil , nil , nil , 1 , 2 )
local specWarnSwirlingScythe = mod : NewSpecialWarningDodge ( 195254 , nil , nil , nil , 1 , 2 )
local yellSwirlingScythe = mod : NewYell ( 195254 )
local specWarnSoulBurst = mod : NewSpecialWarningCount ( 196587 , nil , nil , nil , 2 , 2 )
local timerSwirlingScytheCD = mod : NewCDTimer ( 20.5 , 195254 , nil , nil , nil , 3 ) --20-27
local timerSoulEchoesCD = mod : NewNextTimer ( 27.5 , 194966 , nil , nil , nil , 3 )
local timerReapSoulCD = mod : NewNextTimer ( 10 , 194956 , nil , nil , nil , 5 , nil , DBM_COMMON_L.TANK_ICON .. DBM_COMMON_L.DEADLY_ICON ) --13-3 because started in success
mod.vb . scytheCount = 0
mod.vb . echoesCount = 0
mod.vb . reapCount = 0
mod.vb . burstCounnt = 0
function mod : ScytheTarget ( targetname , uId )
if not targetname then
warnSwirlingScythe : Show ( DBM_COMMON_L.UNKNOWN )
return
end
if targetname == UnitName ( " player " ) then
specWarnSwirlingScythe : Show ( )
specWarnSwirlingScythe : Play ( " runaway " )
yellSwirlingScythe : Yell ( )
else
warnSwirlingScythe : Show ( targetname )
end
end
function mod : SoulTarget ( targetname , uId )
if not targetname then
return
end
if self : AntiSpam ( 3 , targetname ) then
if targetname == UnitName ( " player " ) then
specWarnSoulEchos : Show ( )
specWarnSoulEchos : Play ( " runaway " )
specWarnSoulEchos : ScheduleVoice ( 1 , " keepmove " )
else
warnSoulEchoes : Show ( targetname )
end
end
end
function mod : OnCombatStart ( delay )
self.vb . scytheCount = 0
self.vb . echoesCount = 0
self.vb . reapCount = 0
self.vb . burstCount = 0
self : SetStage ( 1 )
timerSwirlingScytheCD : Start ( 8 - delay , 1 )
timerSoulEchoesCD : Start ( 15.5 - delay , 1 )
timerReapSoulCD : Start ( 20 - delay , 1 )
end
function mod : OnCombatEnd ( wipe , secondRun )
if not wipe and not secondRun then
local BRHTrash = DBM : GetModByName ( " BRHTrash " )
BRHTrash : StartFirstRP ( )
end
-- if self.Options.RangeFrame then
-- DBM.RangeCheck:Hide()
-- end
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 195254 then
self.vb . scytheCount = self.vb . scytheCount + 1
timerSwirlingScytheCD : Start ( nil , self.vb . scytheCount + 1 )
self : BossTargetScanner ( args.sourceGUID , " ScytheTarget " , 0.05 , 12 , true ) --Can target tank if no one else is left, but if this causes probelm add tank filter back
elseif spellId == 194966 then
self.vb . echoesCount = self.vb . echoesCount + 1
timerSoulEchoesCD : Start ( nil , self.vb . echoesCount + 1 )
self : BossTargetScanner ( args.sourceGUID , " SoulTarget " , 0.1 , 20 , true , nil , nil , nil , true ) --Always filter tank, because if scan fails debuff will be used.
elseif spellId == 194956 then
specWarnReapSoul : Show ( self.vb . reapCount + 1 )
specWarnReapSoul : Play ( " shockwave " )
elseif spellId == 196078 then
self : SetStage ( 2 )
warnCallSouls : Show ( )
timerReapSoulCD : Stop ( )
timerSwirlingScytheCD : Stop ( )
timerSoulEchoesCD : Stop ( )
elseif spellId == 196587 then
self.vb . burstCount = self.vb . burstCount + 1
specWarnSoulBurst : Show ( self.vb . burstCount )
specWarnSoulBurst : Play ( " aesoon " )
end
end
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if spellId == 196587 then --SoulBurst Ending
self : SetStage ( 1 )
--Reset Count?
--self.vb.scytheCount = 0
--self.vb.echoesCount = 0
--self.vb.reapCount = 0
timerSwirlingScytheCD : Stop ( )
timerSwirlingScytheCD : Start ( 9.2 , self.vb . scytheCount + 1 )
timerSoulEchoesCD : Stop ( )
timerSoulEchoesCD : Start ( 16.5 , self.vb . echoesCount + 1 )
timerReapSoulCD : Stop ( )
timerReapSoulCD : Start ( 21.3 , self.vb . reapCount + 1 )
elseif spellId == 194956 then
self.vb . reapCount = self.vb . reapCount + 1
timerReapSoulCD : Start ( nil , self.vb . reapCount + 1 )
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 194966 and self : AntiSpam ( 3 , args.destName ) then --Backup Soul echos warning that's 2 seconds slower than target scan
if args : IsPlayer ( ) then
specWarnSoulEchos : Show ( )
specWarnSoulEchos : Play ( " runaway " )
specWarnSoulEchos : ScheduleVoice ( 1 , " keepmove " )
else
warnSoulEchoes : Show ( args.destName )
end
elseif spellId == 196930 then
warnSoulgorge : Show ( args.destName , args.amount or 1 )
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED