local mod = DBM : NewMod ( 1903 , " DBM-Raids-Legion " , 2 , 875 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240426185020 " )
mod : SetCreatureID ( 118523 , 118374 , 118518 ) --118523 Huntress kasparian, 118374 Captain Yathae Moonstrike, 118518 Prestess Lunaspyre
mod : SetEncounterID ( 2050 )
--mod:SetBossHPInfoToHighest()
--mod:SetUsedIcons(1)
mod : SetHotfixNoticeRev ( 16282 )
mod.respawnTime = 14
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 236442 236712 239379 " ,
" SPELL_CAST_SUCCESS 236694 236547 236518 233263 237561 236672 239264 236442 " ,
" SPELL_AURA_APPLIED 234995 234996 236550 236596 233264 233263 236712 239264 236519 237561 236305 243262 " ,
" SPELL_AURA_APPLIED_DOSE 234995 234996 239264 " ,
" SPELL_AURA_REMOVED 236712 233263 236305 " ,
-- "SPELL_PERIODIC_DAMAGE",
-- "SPELL_PERIODIC_MISSED",
-- "CHAT_MSG_RAID_BOSS_EMOTE",
" UNIT_SPELLCAST_SUCCEEDED boss1 boss2 boss3 "
)
--[[
( ability.id = 236694 or ability.id = 236442 or ability.id = 239379 or ability.id = 236712 ) and type = " begincast " or
( ability.id = 237561 or ability.id = 236547 or ability.id = 236518 or ability.id = 233263 or ability.id = 239264 or ability.id = 236672 ) and type = " cast " or
( ability.id = 236305 ) and type = " applydebuff "
--]]
--Huntress Kasparian
--local warnTwilightGlaive = mod:NewTargetAnnounce(237561, 3)
--Captain Yathae Moonstrike
local warnPhase2 = mod : NewPhaseAnnounce ( 2 , 2 , nil , nil , nil , nil , nil , 2 )
--local warnIncorporealShot = mod:NewTargetAnnounce(236305, 3)
local warnRapidShot = mod : NewTargetAnnounce ( 236596 , 3 )
local warnTwilightVolley = mod : NewTargetAnnounce ( 236442 , 2 )
--Priestess Lunaspyre
local warnPhase3 = mod : NewPhaseAnnounce ( 3 , 2 , nil , nil , nil , nil , nil , 2 )
local warnLunarBeacon = mod : NewTargetAnnounce ( 236712 , 3 )
local warnLunarFire = mod : NewStackAnnounce ( 239264 , 2 , nil , " Tank " )
local warnMoonBurn = mod : NewTargetAnnounce ( 236519 , 3 )
--All
local specWarnFontofElune = mod : NewSpecialWarningStack ( 236357 , nil , 12 , nil , 2 , 1 , 6 )
local specWarnBerserk = mod : NewSpecialWarningSpell ( 243262 , nil , nil , nil , 3 , 2 )
--Huntress Kasparian
local specWarnGlaiveStorm = mod : NewSpecialWarningDodge ( 239379 , nil , nil , nil , 2 , 2 )
local specWarnTwilightGlaiveOther = mod : NewSpecialWarningTarget ( 237561 , nil , nil , nil , 2 , 2 )
local specWarnTwilightGlaive = mod : NewSpecialWarningMoveAway ( 237561 , nil , nil , nil , 2 , 2 )
local yellTwilightGlaive = mod : NewYell ( 237561 )
local specWarnDiscorporate = mod : NewSpecialWarningMoveTo ( 236550 , nil , nil , nil , 1 , 7 )
local specWarnDiscorporateSwap = mod : NewSpecialWarningTaunt ( 236550 , nil , nil , nil , 1 , 2 )
--Captain Yathae Moonstrike
local specWarnCallMoontalon = mod : NewSpecialWarningSwitch ( 236694 , " -Healer " , nil , nil , 1 , 2 )
local specWarnTwilightVolley = mod : NewSpecialWarningClose ( 236442 , nil , nil , nil , 2 , 2 )
local specWarnTwilightVolleyYou = mod : NewSpecialWarningYou ( 236442 , nil , nil , nil , 1 , 2 )
local yellTwilightVolley = mod : NewShortYell ( 236442 )
local specWarnIncorpShot = mod : NewSpecialWarningYou ( 236305 , nil , nil , nil , 1 , 2 )
local yellIncorpShot = mod : NewYell ( 236305 )
local specWarnIncorpShotOther = mod : NewSpecialWarningTarget ( 236305 , nil , nil , nil , 1 , 2 )
local specWarnRapidShot = mod : NewSpecialWarningYou ( 236596 , nil , nil , nil , 1 , 2 )
local yellRapidShot = mod : NewYell ( 236596 , nil , false , 2 )
--Priestess Lunaspyre
local specWarnEmbraceofEclipse = mod : NewSpecialWarningTarget ( 233264 , " Dps|Healer " , nil , nil , 3 )
local specWarnLunarBeacon = mod : NewSpecialWarningMoveAway ( 236712 , nil , nil , nil , 1 , 2 )
local yellLunarBeacon = mod : NewFadesYell ( 236712 )
local specWarnLunarFire = mod : NewSpecialWarningStack ( 239264 , nil , 2 , nil , nil , 1 , 2 )
local specWarnLunarFireOther = mod : NewSpecialWarningTaunt ( 239264 , nil , nil , nil , 1 , 2 )
local specWarnMoonBurn = mod : NewSpecialWarningMoveTo ( 236519 , nil , DBM_CORE_L.AUTO_SPEC_WARN_OPTIONS . you : format ( 236519 ) , nil , 1 , 7 )
--Huntress Kasparian
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 14992 ) )
local timerGlaiveStormCD = mod : NewNextCountTimer ( 54 , 239379 , nil , nil , nil , 3 , nil , nil , nil , 1 , 4 ) --Moon change special (but also used while inactive?)
--local timerTwilightGlaiveCD = mod:NewCDTimer(7.5, 237561, nil, nil, nil, 3)--6.1-34
local timerMoonGlaiveCD = mod : NewCDTimer ( 13.4 , 236547 , nil , " Tank " , nil , 5 , nil , DBM_COMMON_L.TANK_ICON ) --13.4-30 second variation, have fun with that
--Captain Yathae Moonstrike
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 14994 ) )
local timerIncorporealShotCD = mod : NewNextCountTimer ( 54 , 236305 , nil , nil , nil , 3 , nil , nil , nil , 1 , 4 ) --Moon change special (but also used while inactive?)
local timerCallMoontalonCD = mod : NewCDTimer ( 31 , 236694 , nil , nil , nil , 1 )
local timerTwilightVolleyCD = mod : NewCDTimer ( 12.8 , 236442 , nil , nil , nil , 2 ) --Cast while inactive. 8.5--20
local timerRapidShotCD = mod : NewCDTimer ( 18.2 , 236596 , nil , nil , nil , 3 ) --18.2 but sometimes 30
--Priestess Lunaspyre
mod : AddTimerLine ( DBM : EJ_GetSectionInfo ( 14997 ) )
local timerEmbraceofEclipseCD = mod : NewNextCountTimer ( 54 , 233264 , nil , nil , nil , 5 , nil , DBM_COMMON_L.HEALER_ICON .. DBM_COMMON_L.DAMAGE_ICON , nil , 1 , 4 ) --Moon change special (but also used while inactive in phase 1)
local timerLunarBeaconCD = mod : NewCDTimer ( 20.6 , 236712 , nil , nil , nil , 3 ) --20.6-31.7
local timerLunarFireCD = mod : NewCDTimer ( 11 , 239264 , nil , " Tank " , nil , 5 , nil , DBM_COMMON_L.TANK_ICON )
local timerMoonBurnCD = mod : NewCDTimer ( 23 , 236519 , nil , nil , nil , 3 ) --Used while inactive
local berserkTimer = mod : NewBerserkTimer ( 660 )
mod : AddSetIconOption ( " SetIconOnIncorpShot " , 236305 , true )
mod : AddInfoFrameOption ( 233263 , true )
--mod:AddRangeFrameOption("5/8/15")
mod.vb . phase = 1
mod.vb . twilightGlaiveCount = 0
mod.vb . eclipseCount = 0
mod.vb . beaconCount = 0
mod.vb . moonTalonCount = 0
mod.vb . pulltime = 0
mod.vb . specialCount = 0
mod.vb . lastBeacon = false
local astralPurge = DBM : GetSpellName ( 234998 )
function mod : VolleyTarget ( targetname , uId )
if not targetname then return end
if targetname == UnitName ( " player " ) then
specWarnTwilightVolleyYou : Show ( )
specWarnTwilightVolleyYou : Play ( " runaway " )
yellTwilightVolley : Yell ( )
elseif self : CheckNearby ( 10 , targetname ) then
specWarnTwilightVolley : Show ( targetname )
specWarnTwilightVolley : Play ( " watchstep " )
else
warnTwilightVolley : Show ( targetname )
end
end
function mod : BeaconTarget ( targetname , uId )
if not targetname then return end
self.vb . lastBeacon = true
if targetname == UnitName ( " player " ) then
specWarnLunarBeacon : Show ( )
specWarnLunarBeacon : Play ( " runout " )
else
warnLunarBeacon : Show ( targetname )
end
end
--P1 Easy: Incorp Shot (P1 Heroic, Incorp and elcipse)
--P2 Easy: Eclipse (PS heroic, Eclipse and Glaives)
--P3 Eass: Glaives (PS heroic Glaives and Incorp)
function mod : OnCombatStart ( delay )
self.vb . phase = 1
self.vb . twilightGlaiveCount = 0
self.vb . eclipseCount = 0
self.vb . beaconCount = 0
self.vb . moonTalonCount = 0
self.vb . specialCount = 0
self.vb . pulltime = GetTime ( )
timerMoonBurnCD : Start ( 9.1 - delay )
timerMoonGlaiveCD : Start ( 14.4 - delay ) --16.6 on lat mythic test
timerTwilightVolleyCD : Start ( 15.5 - delay ) --15.5-17
--timerTwilightGlaiveCD:Start(17.4-delay)
timerIncorporealShotCD : Start ( 48 - delay , 1 ) --Primary in phase 1 in all modes
if not self : IsEasy ( ) then
timerEmbraceofEclipseCD : Start ( 48 - delay , 1 ) --Secondary special for heroic/mythic
if self : IsMythic ( ) then
berserkTimer : Start ( ) --11 min
end
end
end
function mod : OnCombatEnd ( )
if self.Options . InfoFrame then
DBM.InfoFrame : Hide ( )
end
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 236442 then
self : BossTargetScannerAbort ( args.sourceGUID , " VolleyTarget " )
self : ScheduleMethod ( 0.2 , " BossTargetScanner " , args.sourceGUID , " VolleyTarget " , 0.1 , 9 , true , nil , nil , nil , true )
elseif spellId == 236712 then
self.vb . beaconCount = self.vb . beaconCount + 1
timerLunarBeaconCD : Start ( 20.7 )
--["236712-Lunar Beacon"] = "pull:359.7, 31.7, 54.8, 23.1, 31.7, 23.1, 31.8, 21.9, 20.7, 29.2",
self : ScheduleMethod ( 0.2 , " BossTargetScanner " , args.sourceGUID , " BeaconTarget " , 0.1 , 12 , true , nil , nil , nil , true )
elseif spellId == 239379 then
specWarnGlaiveStorm : Show ( )
specWarnGlaiveStorm : Play ( " watchstep " )
timerGlaiveStormCD : Start ( nil , self.vb . specialCount + 1 )
if self : AntiSpam ( 5 , 2 ) then
self.vb . specialCount = self.vb . specialCount + 1
for i = 1 , 3 do
local unitGUID = UnitGUID ( " boss " .. i )
if unitGUID then
self : BossTargetScannerAbort ( unitGUID , " VolleyTarget " )
end
end
end
end
end
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if spellId == 236694 then
self.vb . moonTalonCount = self.vb . moonTalonCount + 1
specWarnCallMoontalon : Show ( )
specWarnCallMoontalon : Play ( " killbigmob " )
if self.vb . moonTalonCount == 1 then
local remaining = GetTime ( ) - self.vb . pulltime
timerCallMoontalonCD : Start ( 260 - remaining )
end
elseif spellId == 237561 then --^^
self.vb . twilightGlaiveCount = self.vb . twilightGlaiveCount + 1
--if self.vb.twilightGlaiveCount % 2 == 0 then
-- timerTwilightGlaiveCD:Start(30)
--else
--timerTwilightGlaiveCD:Start(7.5)
--end
--["237561-Twilight Glaive"] = "pull:18.4, 18.3, 21.9, 20.7, 19.4, 34.0, 18.2, 24.4, 20.7, 26.7, 7.3",
--["237561-Twilight Glaive"] = "pull:18.5, 18.2, 22.0, 19.1, 19.9, 34.9, 13.8, 22.0, 8.6, 20.7, 25.6, 7.3",
--["237561-Twilight Glaive"] = "pull:18.6, 18.3, 21.8, 19.5, 18.2, 36.5, 23.1, 23.2, 20.7, 25.5, 7.3, 20.7, 25.5, 8.5, 20.6, 25.6, 8.5, 20.7, 26.8, 6.1, 19.5, 29.2, 7.3, 20.7, 26.8, 8.5, 20.7, 25.6, 8.5, 19.4, 26.7, 8.6, 20.5",
elseif spellId == 236547 then
timerMoonGlaiveCD : Start ( )
elseif spellId == 236518 then
if self.vb . phase == 3 then
--timerMoonBurnCD:Start(16)--Not accurate in phase 3
else
timerMoonBurnCD : Start ( )
end
elseif spellId == 233263 then
timerEmbraceofEclipseCD : Start ( nil , self.vb . specialCount + 1 )
if self : AntiSpam ( 5 , 2 ) then
self.vb . specialCount = self.vb . specialCount + 1
for i = 1 , 3 do
local unitGUID = UnitGUID ( " boss " .. i )
if unitGUID then
self : BossTargetScannerAbort ( unitGUID , " VolleyTarget " )
end
end
end
elseif spellId == 236672 then
timerRapidShotCD : Start ( )
elseif spellId == 239264 then
timerLunarFireCD : Start ( )
elseif spellId == 236442 then
timerTwilightVolleyCD : Start ( )
end
end
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if ( spellId == 234995 or spellId == 234996 ) and args : IsPlayer ( ) and not self : IsTrivial ( ) then
local amount = args.amount or 1
if amount >= 12 and amount % 4 == 0 then
specWarnFontofElune : Show ( amount )
if self : IsMythic ( ) then
specWarnFontofElune : Play ( " stackhigh " )
else
specWarnFontofElune : Play ( " changemoon " )
end
end
elseif spellId == 239264 then
local uId = DBM : GetRaidUnitId ( args.destName )
if self : IsTanking ( uId ) then
local amount = args.amount or 1
if amount >= 2 then --Lasts 30 seconds, unknown reapplication rate, fine tune!
if args : IsPlayer ( ) then --At this point the other tank SHOULD be clear.
specWarnLunarFire : Show ( amount )
specWarnLunarFire : Play ( " stackhigh " )
else --Taunt as soon as stacks are clear, regardless of stack count.
if not UnitIsDeadOrGhost ( " player " ) and not DBM : UnitDebuff ( " player " , args.spellName ) then
specWarnLunarFireOther : Show ( args.destName )
specWarnLunarFireOther : Play ( " tauntboss " )
else
warnLunarFire : Show ( args.destName , amount )
end
end
else
warnLunarFire : Show ( args.destName , amount )
end
end
elseif spellId == 236550 then
local uId = DBM : GetRaidUnitId ( args.destName )
if self : IsTanking ( uId ) then
if args : IsPlayer ( ) then
specWarnDiscorporate : Show ( astralPurge )
specWarnDiscorporate : Play ( " changemoon " )
else
specWarnDiscorporateSwap : Show ( args.destName )
specWarnDiscorporateSwap : Play ( " tauntboss " )
end
end
elseif spellId == 236596 then
if args : IsPlayer ( ) then
specWarnRapidShot : Show ( )
specWarnRapidShot : Play ( " targetyou " )
yellRapidShot : Yell ( )
else
warnRapidShot : Show ( args.destName )
end
elseif spellId == 236305 then
if self : AntiSpam ( 5 , 3 ) then
timerIncorporealShotCD : Start ( nil , self.vb . specialCount + 1 )
end
if args : IsPlayer ( ) then
specWarnIncorpShot : Show ( )
specWarnIncorpShot : Play ( " targetyou " )
yellIncorpShot : Yell ( )
else
specWarnIncorpShotOther : Show ( args.destName )
specWarnIncorpShotOther : Play ( " helpsoak " )
end
if self.Options . SetIconOnIncorpShot then
self : SetIcon ( args.destName , 1 )
end
if self : AntiSpam ( 5 , 2 ) then
self.vb . specialCount = self.vb . specialCount + 1
for i = 1 , 3 do
local unitGUID = UnitGUID ( " boss " .. i )
if unitGUID then
self : BossTargetScannerAbort ( unitGUID , " VolleyTarget " )
end
end
end
elseif spellId == 233264 then --Dpser Embrace of the Eclipse
if not self : IsHealer ( ) then
specWarnEmbraceofEclipse : Show ( args.destName )
--specWarnEmbraceofEclipse:Play("targetchange")
end
elseif spellId == 233263 then --Healer Embrace of the Eclipse
self.vb . eclipseCount = self.vb . eclipseCount + 1
if self : IsHealer ( ) then
if self : AntiSpam ( 3 , 1 ) then
specWarnEmbraceofEclipse : Show ( ALL )
specWarnEmbraceofEclipse : Play ( " healall " )
end
end
if self.Options . InfoFrame and not DBM.InfoFrame : IsShown ( ) then
DBM.InfoFrame : SetHeader ( args.spellName )
DBM.InfoFrame : Show ( 6 , " playerabsorb " , args.spellName , select ( 16 , DBM : UnitDebuff ( args.destName , args.spellName ) ) )
end
elseif spellId == 236712 then
if args : IsPlayer ( ) then
if not self.vb . lastBeacon then
specWarnLunarBeacon : Show ( )
specWarnLunarBeacon : Play ( " runout " )
end
yellLunarBeacon : Countdown ( 6 )
else
if not self.vb . lastBeacon then
warnLunarBeacon : Show ( args.destName )
end
end
self.vb . lastBeacon = false
elseif spellId == 236519 then
warnMoonBurn : CombinedShow ( 0.3 , args.destName )
if args : IsPlayer ( ) then
specWarnMoonBurn : Show ( astralPurge )
specWarnMoonBurn : Play ( " changemoon " )
end
elseif spellId == 237561 then
if args : IsPlayer ( ) then
specWarnTwilightGlaive : Show ( )
specWarnTwilightGlaive : Play ( " runout " )
yellTwilightGlaive : Yell ( )
else
specWarnTwilightGlaiveOther : Show ( args.destName )
specWarnTwilightGlaiveOther : Play ( " farfromline " )
end
elseif spellId == 243262 and self : AntiSpam ( 3 , 4 ) then
specWarnBerserk : Show ( )
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod : SPELL_AURA_REMOVED ( args )
local spellId = args.spellId
if spellId == 236712 and args : IsPlayer ( ) then
yellLunarBeacon : Cancel ( )
elseif spellId == 233263 then
self.vb . eclipseCount = self.vb . eclipseCount - 1
if self.Options . InfoFrame and self.vb . eclipseCount == 0 then
DBM.InfoFrame : Hide ( )
end
elseif spellId == 236305 then
if self.Options . SetIconOnIncorpShot then
self : SetIcon ( args.destName , 1 )
end
end
end
function mod : UNIT_SPELLCAST_SUCCEEDED ( uId , _ , spellId )
--"<177.28 17:55:28> [UNIT_SPELLCAST_SUCCEEDED] Huntress Kasparian(Omegal) [[boss1:Captain Yathae Becomes Active Conversation::3-2083-1676-9420-243044-0023448060:243044]]", -- [3688]
--"<177.62 17:55:28> [CHAT_MSG_MONSTER_SAY] No more dawdling, Kasparian! Victory shall be mine!#Captain Yathae Moonstrike###Omegal##0#0##0#451#nil#0#false#false#false#false", -- [3698]
if spellId == 243044 then --Captain Yathae Becomes Active Conversation (Phase 2)
self.vb . phase = 2
local elapsedMoon , totalMoon = timerIncorporealShotCD : GetTime ( self.vb . specialCount + 1 ) --Grab current special from phase 1 special timer first
warnPhase2 : Show ( )
warnPhase2 : Play ( " ptwo " )
timerMoonGlaiveCD : Stop ( )
timerTwilightVolleyCD : Stop ( )
--timerTwilightGlaiveCD:Stop()
timerIncorporealShotCD : Stop ( ) --Stop Phase 1 special timer
timerCallMoontalonCD : Start ( 8 )
--timerTwilightGlaiveCD:Start(6)
timerTwilightVolleyCD : Start ( 10.9 )
timerRapidShotCD : Start ( 15.8 ) --Review
--Phase 2 ability: Eclipse. Next phase ability used on heroic+: Glaive
if totalMoon and totalMoon ~= 0 then
if self : IsEasy ( ) then --Eclipse starts
timerEmbraceofEclipseCD : Update ( elapsedMoon , totalMoon )
else --eclipse already running and glaive starts
timerGlaiveStormCD : Update ( elapsedMoon , totalMoon )
end
end
elseif spellId == 243047 then --Lunaspyre Becomes Active Conversation (Phase 3)
self.vb . phase = 3
local elapsedMoon , totalMoon = timerEmbraceofEclipseCD : GetTime ( self.vb . specialCount + 1 ) --Grab current special from phase 2 special timer first
warnPhase3 : Show ( )
warnPhase3 : Play ( " pthree " )
timerRapidShotCD : Stop ( )
timerTwilightVolleyCD : Stop ( )
timerEmbraceofEclipseCD : Stop ( ) --Stop phase 2 Special timer
timerMoonBurnCD : Stop ( )
timerCallMoontalonCD : Stop ( )
--timerTwilightGlaiveCD:Stop()
--timerTwilightGlaiveCD:Start(3)
timerLunarFireCD : Start ( 6 )
timerMoonBurnCD : Start ( 11 )
timerTwilightVolleyCD : Start ( 15.8 )
timerLunarBeaconCD : Start ( 18 )
--Phase 3 ability: Glaive. Next phase ability used on heroic+ (rolled around to phase 1): Incorpereal Shot
if totalMoon and totalMoon ~= 0 then
if self : IsEasy ( ) then --Glaive starts
timerGlaiveStormCD : Update ( elapsedMoon , totalMoon )
else
timerIncorporealShotCD : Update ( elapsedMoon , totalMoon )
end
end
elseif spellId == 61207 then --Sets all internal CDs back to 7 seconds
DBM : Debug ( " 7 second internal CD activated " )
for i = 1 , 3 do
local unitGUID = UnitGUID ( " boss " .. i )
if unitGUID then
self : BossTargetScannerAbort ( unitGUID , " VolleyTarget " )
end
end
local elapsedVolley , totalVolley = timerTwilightVolleyCD : GetTime ( )
local remaining = totalVolley - elapsedVolley
local extend = 7 - ( totalVolley - elapsedVolley )
if totalVolley == 0 then
DBM : Debug ( " 7 second timerTwilightVolleyCD started " , 2 )
timerTwilightVolleyCD : Start ( 7 )
elseif remaining < 7 then
DBM : Debug ( extend .. " second timerTwilightVolleyCD extend activated " , 2 )
timerTwilightVolleyCD : Update ( elapsedVolley , totalVolley + extend )
end
end
end