local mod = DBM : NewMod ( 1225 , " DBM-Party-WoD " , 1 , 547 )
local L = mod : GetLocalizedStrings ( )
mod.statTypes = " normal,heroic,mythic,challenge,timewalker "
mod : SetRevision ( " 20240426175442 " )
mod : SetCreatureID ( 77734 )
mod : SetEncounterID ( 1714 )
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_AURA_APPLIED 156965 156842 156921 157168 164841 156856 156964 " ,
" SPELL_AURA_REMOVED 156921 157168 " ,
" SPELL_CAST_SUCCESS 156854 156974 " ,
" SPELL_CAST_START 157039 157001 156975 156857 " ,
" UNIT_SPELLCAST_SUCCEEDED boss1 "
)
--TODO, get timers for other forms besides demonic, form chosen is RNG based so may take a few logs.
--Basic Abilities
local warnDrainLife = mod : NewTargetAnnounce ( 156854 , 4 )
local warnFixate = mod : NewTargetNoFilterAnnounce ( 157168 , 2 , nil , nil , 2 )
--Affliction Abilities
local warnSeedOfMalevolence = mod : NewTargetAnnounce ( 156921 , 3 )
--Demonic Abilities
local warnDemonForm = mod : NewSpellAnnounce ( 156919 , 3 )
local warnDemonicLeap = mod : NewTargetAnnounce ( 157039 , 3 )
local warnChaosWave = mod : NewTargetAnnounce ( 157001 , 3 )
local warnDoom = mod : NewTargetNoFilterAnnounce ( 156965 , 3 , nil , " Healer " )
--Basic Abilities
local specWarnDrainLife = mod : NewSpecialWarningInterrupt ( 156854 , " HasInterrupt " , nil , nil , 1 , 2 )
local specWarnCorruption = mod : NewSpecialWarningDispel ( 156842 , " RemoveMagic " , nil , 2 , 1 , 2 )
local specWarnRainOfFire = mod : NewSpecialWarningSpell ( 156857 , nil , nil , nil , 2 , 2 ) --156856 fires SUCCESS but do not use, it fires for any player walking in or out of it
local specWarnRainOfFireMove = mod : NewSpecialWarningGTFO ( 156857 , nil , nil , nil , 1 , 8 )
--Unknown Abilities
local specWarnFixate = mod : NewSpecialWarningRun ( 157168 , nil , nil , 2 , 4 , 2 )
--Affliction Abilities
--TODO : Maybe need shit warning.
local specWarnSeedOfMelevolence = mod : NewSpecialWarningMoveAway ( 156921 , nil , nil , nil , 1 , 2 )
local specWarnExhaustion = mod : NewSpecialWarningDispel ( 164841 , " RemoveCurse " , nil , 2 , 1 , 2 )
--Destruction Abilities
local specWarnChaosBolt = mod : NewSpecialWarningInterrupt ( 156975 , " HasInterrupt " , nil , nil , 3 , 2 )
local specWarnImmolate = mod : NewSpecialWarningDispel ( 156964 , " RemoveMagic " , nil , 2 , 1 , 2 )
--Demonic Abilities
local specWarnDemonicLeap = mod : NewSpecialWarningYou ( 157039 , nil , nil , nil , 1 , 2 )
local yellDemonicLeap = mod : NewYell ( 157039 )
local specWarnChaosWave = mod : NewSpecialWarningYou ( 157001 , nil , nil , nil , 1 , 2 )
local yellWarnChaosWave = mod : NewYell ( 157001 )
--Basic Abilities
local timerDrainLifeCD = mod : NewCDTimer ( 15 , 156854 , nil , nil , nil , 4 , nil , DBM_COMMON_L.INTERRUPT_ICON ) --15~18 variation
local timerFixate = mod : NewTargetTimer ( 12 , 157168 , nil , " -Tank " , 3 , 3 )
local timerRainOfFireCD = mod : NewCDTimer ( 12 , 156857 , nil , nil , nil , 4 , nil , DBM_COMMON_L.INTERRUPT_ICON ) --12-22sec variation phase 2. Unknown Phase 1 repeat timer
--Destruction Abilities
local timerChaosBoltCD = mod : NewCDTimer ( 20.5 , 156975 , nil , nil , nil , 4 , nil , DBM_COMMON_L.INTERRUPT_ICON ) --20-25 variation.
local timerImmolateCD = mod : NewCDTimer ( 12 , 156964 , nil , " Healer " , nil , 5 , nil , DBM_COMMON_L.HEALER_ICON ) --Only timer that's probably not variable
--Affliction Abilities
local timerSeedOfMelevolence = mod : NewTargetTimer ( 18 , 156921 , nil , " -Tank " )
local timerSeedOfMelevolenceCD = mod : NewCDTimer ( 22 , 156921 , nil , nil , nil , 3 ) --22-25
--local timerExhaustionCD = mod:NewCDTimer(14, 164841)--14~24 variation. Large variation, seems useless.
--Demonic Abilities
local timerChaosWaveCD = mod : NewCDTimer ( 13 , 157001 , nil , nil , nil , 3 ) --13-17 variation
local timerDemonicLeapCD = mod : NewCDTimer ( 20 , 157039 , nil , nil , nil , 3 )
mod : AddRangeFrameOption ( 10 , 156921 )
local seedDebuff = DBM : GetSpellName ( 156921 )
local DebuffFilter
do
DebuffFilter = function ( uId )
return DBM : UnitDebuff ( uId , seedDebuff )
end
end
mod.vb . seedCount = 0
function mod : LeapTarget ( targetname , uId )
if not targetname then return end
if targetname == UnitName ( " player " ) then
specWarnDemonicLeap : Show ( )
specWarnDemonicLeap : Play ( " targetyou " )
yellDemonicLeap : Yell ( )
else
warnDemonicLeap : Show ( targetname )
end
end
function mod : ChaosWaveTarget ( targetname , uId )
if not targetname then return end
if targetname == UnitName ( " player " ) then
specWarnChaosWave : Show ( )
specWarnChaosWave : Play ( " runaway " )
yellWarnChaosWave : Yell ( )
else
warnChaosWave : Show ( targetname )
end
end
function mod : OnCombatStart ( delay )
self.vb . seedCount = 0
self : SetStage ( 1 )
timerRainOfFireCD : Start ( 15 - delay )
end
function mod : OnCombatEnd ( )
if self.Options . RangeFrame then
DBM.RangeCheck : Hide ( )
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 156965 then
warnDoom : Show ( args.destName )
elseif spellId == 156842 and self : CheckDispelFilter ( " magic " ) then
specWarnCorruption : Show ( args.destName )
specWarnCorruption : Play ( " dispelnow " )
elseif spellId == 156921 and args : IsDestTypePlayer ( ) then --This debuff can be spread to the boss. bugged?
self.vb . seedCount = self.vb . seedCount + 1
warnSeedOfMalevolence : Show ( args.destName )
--timerSeedOfMelevolenceCD:Start()
timerSeedOfMelevolence : Start ( args.destName )
if args : IsPlayer ( ) then
specWarnSeedOfMelevolence : Show ( )
specWarnSeedOfMelevolence : Play ( " runout " )
end
if self.Options . RangeFrame then
if DBM : UnitDebuff ( " player " , seedDebuff ) then --You have debuff, show everyone
DBM.RangeCheck : Show ( 10 , nil )
else --You do not have debuff, only show players who do
DBM.RangeCheck : Show ( 10 , DebuffFilter )
end
end
elseif spellId == 157168 then
timerFixate : Start ( args.destName )
if args : IsPlayer ( ) then
specWarnFixate : Show ( )
specWarnFixate : Play ( " justrun " )
else
warnFixate : Show ( args.destName )
end
elseif spellId == 164841 and self : CheckDispelFilter ( " curse " ) then
specWarnExhaustion : Show ( args.destName )
specWarnExhaustion : Play ( " dispelnow " )
--timerExhaustionCD:Start()
elseif spellId == 156964 and self : CheckDispelFilter ( " magic " ) then --Base version cast only in phase 1
specWarnImmolate : Show ( args.destName )
timerImmolateCD : Start ( )
specWarnImmolate : Play ( " dispelnow " )
elseif spellId == 156856 and args : IsPlayer ( ) then
specWarnRainOfFireMove : Show ( args.spellName )
specWarnRainOfFireMove : Play ( " watchfeet " )
end
end
function mod : SPELL_AURA_REMOVED ( args )
local spellId = args.spellId
if spellId == 156921 and args : IsDestTypePlayer ( ) then
self.vb . seedCount = self.vb . seedCount - 1
timerSeedOfMelevolence : Cancel ( args.destName )
if self.Options . RangeFrame and self.vb . seedCount == 0 then
DBM.RangeCheck : Hide ( )
end
elseif spellId == 157168 then
timerFixate : Cancel ( args.destName )
end
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 157039 then
timerDemonicLeapCD : Start ( )
self : BossTargetScanner ( 77734 , " LeapTarget " , 0.1 , 16 ) --Timing not verified, but Boss DOES look at leap target
elseif spellId == 157001 then
timerChaosWaveCD : Start ( )
self : BossTargetScanner ( 77734 , " ChaosWaveTarget " , 0.1 , 16 ) --Timing not verified, but Boss DOES look at leap target
elseif spellId == 156975 then
timerChaosBoltCD : Start ( ) --TODO, verify it's 20 on heroic and normal too. it's definitely 20 on CM
specWarnChaosBolt : Show ( args.sourceName )
if self : IsTank ( ) then
specWarnChaosBolt : Play ( " kickcast " )
else
specWarnChaosBolt : Play ( " helpkick " )
end
elseif spellId == 156857 then --Base version cast only in phase 1
specWarnRainOfFire : Show ( )
specWarnRainOfFire : Play ( " watchstep " )
end
end
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if spellId == 156854 then
warnDrainLife : Show ( args.destName )
if self : CheckInterruptFilter ( args.sourceGUID , false , true ) then
specWarnDrainLife : Show ( args.sourceName )
specWarnDrainLife : Play ( " kickcast " )
end
timerDrainLifeCD : Start ( )
elseif spellId == 156974 then --Instant cast version from destro
specWarnRainOfFire : Show ( )
specWarnRainOfFire : Play ( " watchstep " )
timerRainOfFireCD : Start ( )
end
end
function mod : UNIT_SPELLCAST_SUCCEEDED ( uId , _ , spellId )
if spellId == 156919 then --Demonology Transformation
self : SetStage ( 2 )
timerDrainLifeCD : Cancel ( )
timerRainOfFireCD : Cancel ( )
timerChaosWaveCD : Start ( 10 )
timerDemonicLeapCD : Start ( 23 )
elseif spellId == 156863 then --Affliction Transformation
self : SetStage ( 2 )
timerRainOfFireCD : Cancel ( )
--timerSeedOfMelevolenceCD:Start(5)
--timerDrainLifeCD:Start()--Update timer here
--no timers. need logs.
elseif spellId == 156866 then --Destruction Transformation
self : SetStage ( 2 )
timerDrainLifeCD : Cancel ( )
if self : IsDifficulty ( " challenge5 " ) then -- (in CM, it says he goes into this form but it's a lie)
timerSeedOfMelevolenceCD : Start ( 5 )
timerRainOfFireCD : Start ( 13 )
timerChaosBoltCD : Start ( 15 )
timerImmolateCD : Start ( 22 ) --Debuff timer, not cast. you don't interrupt, so timer for healer dispel, not cast
else --Actual heroic/normal destro form
--no timers. need logs.
--timerRainOfFireCD:Start(13)
--timerChaosBoltCD:Start(15)
--timerImmolateCD:Start(22)
end
elseif spellId == 114268 then
DBM : EndCombat ( self )
end
end