local mod = DBM : NewMod ( 2422 , " DBM-CastleNathria " , nil , 1190 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20220202090223 " )
mod : SetCreatureID ( 165759 )
mod : SetEncounterID ( 2402 )
mod : DisableIEEUCombatDetection ( ) --kael gets stuck on boss frames well after encounter has ended, therefor must not re-engage boss off this bug
mod : SetUsedIcons ( 1 , 2 , 3 , 4 , 5 )
mod.onlyHighest = true --Instructs DBM health tracking to literally only store highest value seen during fight, even if it drops below that
mod.noBossDeathKill = true --Instructs mod to ignore 165759 deaths, since goal is to heal kael, not kill him
mod : SetHotfixNoticeRev ( 20210128000000 ) --2021, 01, 28
mod : SetMinSyncRevision ( 20210105000000 )
--mod.respawnTime = 29
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 325877 329509 329518 328885 325440 325506 333002 326455 337865 " ,
" SPELL_CAST_SUCCESS 326583 325665 181113 " ,
" SPELL_SUMMON 329565 326075 " ,
" SPELL_AURA_APPLIED 326456 328659 341254 328731 325442 333145 326078 332871 326583 328479 323402 337859 335581 343026 341473 325873 " ,
" SPELL_AURA_APPLIED_DOSE 326456 325442 326078 " ,
" SPELL_AURA_REMOVED 328731 326078 328479 323402 337859 343026 325873 " ,
" SPELL_PERIODIC_DAMAGE 328579 " ,
" SPELL_PERIODIC_MISSED 328579 " ,
" UNIT_DIED "
)
--[[
( ability.id = 325877 or ability.id = 329509 or ability.id = 329518 or ability.id = 328885 ) and type = " begincast "
or ability.id = 181113 or ability.id = 323402 or target.id = 168973 and type = " death " or ( ability.id = 343026 or ability.id = 337859 ) and ( type = " applydebuff " or type = " removedebuff " or type = " applybuff " or type = " removebuff " )
or ability.id = 325665 and type = " cast "
or ability.id = 328885 and type = " begincast "
or ability.id = 181113
or ability.id = 335581 and type = " applybuff "
or ( source.type = " NPC " and source.firstSeen = timestamp ) or ( target.type = " NPC " and target.firstSeen = timestamp )
or ( abililty.id = 326455 or ability.id = 326455 or ability.id = 325506 ) and type = " begincast "
or ability.id = 328659 or ability.id == 341254 or ability.id = 328731 and ( type = " applybuff " or type = " removebuff " )
--]]
--High Torturor Darithos
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 22089 ) )
local specWarnGreaterCastigation = mod : NewSpecialWarningMoveAway ( 328885 , nil , nil , nil , 1 , 2 )
local timerGreaterCastigationCD = mod : NewNextTimer ( 15.8 , 328885 , nil , nil , nil , 3 )
mod : AddRangeFrameOption ( 6 , 328885 )
--Shade of Kael'thas
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 21966 ) )
local warnFeiryStrike = mod : NewCastAnnounce ( 326455 , 2 , nil , nil , " Melee " )
local warnBurningRemnants = mod : NewStackAnnounce ( 326456 , 2 , nil , " Tank " )
local warnEmberBlast = mod : NewTargetNoFilterAnnounce ( 325877 , 4 )
local specWarnShadeSpawned = mod : NewSpecialWarningSwitch ( " ej21966 " , nil , nil , nil , 1 , 2 )
local specWarnFeiryStrike = mod : NewSpecialWarningSpell ( 326455 , false , nil , nil , 1 , 2 )
local specWarnBurningRemnants = mod : NewSpecialWarningStack ( 326456 , nil , 3 , nil , nil , 1 , 6 )
local specWarnBurningRemnantsTaunt = mod : NewSpecialWarningTaunt ( 326456 , nil , nil , nil , 1 , 2 )
local specWarnEmberBlast = mod : NewSpecialWarningMoveTo ( 325877 , false , nil , nil , 1 , 2 ) --Opt in as needed
local yellEmberBlast = mod : NewYell ( 325877 , nil , nil , nil , " YELL " )
local yellEmberBlastFades = mod : NewFadesYell ( 325877 , nil , nil , nil , " YELL " )
local specWarnBlazingSurge = mod : NewSpecialWarningDodge ( 329509 , nil , nil , nil , 2 , 2 )
--local yellBlazingSurge = mod:NewYell(329509)
local specWarnUnleashedPyroclasm = mod : NewSpecialWarningInterrupt ( 337865 , nil , nil , nil , 1 , 2 )
local specWarnGTFO = mod : NewSpecialWarningGTFO ( 328579 , nil , nil , nil , 1 , 8 )
local timerFieryStrikeCD = mod : NewCDTimer ( 8.5 , 326455 , nil , " Tank " , nil , 5 , nil , DBM_COMMON_L.TANK_ICON )
local timerEmberBlastCD = mod : NewCDTimer ( 20.4 , 325877 , nil , nil , nil , 3 ) --20 again? or is it just 24 on mythic and 20 on heroic
local timerBlazingSurgeCD = mod : NewCDTimer ( 19.4 , 329509 , nil , nil , nil , 3 )
local timerCloakofFlamesCD = mod : NewNextCountTimer ( 30 , 337859 , nil , nil , nil , 5 , nil , DBM_COMMON_L.MYTHIC_ICON )
--local berserkTimer = mod:NewBerserkTimer(600)
mod : AddInfoFrameOption ( 326078 , true ) --343026
mod : AddSetIconOption ( " SetIconOnEmberBlast " , 325877 , true , false , { 1 } )
--Adds
----Rockbound Vanquisher
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 21954 ) )
local warnVanquisher = mod : NewCountAnnounce ( " ej21954 " , 2 , 325440 )
local warnVanquished = mod : NewStackAnnounce ( 325442 , 2 , nil , " Tank " )
local warnConcussiveSmash = mod : NewCountAnnounce ( 325506 , 3 )
local specWarnVanquished = mod : NewSpecialWarningStack ( 325442 , nil , 3 , nil , nil , 1 , 6 )
local specWarnVanquishedTaunt = mod : NewSpecialWarningTaunt ( 325442 , nil , nil , nil , 1 , 2 )
local timerVanquisherCD = mod : NewCDCountTimer ( 80 , " ej21954 " , nil , nil , nil , 1 , 325440 , DBM_COMMON_L.DAMAGE_ICON )
local timerVanquishingStrikeCD = mod : NewCDTimer ( 6.1 , 325440 , nil , " Tank " , nil , 5 , nil , DBM_COMMON_L.TANK_ICON )
local timerConcussiveSmashCD = mod : NewCDCountTimer ( 19.5 , 325506 , nil , nil , nil , 5 ) --Next in between casts, but initial cast can be delayed by a lot
----Bleakwing Assassin
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 21993 ) )
local warnAssassin = mod : NewCountAnnounce ( " ej21993 " , 2 , 326583 )
local warnReturnToStone = mod : NewTargetNoFilterAnnounce ( 333145 , 4 , nil , " -Healer " )
local warnCrimsonFury = mod : NewTargetAnnounce ( 341473 , 3 )
local specWarnCrimsonFury = mod : NewSpecialWarningMoveAway ( 341473 , nil , nil , nil , 1 , 2 )
local yellCrimsonFury = mod : NewYell ( 341473 )
local timerBleakwingAssassinCD = mod : NewCDCountTimer ( 80 , " ej21993 " , nil , nil , nil , 1 , 326583 , DBM_COMMON_L.DAMAGE_ICON )
--local timerCrimsonFuryCD = mod:NewCDTimer(44.3, 341473, nil, false, nil, 3, nil, DBM_COMMON_L.BLEED_ICON)--Too many to track via normal bars, this needs nameplate bars/icon
----Vile Occultist
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 21952 ) )
local warnVileOccultists = mod : NewCountAnnounce ( " ej21952 " , 2 , 329565 )
local warnSummonEssenceFont = mod : NewSpellAnnounce ( 329565 , 2 , nil , " Healer " )
local specWarnVulgarBrand = mod : NewSpecialWarningInterrupt ( 333002 , " HasInterrupt " , nil , nil , 1 , 2 )
local timerVileOccultistCD = mod : NewCDCountTimer ( 10 , " ej21952 " , nil , nil , nil , 1 , 329565 , DBM_COMMON_L.DAMAGE_ICON )
--local timerVulgarBrandCD = mod:NewCDTimer(44.3, 333002, nil, nil, nil, 3)--TODO, give it a relative icon based on difficulty (Magic/Curse)
----Soul Infuser
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 21953 ) )
local warnSoulInfusion = mod : NewSpellAnnounce ( 325665 , 4 )
local warnInfusersOrb = mod : NewCountAnnounce ( 326075 , 1 , nil , " Healer " )
local timerSoulInfuserCD = mod : NewCDCountTimer ( 10 , " ej21953 " , nil , nil , nil , 1 , 325665 , DBM_COMMON_L.DAMAGE_ICON )
----Pestering Fiend
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 22082 ) )
local timerPesteringFiendCD = mod : NewCDCountTimer ( 70 , " ej22082 " , nil , nil , nil , 1 , 328254 , DBM_COMMON_L.DAMAGE_ICON )
----Reborn Phoenix
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 22090 ) )
local warnRebornPhoenix = mod : NewSpellAnnounce ( " ej22090 " , 2 , 328659 )
local warnEyeOnTarget = mod : NewTargetAnnounce ( 328479 , 2 )
local specWarnEyeOnTarget = mod : NewSpecialWarningYou ( 328479 , nil , nil , nil , 1 , 2 )
local yellEyeOnTarget = mod : NewYell ( 328479 , nil , false )
local timerPhoenixRespawn = mod : NewCastTimer ( 20 , 328731 , nil , nil , nil , 1 )
mod : AddSetIconOption ( " SetIconOnBirdo " , 328731 , true , true , { 2 , 3 , 4 , 5 } )
mod : AddNamePlateOption ( " NPAuraOnPhoenixFixate " , 328479 )
--Mostly for testing, these are not meant to be used as they aren't actual groupings
--mod:GroupSpells("ej21954", 325442, 325506, 325440)--Rockbound Vanquisher spells
--mod:GroupSpells("ej21993", 333145, 341473)--Bleakwing Assassin spells
--mod:GroupSpells("ej21952", 329565, 333002)--Vile Occultist spells
--mod:GroupSpells("ej21953", 325665, 326075)--Soul Infuser spells
--mod:GroupSpells("ej22090", 328479, 328731)--Phoenix spells
mod.vb . addMode = 0 --No adds spawning, 1-Adds Spawning from Darithos Tables, 2-Adds spawning from Shade table
mod.vb . addCount = 0
mod.vb . healerOrbCount = 0
mod.vb . shadeActive = false
mod.vb . cloakActive = false
mod.vb . cloakCount = 0
mod.vb . assassinCount = 0
mod.vb . occultistCount = 0
mod.vb . infuserCount = 0
mod.vb . fiendCount = 0
mod.vb . vanquisherCount = 0
local infusersBoon = DBM : GetSpellInfo ( 326078 )
local seenAdds = { }
local castsPerGUID = { }
local infuserTargets = { }
local birdoTracker = { }
--Perfect timers, executed from Darithos dying
local difficultyName = " None "
local addTimers = {
[ 0 ] = { --Initial add sets from engage (if Darithos doesn't die within 42 seconds of fight)
[ " lfr " ] = {
--Bleakwing Assassin
[ 167566 ] = { 70 , 60 , 80 } ,
--Vile Occultist
[ 165763 ] = { 90 , 150 } ,
--Soul Infuser
[ 165762 ] = { 170 , 70 } ,
--Pestering Fiend
[ 168700 ] = { 70 , 60 , 40 , 40 } ,
--Rockbound Vanquisher
[ 165764 ] = { 50 , 70 , 70 , 78 } ,
} ,
[ " normal " ] = {
--Bleakwing Assassin
[ 167566 ] = { 70 , 70 , 70 , 78 } ,
--Vile Occultist
[ 165763 ] = { 105 , 35 , 100 } ,
--Soul Infuser
[ 165762 ] = { 175 , 55 } ,
--Pestering Fiend
[ 168700 ] = { 70 , 70 , 70 , 78 } ,
--Rockbound Vanquisher
[ 165764 ] = { 50 , 70 , 70 , 78 } ,
} ,
[ " heroic " ] = { --Heroic Timers from Dec 14th purposely keeping darithos alive
--Bleakwing Assassin
[ 167566 ] = { 70 , 90 } ,
--Vile Occultist
[ 165763 ] = { 70 , 90 } ,
--Soul Infuser
[ 165762 ] = { 130 , 30 } ,
--Pestering Fiend (TODO, something off about this one)
[ 168700 ] = { 100 , 30 } ,
--Rockbound Vanquisher
[ 165764 ] = { 50 , 65 } ,
} ,
[ " mythic " ] = { --Mythic testing timers Sept 25th
--Bleakwing Assassin
[ 167566 ] = { 110 , 30 , 30 , 95 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 } , --5 repeating after
--Vile Occultist
[ 165763 ] = { 110 , 60 , 64.2 , 30 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 } , --5 repeating fter
--Soul Infuser
[ 165762 ] = { 75 , 120 } ,
--Pestering Fiend (TODO, something off about this one)
[ 168700 ] = { 100 , 35 } ,
--Rockbound Vanquisher
[ 165764 ] = { 50 , 60 , 60 } ,
} ,
} ,
[ 1 ] = { --Initial add sets started when Darithos dies
[ " lfr " ] = { --lfr timers from Jan 5th
--Bleakwing Assassin
[ 167566 ] = { 28 , 60 , 80 } ,
--Vile Occultist
[ 165763 ] = { 58 , 150 } ,
--Soul Infuser
[ 165762 ] = { 108 , 70 } ,
--Pestering Fiend
[ 168700 ] = { 28 , 60 , 40 , 40 } ,
--Rockbound Vanquisher
[ 165764 ] = { 8 , 70 , 70 , 78 } ,
} ,
[ " normal " ] = { --Normal timers from Dec 9th
--Bleakwing Assassin
[ 167566 ] = { 28 , 70 , 70 , 78 } ,
--Vile Occultist
[ 165763 ] = { 63 , 35 , 100 } ,
--Soul Infuser
[ 165762 ] = { 133 , 55 } , --133 is iffy, didn't show spawn event
--Pestering Fiend
[ 168700 ] = { 28 , 70 , 70 , 78 } ,
--Rockbound Vanquisher
[ 165764 ] = { 8 , 70 , 70 , 78 } ,
} ,
[ " heroic " ] = { --Heroic Timers from Dec 9th
--Bleakwing Assassin
[ 167566 ] = { 28 , 90 , 30 , 30 } ,
--Vile Occultist
[ 165763 ] = { 28 , 90 , 90 } ,
--Soul Infuser
[ 165762 ] = { 88 , 30 } ,
--Pestering Fiend
[ 168700 ] = { 58 , 30 , 120 } ,
--Rockbound Vanquisher
[ 165764 ] = { 8 , 65 } ,
} ,
[ " mythic " ] = { --Mythic testing timers Sept 25th (timers are iterally unfixable since NO ONE IN WORLD will ever see them again usnig limits strat)
--Bleakwing Assassin
[ 167566 ] = { 68 , 30 , 30 , 95 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 } , --5 repeating after
--Vile Occultist
[ 165763 ] = { 68 , 60 , 64.2 , 30 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 } , --5 repeating fter
--Soul Infuser
[ 165762 ] = { 32 , 120 } ,
--Pestering Fiend (TODO, something off about this one)
[ 168700 ] = { 58 , 35 } , --Only one spawn in entire fight has spawn event, so rest of timers after 58 very iffy
--Rockbound Vanquisher
[ 165764 ] = { 8 , 60 , 60 } ,
} ,
} ,
[ 2 ] = { --Post Shade Departure Adds
[ " lfr " ] = { --LFR timers from Jan 5th (initial sets can come up to 3 seconds later, earliest clearly intended CDs used)
--Bleakwing Assassin
[ 167566 ] = { 20 , 60 , 80 } ,
--Vile Occultist
[ 165763 ] = { 40 , 140 } ,
--Soul Infuser
[ 165762 ] = { 103 , 80 } , --80 iffy, could be 70 or 75
--Pestering Fiend
[ 168700 ] = { 20 , 60 , 40 , 40 } ,
--Rockbound Vanquisher
[ 165764 ] = { 3 , 70 , 70 } ,
} ,
[ " normal " ] = { --Normal timers from Dec 9th
--Bleakwing Assassin
[ 167566 ] = { 58.7 , 70 , 65 , 75 , 70 } ,
--Vile Occultist
[ 165763 ] = { 94.2 , 70 , 140 } ,
--Soul Infuser
[ 165762 ] = { 24.2 , 140 , 70 } ,
--Pestering Fiend
[ 168700 ] = { 58.7 , 70 , 65 , 75 , 70 } ,
--Rockbound Vanquisher
[ 165764 ] = { 3.5 , 70 , 60 , 70 } ,
} ,
[ " heroic " ] = {
--Bleakwing Assassin
[ 167566 ] = { 23.4 , 60 , 30 , 40 , 50 , 30 } ,
--Vile Occultist
[ 165763 ] = { 113.5 , 70 } ,
--Soul Infuser
[ 165762 ] = { 60 , 50 } , --Iff, no spawn event, just first seen event
--Pestering Fiend
[ 168700 ] = { 23.5 , 30 , 30 , 30 , 70 , 30 , 30 } , --They still spawn sometimes with no spawn event, the two 30s were picked up by damage
--Rockbound Vanquisher
[ 165764 ] = { 3.5 , 65 , 65 , 65 , 15 } ,
} ,
[ " mythic " ] = { --Mythic testing timers Sept 25th
--Bleakwing Assassin
[ 167566 ] = { 23.3 , 120 , 70 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 } , --5 repeating after 70
--Vile Occultist
[ 165763 ] = { 23.3 , 120 , 35 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 } , --5 repeating after 35
--Soul Infuser
[ 165762 ] = { 90 , 100 , 35 } , --5 repeating after 35 (iffy, so not enabled yet)
--Pestering Fiend
[ 168700 ] = { } , --None?
--Rockbound Vanquisher
[ 165764 ] = { 3.5 , 70 , 70 , 70 } ,
} ,
} ,
}
local updateInfoFrame
do
local DBM = DBM
local GetTime = GetTime
local mfloor , twipe = math.floor , table.wipe
local lines , sortedLines = { } , { }
local function addLine ( key , value )
-- sort by insertion order
lines [ key ] = value
sortedLines [ # sortedLines + 1 ] = key
end
updateInfoFrame = function ( )
twipe ( lines )
twipe ( sortedLines )
--Infuser's Boon targets
if # infuserTargets > 0 then
-- addLine("---"..infusersBoon.."---")
for i = 1 , # infuserTargets do
local name = infuserTargets [ i ]
local uId = DBM : GetRaidUnitId ( name )
if uId then
local _ , _ , infuserCount , _ , _ , infuserExpireTime = DBM : UnitDebuff ( uId , 326078 )
if infuserExpireTime then --Has count, show count and infuser remaining
addLine ( i .. " * " .. name , ( infuserCount or 1 ) .. " - " .. mfloor ( infuserExpireTime - GetTime ( ) ) )
end
end
end
else --Nothing left to track, auto hide
DBM.InfoFrame : Hide ( )
end
return lines , sortedLines
end
end
local function setForcedAddSpawns ( self )
self.vb . addMode = 1
end
local function expectedVile ( self )
self.vb . occultistCount = self.vb . occultistCount + 1
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ 165763 ] [ self.vb . occultistCount + 1 ]
if timer and not self.vb . shadeActive then
timerVileOccultistCD : Start ( timer - 10 , self.vb . occultistCount + 1 )
self : Unschedule ( expectedVile )
self : Schedule ( timer , expectedVile , self )
end
end
local function expectedInfuser ( self )
self.vb . infuserCount = self.vb . infuserCount + 1
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ 165762 ] [ self.vb . infuserCount + 1 ]
if timer and not self.vb . shadeActive then
timerSoulInfuserCD : Start ( timer - 10 , self.vb . infuserCount + 1 )
self : Unschedule ( expectedInfuser )
self : Schedule ( timer , expectedInfuser , self )
end
end
function mod : OnCombatStart ( delay )
self : SetStage ( 1 )
self.vb . addMode = 0
self.vb . addCount = 0
self.vb . healerOrbCount = 0
self.vb . assassinCount = 0
self.vb . occultistCount = 0
self.vb . infuserCount = 0
self.vb . fiendCount = 0
self.vb . vanquisherCount = 0
self.vb . shadeActive = false
self.vb . cloakActive = false
self.vb . cloakCount = 0
table.wipe ( seenAdds )
table.wipe ( castsPerGUID )
table.wipe ( infuserTargets )
table.wipe ( birdoTracker )
timerGreaterCastigationCD : Start ( 5.8 )
-- berserkTimer:Start(-delay)--Confirmed normal and heroic
if self.Options . RangeFrame then
DBM.RangeCheck : Show ( 6 )
end
if self.Options . NPAuraOnPhoenixFixate then
DBM : FireEvent ( " BossMod_EnableHostileNameplates " )
end
self : Schedule ( 42 , setForcedAddSpawns , self )
--Same on all
timerVanquisherCD : Start ( 50 , 1 )
if self : IsMythic ( ) then
difficultyName = " mythic "
timerSoulInfuserCD : Start ( 75 , 1 )
self : Unschedule ( expectedInfuser )
self : Schedule ( 85 , expectedInfuser , self )
-- timerPesteringFiendCD:Start(100, 1)
timerBleakwingAssassinCD : Start ( 110 , 1 )
timerVileOccultistCD : Start ( 110 , 1 )
self : Unschedule ( expectedVile )
self : Schedule ( 120 , expectedVile , self )
timerCloakofFlamesCD : Start ( 80 , 1 ) --IFFY
elseif self : IsHeroic ( ) then
difficultyName = " heroic "
timerBleakwingAssassinCD : Start ( 70 , 1 )
timerVileOccultistCD : Start ( 70 , 1 )
self : Unschedule ( expectedVile )
self : Schedule ( 80 , expectedVile , self )
timerPesteringFiendCD : Start ( 100 , 1 )
timerSoulInfuserCD : Start ( 130 , 1 )
self : Unschedule ( expectedInfuser )
self : Schedule ( 140 , expectedInfuser , self )
elseif self : IsNormal ( ) then
difficultyName = " normal "
timerBleakwingAssassinCD : Start ( 70 , 1 )
timerPesteringFiendCD : Start ( 70 , 1 )
timerVileOccultistCD : Start ( 105 , 1 )
self : Unschedule ( expectedVile )
self : Schedule ( 115 , expectedVile , self )
timerSoulInfuserCD : Start ( 185 , 1 )
self : Unschedule ( expectedInfuser )
self : Schedule ( 195 , expectedInfuser , self )
else
difficultyName = " lfr "
timerBleakwingAssassinCD : Start ( 70 , 1 )
timerPesteringFiendCD : Start ( 70 , 1 )
timerVileOccultistCD : Start ( 90 , 1 )
self : Unschedule ( expectedVile )
self : Schedule ( 110 , expectedVile , self )
timerSoulInfuserCD : Start ( 170 , 1 )
self : Unschedule ( expectedInfuser )
self : Schedule ( 180 , expectedInfuser , self )
end
end
function mod : OnCombatEnd ( wipe )
table.wipe ( seenAdds )
table.wipe ( castsPerGUID )
table.wipe ( infuserTargets )
if self.Options . InfoFrame then
DBM.InfoFrame : Hide ( )
end
if self.Options . RangeFrame then
DBM.RangeCheck : Hide ( )
end
if self.Options . NPAuraOnPhoenixFixate 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 "
elseif self : IsNormal ( ) then
difficultyName = " normal "
else
difficultyName = " lfr "
end
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 325877 then
timerEmberBlastCD : Start ( self : IsMythic ( ) and 24.4 or 20.6 ) --Verify mythic still 24
elseif spellId == 329509 or spellId == 329518 then
specWarnBlazingSurge : Show ( )
specWarnBlazingSurge : Play ( " shockwave " )
timerBlazingSurgeCD : Start ( )
elseif spellId == 328885 then
timerGreaterCastigationCD : Start ( )
elseif spellId == 325440 then
--Announce the cast? seems only stacks worth announcing
timerVanquishingStrikeCD : Start ( 6.1 , args.sourceGUID )
elseif spellId == 325506 then
if not castsPerGUID [ args.sourceGUID ] then
castsPerGUID [ args.sourceGUID ] = 0
self.vb . addCount = self.vb . addCount + 1
end
castsPerGUID [ args.sourceGUID ] = castsPerGUID [ args.sourceGUID ] + 1
local addnumber , count = self.vb . addCount , castsPerGUID [ args.sourceGUID ]
warnConcussiveSmash : Show ( addnumber .. " - " .. count )
timerConcussiveSmashCD : Start ( 19.5 , count + 1 , args.sourceGUID )
elseif spellId == 333002 then
-- timerVulgarBrandCD:Start(15, args.sourceGUID)
if self : CheckInterruptFilter ( args.sourceGUID , false , true ) then
specWarnVulgarBrand : Show ( args.sourceName )
specWarnVulgarBrand : Play ( " kickcast " )
end
elseif spellId == 326455 then
if self.Options . SpecWarn326455spell then
specWarnFeiryStrike : Show ( )
specWarnFeiryStrike : Play ( " shockwave " )
else
warnFeiryStrike : Show ( )
end
timerFieryStrikeCD : Start ( )
end
end
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if spellId == 326583 then
-- timerCrimsonFuryCD:Start(15, args.sourceGUID)
elseif spellId == 325665 and self : AntiSpam ( 3 , 3 ) then
warnSoulInfusion : Show ( )
elseif spellId == 181113 then --Encounter Spawn
local cid = self : GetCIDFromGUID ( args.sourceGUID )
self : SendSync ( " Spawn " , cid ) --Until blizzard works out what's going wrong with CLEU range for this event, DBM is now going to spam comms for accuracy
if self : AntiSpam ( 8 , cid ) then
if cid == 165764 then --Rockbound Vanquisher
if self.vb . addMode == 0 then
self.vb . addMode = 1
end
self.vb . vanquisherCount = self.vb . vanquisherCount + 1
warnVanquisher : Show ( self.vb . vanquisherCount )
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ cid ] [ self.vb . vanquisherCount + 1 ]
if timer and timer > 5 then
timerVanquisherCD : Start ( timer , self.vb . vanquisherCount + 1 )
end
timerVanquishingStrikeCD : Start ( 19.2 , args.sourceGUID )
timerConcussiveSmashCD : Start ( 24.1 , 1 , args.sourceGUID ) --24-44?
elseif cid == 167566 then --bleakwing-assassin
self.vb . assassinCount = self.vb . assassinCount + 1
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ cid ] [ self.vb . assassinCount + 1 ]
if timer and timer > 5 then
timerBleakwingAssassinCD : Start ( timer , self.vb . assassinCount + 1 )
end
elseif cid == 165763 then --vile-occultist
self.vb . occultistCount = self.vb . occultistCount + 1
warnVileOccultists : Show ( self.vb . occultistCount )
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ cid ] [ self.vb . occultistCount + 1 ]
if timer and timer > 5 then
timerVileOccultistCD : Start ( timer , self.vb . occultistCount + 1 )
self : Unschedule ( expectedVile )
self : Schedule ( timer + 10 , expectedVile , self )
end
elseif cid == 165762 then
self.vb . infuserCount = self.vb . infuserCount + 1
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ cid ] [ self.vb . infuserCount + 1 ]
if timer then
timerSoulInfuserCD : Start ( timer , self.vb . infuserCount + 1 )
self : Unschedule ( expectedInfuser )
self : Schedule ( timer + 10 , expectedInfuser , self )
end
elseif cid == 168700 then
self.vb . fiendCount = self.vb . fiendCount + 1
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ cid ] [ self.vb . fiendCount + 1 ]
if timer and timer > 5 then
timerPesteringFiendCD : Start ( timer , self.vb . fiendCount + 1 )
end
-- elseif cid == 168962 then--Reborn Phoenix
end
end
end
end
function mod : SPELL_SUMMON ( args )
local spellId = args.spellId
if spellId == 329565 and self : AntiSpam ( 3 , 5 ) then
--Doesn't really need to announce all of them, just that one is up within 5 seconds
warnSummonEssenceFont : Show ( )
elseif spellId == 326075 then --Not throttled, since healers will need to know how many drop and what count
self.vb . healerOrbCount = self.vb . healerOrbCount + 1
warnInfusersOrb : Show ( self.vb . healerOrbCount )
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 326456 then
local amount = args.amount or 1
if amount % 3 == 0 then
if amount >= 3 then
if args : IsPlayer ( ) then
specWarnBurningRemnants : Show ( amount )
specWarnBurningRemnants : Play ( " stackhigh " )
else
local _ , _ , _ , _ , _ , expireTime = DBM : UnitDebuff ( " player " , spellId )
local remaining
if expireTime then
remaining = expireTime - GetTime ( )
end
if ( not remaining or remaining and remaining < 8.5 ) and not UnitIsDeadOrGhost ( " player " ) then
specWarnBurningRemnantsTaunt : Show ( args.destName )
specWarnBurningRemnantsTaunt : Play ( " tauntboss " )
else
warnBurningRemnants : Show ( args.destName , amount )
end
end
else
warnBurningRemnants : Show ( args.destName , amount )
end
end
elseif spellId == 325442 then
local amount = args.amount or 1
if amount >= 3 then
if args : IsPlayer ( ) then
specWarnVanquished : Show ( amount )
specWarnVanquished : Play ( " stackhigh " )
else
if not UnitIsDeadOrGhost ( " player " ) and not DBM : UnitDebuff ( " player " , spellId ) then
specWarnVanquishedTaunt : Show ( args.destName )
specWarnVanquishedTaunt : Play ( " tauntboss " )
else
warnVanquished : Show ( args.destName , amount )
end
end
else
warnVanquished : Show ( args.destName , amount )
end
elseif ( spellId == 328659 or spellId == 341254 ) then
if self : AntiSpam ( 10 , 1 ) then --In case more than one spawn at once
warnRebornPhoenix : Show ( )
end
--Table store guids for birdo as they spawn so we can strictly assign raid icons to them by GUID
if not tContains ( birdoTracker , args.destGUID ) then
birdoTracker [ # birdoTracker + 1 ] = args.destGUID
end
--Scan runs even if we don't store it as a new bird, because the icon needs to be restored when bird rezes
if self.Options . SetIconOnBirdo then
for i = 1 , # birdoTracker do
if i == 9 then return end --More birds than we have icons
if birdoTracker [ i ] == args.destGUID then
self : ScanForMobs ( args.destGUID , 2 , i + 1 , 1 , nil , 10 , " SetIconOnBirdo " )
break
end
end
end
elseif spellId == 328731 then
timerPhoenixRespawn : Start ( 20 , args.destGUID )
elseif spellId == 333145 and self : AntiSpam ( 5 , args.destName ) then
warnReturnToStone : Show ( args.destName )
elseif spellId == 326078 then
if not tContains ( infuserTargets , args.destName ) then
table.insert ( infuserTargets , args.destName )
end
if self.Options . InfoFrame and not DBM.InfoFrame : IsShown ( ) and not self.vb . cloakActive then
DBM.InfoFrame : SetHeader ( infusersBoon )
DBM.InfoFrame : Show ( 8 , " function " , updateInfoFrame , false , false )
end
elseif spellId == 332871 and args : IsPlayer ( ) then
specWarnGreaterCastigation : Show ( )
specWarnGreaterCastigation : Play ( " scatter " )
elseif spellId == 326583 or spellId == 341473 then
warnCrimsonFury : CombinedShow ( 0.5 , args.destName )
if args : IsPlayer ( ) and self : AntiSpam ( 3 , 8 ) then
specWarnCrimsonFury : Show ( )
specWarnCrimsonFury : Play ( " runout " )
yellCrimsonFury : Yell ( )
end
elseif spellId == 328479 then
warnEyeOnTarget : CombinedShow ( 1 , args.destName )
if args : IsPlayer ( ) then
if self : AntiSpam ( 3 , 4 ) then
specWarnEyeOnTarget : Show ( )
specWarnEyeOnTarget : Play ( " targetyou " )
yellEyeOnTarget : Yell ( )
end
if self.Options . NPAuraOnPhoenixFixate then
DBM.Nameplate : Show ( true , args.sourceGUID , spellId , nil , 10 )
end
end
elseif spellId == 323402 and self : AntiSpam ( 3 , 7 ) then --Reflection of Guilt (Shade Coming out)
self : SetStage ( 2 )
self.vb . shadeActive = true
self.vb . cloakCount = 0
timerSoulInfuserCD : Stop ( )
self : Unschedule ( expectedInfuser )
self : Unschedule ( expectedVile )
timerPesteringFiendCD : Stop ( )
timerBleakwingAssassinCD : Stop ( )
timerVileOccultistCD : Stop ( )
timerVanquisherCD : Stop ( )
specWarnShadeSpawned : Show ( )
specWarnShadeSpawned : Play ( " bigmob " )
timerFieryStrikeCD : Start ( 14 )
timerEmberBlastCD : Start ( 19.1 )
timerBlazingSurgeCD : Start ( 28.8 )
if self : IsMythic ( ) then
timerCloakofFlamesCD : Start ( 39 , 1 )
end
elseif spellId == 337859 or spellId == 343026 then
self.vb . cloakCount = self.vb . cloakCount + 1
timerCloakofFlamesCD : Start ( spellId == 337859 and 60 or 30 , self.vb . cloakCount + 1 )
self.vb . cloakActive = true
if self.Options . InfoFrame then --Show dps one over the healing one
DBM.InfoFrame : SetHeader ( args.spellName )
DBM.InfoFrame : Show ( 2 , " enemyabsorb " , nil , args.amount , " boss1 " )
end
elseif spellId == 335581 then --Carrying Essence Font
if self : AntiSpam ( 8 , 165763 ) then --Backup Vile Occultist spawn detection since blizzard disabled their Encounter Spawn
self.vb . occultistCount = self.vb . occultistCount + 1
warnVileOccultists : Show ( self.vb . occultistCount )
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ 165763 ] [ self.vb . occultistCount + 1 ]
if timer and timer > 5 then
timerVileOccultistCD : Start ( timer , self.vb . occultistCount + 1 )
end
end
elseif spellId == 325873 then
if args : IsPlayer ( ) then
specWarnEmberBlast : Show ( DBM_COMMON_L.ALLIES )
specWarnEmberBlast : Play ( " gathershare " )
yellEmberBlast : Yell ( )
yellEmberBlastFades : Countdown ( self : IsLFR ( ) and 5 or 3 )
elseif self.Options . SpecWarn325877moveto then
specWarnEmberBlast : Show ( args.destName )
specWarnEmberBlast : Play ( " gathershare " )
else
warnEmberBlast : Show ( args.destName )
end
if self.Options . SetIconOnEmberBlast then
self : SetIcon ( args.destName , 1 )
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod : SPELL_AURA_REMOVED ( args )
local spellId = args.spellId
if spellId == 328731 then
timerPhoenixRespawn : Stop ( args.destGUID )
elseif spellId == 326078 then
infuserTargets [ args.destName ] = nil
elseif spellId == 328479 then
if self.Options . NPAuraOnPhoenixFixate then
DBM.Nameplate : Hide ( true , args.sourceGUID , spellId )
end
elseif spellId == 323402 then --Reflection of Guilt (Shade Leaving)
self : SetStage ( 1 )
self.vb . shadeActive = false
self.vb . addMode = 2
self.vb . assassinCount = 0
self.vb . occultistCount = 0
self.vb . infuserCount = 0
self.vb . fiendCount = 0
self.vb . vanquisherCount = 0
self.vb . cloakCount = 0
timerEmberBlastCD : Stop ( )
timerBlazingSurgeCD : Stop ( )
timerFieryStrikeCD : Stop ( )
self : Unschedule ( expectedVile )
self : Unschedule ( expectedInfuser )
if self : IsMythic ( ) then
timerVanquisherCD : Start ( 3.5 , 1 )
timerBleakwingAssassinCD : Start ( 23.3 , 1 )
timerVileOccultistCD : Start ( 23.3 , 1 )
self : Schedule ( 33.3 , expectedVile , self )
timerSoulInfuserCD : Start ( 90 , 1 )
self : Schedule ( 100 , expectedInfuser , self )
--timerPesteringFiendCD:Start(4, 1)--None seem to spawn anymore after shades?
if self : IsMythic ( ) then
timerCloakofFlamesCD : Start ( 34.1 , 1 )
end
elseif self : IsHeroic ( ) then
timerVanquisherCD : Start ( 3.5 , 1 )
timerBleakwingAssassinCD : Start ( 23.5 , 1 )
timerPesteringFiendCD : Start ( 23.5 , 1 )
timerSoulInfuserCD : Start ( 60 , 1 )
self : Schedule ( 70 , expectedInfuser , self )
timerVileOccultistCD : Start ( 133.5 , 1 )
self : Schedule ( 143.5 , expectedVile , self )
elseif self : IsNormal ( ) then --Normal
timerVanquisherCD : Start ( 3.5 , 1 )
timerSoulInfuserCD : Start ( 24.2 , 1 )
self : Schedule ( 34.2 , expectedInfuser , self )
timerBleakwingAssassinCD : Start ( 58.7 , 1 )
timerPesteringFiendCD : Start ( 58.7 , 1 )
timerVileOccultistCD : Start ( 94.2 , 1 )
self : Schedule ( 104.2 , expectedVile , self )
else --LFR
timerVanquisherCD : Start ( 3 , 1 )
timerBleakwingAssassinCD : Start ( 20 , 1 )
timerPesteringFiendCD : Start ( 20 , 1 )
timerVileOccultistCD : Start ( 40 , 1 )
self : Schedule ( 60 , expectedVile , self )
timerSoulInfuserCD : Start ( 103 , 1 )
self : Schedule ( 113 , expectedInfuser , self )
end
elseif spellId == 337859 or spellId == 343026 then
self.vb . cloakActive = false
if spellId == 343026 then
specWarnUnleashedPyroclasm : Show ( args.destName )
specWarnUnleashedPyroclasm : Play ( " kickcast " )
end
if self.Options . InfoFrame and spellId == 343026 then
if # infuserTargets > 0 then
DBM.InfoFrame : SetHeader ( infusersBoon )
DBM.InfoFrame : Show ( 8 , " function " , updateInfoFrame , false , false )
else
DBM.InfoFrame : Hide ( )
end
end
elseif spellId == 325873 then
if args : IsPlayer ( ) then
yellEmberBlastFades : Cancel ( )
end
if self.Options . SetIconOnEmberBlast then
self : SetIcon ( args.destName , 0 )
end
end
end
function mod : UNIT_DIED ( args )
local cid = self : GetCIDFromGUID ( args.destGUID )
if cid == 168973 then --High Torturer Darithos
timerGreaterCastigationCD : Stop ( )
--Adds haven't spawned automatically yet, so this death is triggering add spawns script
if self.vb . addMode == 0 then
self.vb . addMode = 1
timerVanquisherCD : Stop ( )
timerSoulInfuserCD : Stop ( )
self : Unschedule ( expectedInfuser )
timerPesteringFiendCD : Stop ( )
timerBleakwingAssassinCD : Stop ( )
timerVileOccultistCD : Stop ( )
timerCloakofFlamesCD : Stop ( )
self : Unschedule ( expectedInfuser )
self : Unschedule ( expectedVile )
if self : IsMythic ( ) then
timerVanquisherCD : Start ( 8 , 1 )
timerSoulInfuserCD : Start ( 32 , 1 )
self : Schedule ( 42 , expectedInfuser , self )
--timerPesteringFiendCD:Start(58, 1)
timerBleakwingAssassinCD : Start ( 68 , 1 )
timerVileOccultistCD : Start ( 68 , 1 )
self : Schedule ( 78 , expectedVile , self )
timerCloakofFlamesCD : Start ( 38 , 1 ) --Mythic Only
elseif self : IsHeroic ( ) then
timerVanquisherCD : Start ( 8 , 1 )
timerBleakwingAssassinCD : Start ( 28 , 1 )
timerVileOccultistCD : Start ( 28 , 1 )
self : Schedule ( 38 , expectedVile , self )
timerPesteringFiendCD : Start ( 58 , 1 )
timerSoulInfuserCD : Start ( 88 , 1 )
self : Schedule ( 98 , expectedInfuser , self )
elseif self : IsNormal ( ) then
timerVanquisherCD : Start ( 8 , 1 )
timerBleakwingAssassinCD : Start ( 28 , 1 )
timerPesteringFiendCD : Start ( 28 , 1 )
timerVileOccultistCD : Start ( 63 , 1 )
self : Schedule ( 73 , expectedVile , self )
timerSoulInfuserCD : Start ( 133 , 1 )
self : Schedule ( 143 , expectedInfuser , self )
else --LFR
timerVanquisherCD : Start ( 8 , 1 )
timerBleakwingAssassinCD : Start ( 28 , 1 )
timerPesteringFiendCD : Start ( 28 , 1 )
timerVileOccultistCD : Start ( 48 , 1 )
self : Schedule ( 68 , expectedVile , self )
timerSoulInfuserCD : Start ( 108 , 1 )
self : Schedule ( 118 , expectedInfuser , self )
end
end
elseif cid == 165764 then --Rockbound Vanquisher
timerVanquishingStrikeCD : Stop ( args.destGUID )
timerConcussiveSmashCD : Stop ( ( castsPerGUID [ args.destGUID ] or 0 ) + 1 , args.destGUID )
-- elseif cid == 167566 then--bleakwing-assassin
-- timerCrimsonFuryCD:Stop(args.destGUID)
-- elseif cid == 165763 then--vile-occultist
-- timerVulgarBrandCD:Stop(args.destGUID)
-- elseif cid == 168962 then--Reborn Phoenix
end
end
function mod : SPELL_PERIODIC_DAMAGE ( _ , _ , _ , _ , destGUID , _ , _ , _ , spellId , spellName )
if spellId == 328579 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 : OnSync ( msg , guid , sender )
if not self : IsInCombat ( ) then return end
if msg == " Spawn " and sender then
local cid = self : GetCIDFromGUID ( guid )
if self : AntiSpam ( 8 , cid ) then
if cid == 165764 then --Rockbound Vanquisher
if self.vb . addMode == 0 then
self.vb . addMode = 1
end
self.vb . vanquisherCount = self.vb . vanquisherCount + 1
warnVanquisher : Show ( self.vb . vanquisherCount )
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ cid ] [ self.vb . vanquisherCount + 1 ]
if timer and timer > 5 then
timerVanquisherCD : Start ( timer , self.vb . vanquisherCount + 1 )
end
timerVanquishingStrikeCD : Start ( 19.2 , guid )
timerConcussiveSmashCD : Start ( 24.1 , 1 , guid ) --24-44
elseif cid == 167566 then --bleakwing-assassin
self.vb . assassinCount = self.vb . assassinCount + 1
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ cid ] [ self.vb . assassinCount + 1 ]
if timer and timer > 5 then
timerBleakwingAssassinCD : Start ( timer , self.vb . assassinCount + 1 )
end
elseif cid == 165763 then --vile-occultist
self.vb . occultistCount = self.vb . occultistCount + 1
warnVileOccultists : Show ( self.vb . occultistCount )
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ cid ] [ self.vb . occultistCount + 1 ]
if timer and timer > 5 then
timerVileOccultistCD : Start ( timer , self.vb . occultistCount + 1 )
self : Unschedule ( expectedVile )
self : Schedule ( timer + 10 , expectedVile , self )
end
elseif cid == 165762 then
self.vb . infuserCount = self.vb . infuserCount + 1
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ cid ] [ self.vb . infuserCount + 1 ]
if timer and timer > 5 then
timerSoulInfuserCD : Start ( timer , self.vb . infuserCount + 1 )
self : Unschedule ( expectedInfuser )
self : Schedule ( timer + 10 , expectedInfuser , self )
end
elseif cid == 168700 then
self.vb . fiendCount = self.vb . fiendCount + 1
local timer = addTimers [ self.vb . addMode ] [ difficultyName ] [ cid ] [ self.vb . fiendCount + 1 ]
if timer and timer > 5 then
timerPesteringFiendCD : Start ( timer , self.vb . fiendCount + 1 )
end
end
end
end
end