local mod = DBM : NewMod ( 2581 , " DBM-Party-WarWithin " , 5 , 1270 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240821022435 " )
mod : SetCreatureID ( 211089 )
mod : SetEncounterID ( 2838 )
mod : SetHotfixNoticeRev ( 20240706000000 )
--mod:SetMinSyncRevision(20211203000000)
--mod.respawnTime = 29
mod.sendMainBossGUID = true
mod : RegisterCombat ( " combat " )
mod : RegisterEventsInCombat (
" SPELL_CAST_START 427001 426860 426787 452127 452099 "
-- "SPELL_SUMMON 452145"
-- "SPELL_CAST_SUCCESS",
-- "SPELL_AURA_APPLIED",
-- "SPELL_AURA_REMOVED"
-- "SPELL_PERIODIC_DAMAGE",
-- "SPELL_PERIODIC_MISSED"
-- "UNIT_SPELLCAST_SUCCEEDED boss1"
)
--[[
( target.name = " Anub'ikkaj " or target.name = " Ascendant Vis'coxria " or target.name = " Deathscreamer Iken'tak " or target.name = " Ixkreten the Unbreakable " ) and ( type = " applybuff " or type = " removebuff " or type = " death " or type = " removebuffstack " or type = " applybuffstack " )
or ( source.name = " Anub'ikkaj " or source.name = " Ascendant Vis'coxria " or source.name = " Deathscreamer Iken'tak " or source.name = " Ixkreten the Unbreakable " ) and ( type = " cast " or type = " begincast " or type = " applybuff " or type = " removebuff " or type = " removebuffstack " or type = " applybuffstack " ) and not ability.id = 1
--]]
--[[
( ability.id = 427001 or ability.id = 426860 or ability.id = 426787 or ability.id = 452127 ) and type = " begincast "
or type = " dungeonencounterstart " or type = " dungeonencounterend "
or ability.id = 452145 and type = " summon "
or ability.id = 452099 and type = " begincast "
--]]
--TODO, auto marking Animate Shadows? 7 of them always spawn so it may be overkill
local warnAnimatedShadows = mod : NewCountAnnounce ( 452127 , 3 ) --Change to switch alert if they have to die asap
local specWarnTerrifyingSlam = mod : NewSpecialWarningRunCount ( 427001 , nil , nil , nil , 4 , 2 )
local specWarnDarkOrb = mod : NewSpecialWarningDodgeCount ( 426860 , nil , nil , nil , 2 , 2 )
local specWarnShadowDecay = mod : NewSpecialWarningDodgeCount ( 426787 , nil , nil , nil , 2 , 2 )
--local specWarnGTFO = mod:NewSpecialWarningGTFO(372820, nil, nil, nil, 1, 8)
local specWarnCongealedDarkness = mod : NewSpecialWarningInterruptCount ( 452099 , nil , nil , nil , 1 , 2 , 4 )
--All timers are 16 (or even lower) but are often extended to 23, 26, 33, or even in extreme cases 42.5
local timerTerrifyingSlamCD = mod : NewCDCountTimer ( 16 , 427001 , nil , nil , nil , 2 )
local timerDarkOrbCD = mod : NewCDCountTimer ( 16 , 426860 , nil , nil , nil , 3 )
local timerShadowDecayCD = mod : NewCDCountTimer ( 16 , 426787 , nil , nil , nil , 2 , nil , DBM_COMMON_L.HEALER_ICON )
local timerAnimateShadowsCD = mod : NewCDCountTimer ( 40 , 452127 , nil , nil , nil , 1 , nil , DBM_COMMON_L.MYTHIC_ICON )
mod : AddPrivateAuraSoundOption ( 426865 , true , 426860 , 1 ) --Dark Orb target
mod.vb . slamCount = 0
mod.vb . orbCount = 0
mod.vb . shadowCount = 0
mod.vb . addsCount = 0
local castsPerGUID = { }
--Animate Shadows triggers 7.5 second ICD
--Dark Orb triggers 9 second ICD
--Terrifying Slam triggers 7 second ICD
--Shadowy Decay triggers 11 second ICD
--No spells have spell priority. It truly is wild west despite how consistent it looks in some logs, look hard enough you find others
--Nerzhul code NOT usable here, upon further log review, there is no consistency because all spells (meaning no spell priority is in place)
local function updateAllTimers ( self , ICD )
DBM : Debug ( " updateAllTimers running " , 3 )
-- local nextCast = 0
if timerAnimateShadowsCD : GetRemaining ( self.vb . addsCount + 1 ) < ICD then
local elapsed , total = timerAnimateShadowsCD : GetTime ( self.vb . addsCount + 1 )
local extend = ICD - ( total - elapsed )
DBM : Debug ( " timerAnimateShadowsCD extended by: " .. extend , 2 )
timerAnimateShadowsCD : Update ( elapsed , total + extend , self.vb . addsCount + 1 )
-- nextCast = 1
end
if timerDarkOrbCD : GetRemaining ( self.vb . orbCount + 1 ) < ICD then
local elapsed , total = timerDarkOrbCD : GetTime ( self.vb . orbCount + 1 )
local extend = ICD - ( total - elapsed )
--if nextCast == 1 then--Previous spells in queue priority are head of it in line, auto adjust
-- extend = extend + 7.5
-- DBM:Debug("timerDarkOrbCD extended by: "..extend.." plus 7.5 for Animate Shadows", 2)
--else
DBM : Debug ( " timerDarkOrbCD extended by: " .. extend , 2 )
-- nextCast = 2
--end
timerDarkOrbCD : Update ( elapsed , total + extend , self.vb . orbCount + 1 )
end
if timerTerrifyingSlamCD : GetRemaining ( self.vb . slamCount + 1 ) < ICD then
local elapsed , total = timerTerrifyingSlamCD : GetTime ( self.vb . slamCount + 1 )
local extend = ICD - ( total - elapsed )
--if nextCast == 1 then--Previous spells in queue priority are head of it in line, auto adjust
-- extend = extend + 7.5
-- DBM:Debug("timerTerrifyingSlamCD extended by: "..extend.." plus 7.5 for Animate Shadows", 2)
--elseif nextCast == 2 then
-- extend = extend + 9
-- DBM:Debug("timerTerrifyingSlamCD extended by: "..extend.." plus 9 for Dark Orb", 2)
--else
DBM : Debug ( " timerTerrifyingSlamCD extended by: " .. extend , 2 )
-- nextCast = 3
--end
timerTerrifyingSlamCD : Update ( elapsed , total + extend , self.vb . slamCount + 1 )
end
if timerShadowDecayCD : GetRemaining ( self.vb . shadowCount + 1 ) < ICD then
local elapsed , total = timerShadowDecayCD : GetTime ( self.vb . shadowCount + 1 )
local extend = ICD - ( total - elapsed )
--if nextCast == 1 then--Previous spells in queue priority are head of it in line, auto adjust
-- extend = extend + 7.5
-- DBM:Debug("timerShadowDecayCD extended by: "..extend.." plus 7.5 for Animate Shadows", 2)
--elseif nextCast == 2 then
-- extend = extend + 9
-- DBM:Debug("timerShadowDecayCD extended by: "..extend.." plus 9 for Dark Orb", 2)
--elseif nextCast == 3 then
-- extend = extend + 7
-- DBM:Debug("timerShadowDecayCD extended by: "..extend.." plus 7 for Terrifying Slam", 2)
--else
DBM : Debug ( " timerShadowDecayCD extended by: " .. extend , 2 )
--end
timerShadowDecayCD : Update ( elapsed , total + extend , self.vb . shadowCount + 1 )
end
end
function mod : OnCombatStart ( delay )
self.vb . slamCount = 0
self.vb . orbCount = 0
self.vb . shadowCount = 0
self.vb . addsCount = 0
table.wipe ( castsPerGUID )
timerDarkOrbCD : Start ( 6 - delay , 1 )
timerTerrifyingSlamCD : Start ( 13 - delay , 1 )
timerShadowDecayCD : Start ( 20 - delay , 1 )
if self : IsMythic ( ) then
timerAnimateShadowsCD : Start ( 32 - delay , 1 )
end
self : EnablePrivateAuraSound ( 426865 , " targetyou " , 2 ) --Dark Orb
self : EnablePrivateAuraSound ( 450855 , " targetyou " , 2 , 426865 ) --Register Additional ID
end
function mod : SPELL_CAST_START ( args )
local spellId = args.spellId
if spellId == 427001 then
self.vb . slamCount = self.vb . slamCount + 1
specWarnTerrifyingSlam : Show ( self.vb . slamCount )
if DBM : UnitBuff ( " boss1 " , 427153 , 427154 ) then --Terrifying Empowerment
specWarnTerrifyingSlam : Play ( " carefly " )
specWarnTerrifyingSlam : ScheduleVoice ( 1.2 , " fearsoon " )
else
specWarnTerrifyingSlam : Play ( " justrun " )
end
timerTerrifyingSlamCD : Start ( nil , self.vb . slamCount + 1 )
updateAllTimers ( self , 7 )
elseif spellId == 426860 then
self.vb . orbCount = self.vb . orbCount + 1
specWarnDarkOrb : Show ( self.vb . orbCount )
specWarnDarkOrb : Play ( " watchorb " )
timerDarkOrbCD : Start ( nil , self.vb . orbCount + 1 )
updateAllTimers ( self , 9 )
elseif spellId == 426787 then
self.vb . shadowCount = self.vb . shadowCount + 1
specWarnShadowDecay : Show ( self.vb . shadowCount )
specWarnShadowDecay : Play ( " aesoon " )
timerShadowDecayCD : Start ( nil , self.vb . shadowCount + 1 )
updateAllTimers ( self , 11 )
elseif spellId == 452127 then
self.vb . addsCount = self.vb . addsCount + 1
warnAnimatedShadows : Show ( self.vb . addsCount )
timerAnimateShadowsCD : Start ( nil , self.vb . addsCount + 1 )
updateAllTimers ( self , 7.5 )
elseif spellId == 452099 then
if not castsPerGUID [ args.sourceGUID ] then
castsPerGUID [ args.sourceGUID ] = 0
end
castsPerGUID [ args.sourceGUID ] = castsPerGUID [ args.sourceGUID ] + 1
local count = castsPerGUID [ args.sourceGUID ]
if self : CheckInterruptFilter ( args.sourceGUID , false , false ) then --Count interrupt, so cooldown is not checked
specWarnCongealedDarkness : Show ( args.sourceName , count )
if count < 6 then
specWarnCongealedDarkness : Play ( " kick " .. count .. " r " )
else
specWarnCongealedDarkness : Play ( " kickcast " )
end
end
end
end
--[[
function mod : SPELL_SUMMON ( args )
local spellId = args.spellId
if spellId == 452145 then
end
end
--]]
--[[
function mod : SPELL_CAST_SUCCESS ( args )
local spellId = args.spellId
if spellId == 372858 then
end
end
--]]
--[[
function mod : SPELL_AURA_APPLIED ( args )
local spellId = args.spellId
if spellId == 372858 then
end
end
--mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
--]]
--[[
function mod : SPELL_PERIODIC_DAMAGE ( _ , _ , _ , _ , destGUID , _ , _ , _ , spellId , spellName )
if spellId == 372820 and destGUID == UnitGUID ( " player " ) and self : AntiSpam ( 3 , 2 ) then
specWarnGTFO : Show ( spellName )
specWarnGTFO : Play ( " watchfeet " )
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
--]]
--[[
function mod : UNIT_DIED ( args )
local cid = self : GetCIDFromGUID ( args.destGUID )
if cid == 193435 then
end
end
--]]
--[[
function mod : UNIT_SPELLCAST_SUCCEEDED ( uId , _ , spellId )
if spellId == 74859 then
end
end
--]]