You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
497 lines
22 KiB
497 lines
22 KiB
local mod = DBM:NewMod(2457, "DBM-Sepulcher", nil, 1195)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20220920224913")
|
|
mod:SetCreatureID(181398, 181399)
|
|
mod:SetEncounterID(2543)
|
|
mod:SetUsedIcons(1, 2, 6, 7, 8)
|
|
mod:SetHotfixNoticeRev(20220320000000)
|
|
mod:SetMinSyncRevision(20220308000000)
|
|
--mod.respawnTime = 29
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_CAST_START 360006 361913 361923 359960 360717 360145 360229 360284 360300 360304",
|
|
"SPELL_CAST_SUCCESS 360420",
|
|
"SPELL_AURA_APPLIED 360300 360304 360012 361934 362020 361945 359963 360418 360146 360148 363191 360241 360287 364985",
|
|
"SPELL_AURA_APPLIED_DOSE 360287",
|
|
"SPELL_AURA_REMOVED 360300 360304 360012 361934 362020 361945 360418 360146 360148 363191 360241 360516 364985",
|
|
"UNIT_DIED"
|
|
)
|
|
|
|
--TODO, pre spread warning for cloud of carrion?
|
|
--TODO, manifest shadows need a special warning?
|
|
--TODO, possibly adjust timing of opened veins warning to better align with swaps of other boss, when more precise timings are known
|
|
--TODO, properly detect aura of shadow up. not sure if the buff is on boss or players, boss is assumed ATM
|
|
--TODO, tank defensive warnings may feel like too much by default and be better as opt ins, will guage feedback from testing (if there is testing)
|
|
--[[
|
|
(ability.id = 360006 or ability.id = 361913 or ability.id = 359960 or ability.id = 360717 or ability.id = 360145 or ability.id = 360229 or ability.id = 360284 or ability.id = 360300 or ability.id = 360304) and type = "begincast"
|
|
or (ability.id = 360319 or ability.id = 360420) and type = "cast"
|
|
or ability.id = 363191 or ability.id = 360516
|
|
or (ability.id = 360300 or ability.id = 360304) and type = "removebuff"
|
|
--]]
|
|
--General
|
|
--local specWarnGTFO = mod:NewSpecialWarningGTFO(340324, nil, nil, nil, 1, 8)
|
|
|
|
local berserkTimer = mod:NewBerserkTimer(600)
|
|
|
|
mod:AddRangeFrameOption("5/8/10")
|
|
--Mal'Ganis
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(23927))
|
|
local warnCloudofCarrion = mod:NewTargetNoFilterAnnounce(360012, 3)
|
|
local warnManifestShadows = mod:NewCountAnnounce(361913, 3)
|
|
local warnFullyFormed = mod:NewSpellAnnounce(361945, 3)
|
|
local warnUntoDarknessOver = mod:NewEndAnnounce(360319, 1)
|
|
|
|
local specWarnUntoDarkness = mod:NewSpecialWarningCount(360319, nil, nil, nil, 2, 2)
|
|
local specWarnCloudofCarrion = mod:NewSpecialWarningMoveAway(360012, nil, nil, nil, 2, 2)--Pre spread warning?
|
|
local specWarnCloudofCarrionDebuff = mod:NewSpecialWarningYou(360012, nil, nil, nil, 1, 2)
|
|
local specWarnCloudofCarrionDebuffMove = mod:NewSpecialWarningMoveTo(360012, false, nil, nil, 1, 2)--Off by default because person has to actually have basic understanding of mechanic first, then agree to this helpful warning to help with it
|
|
local yellCloudofCarrion = mod:NewYell(360012)
|
|
local yellBitingWounds = mod:NewIconRepeatYell(364985)
|
|
local specWarnLeechingClaws = mod:NewSpecialWarningDefensive(359960, nil, nil, nil, 1, 2)
|
|
local specWarnOpenedVeins = mod:NewSpecialWarningTaunt(359963, nil, nil, nil, 1, 2)
|
|
----Shadow adds
|
|
local specWarnRavenousHunger = mod:NewSpecialWarningInterruptCount(361923, "HasInterrupt", nil, nil, 1, 2)
|
|
|
|
local timerUntoDarknessCD = mod:NewCDCountTimer(102.4, 360319, nil, nil, nil, 6)--100+3sec cast time with standard variation, paused by infiltration of dread
|
|
local timerSwarmofDecay = mod:NewBuffActiveTimer(20, 360300, 56158, nil, nil, 6)--Short text swarm, timer is used for both swarms
|
|
local timerCloudofCarrionCD = mod:NewCDCountTimer(21.8, 360012, nil, nil, nil, 3)
|
|
local timerManifestShadowsCD = mod:NewCDCountTimer(1, 361913, nil, nil, nil, 1)--No in between time
|
|
local timerLeechingClawsCD = mod:NewCDTimer(16.9, 359960, nil, "Tank", nil, 5, nil, DBM_COMMON_L.TANK_ICON, nil, 2, 4)
|
|
|
|
mod:AddInfoFrameOption(360319, false)
|
|
mod:AddSetIconOption("SetIconOnManifestShadows", 361913, true, true, {6, 7, 8})--On by default since they'll be used by most interrupt helpers
|
|
mod:AddNamePlateOption("NPAuraOnIncompleteForm", 362020, false)--Off by default so it doesn't cover up interrupt weak aura counters, which i suspect many will use
|
|
mod:AddNamePlateOption("NPAuraOnFullyFormed", 361945, true)--Might also cover up interrupt weak auras, but this signifies target is now very dangerous but killable on mythic difficulty
|
|
mod:GroupSpells(360012, 364985)--Group biting wounds with cloud of carrion
|
|
--Kin'tessa
|
|
mod:AddTimerLine(DBM:EJ_GetSectionInfo(23929))
|
|
local warnShatterMind = mod:NewSpellAnnounce(360420, 4)--Kind of a generic alert to say "this pull is a wash"
|
|
local warnFearfulTrepidation = mod:NewTargetCountAnnounce(360146, 3, nil, nil, 39176, nil, nil, nil, true)
|
|
local warnAuraofShadows = mod:NewSpellAnnounce(363191, 4)
|
|
local warnAuraofShadowsOver = mod:NewEndAnnounce(363191, 1)
|
|
local warnSlumberCloud = mod:NewCountAnnounce(360229, 2)
|
|
local warnAnguishingStrike = mod:NewStackAnnounce(360284, 2, nil, "Tank|Healer", 31907)--shorttext "Strike"
|
|
|
|
local specWarnInfiltrationofDread = mod:NewSpecialWarningCount(360717, nil, nil, nil, 2, 2)
|
|
local specWarnFearfulTrepidation = mod:NewSpecialWarningYou(360146, nil, 39176, nil, 2, 2)
|
|
local yellFearfulTrepidation = mod:NewShortPosYell(360146, 39176)--Shorttext "Fear"
|
|
local yellFearfulTrepidationFades = mod:NewIconFadesYell(360146, 39176)
|
|
local specWarnBurstingDread = mod:NewSpecialWarningDispel(360148, "RemoveMagic", 39176, nil, 1, 2)--shorttext "Fear"
|
|
local specWarnUnsettlingDreams = mod:NewSpecialWarningDispel(360241, "RemoveMagic", nil, nil, 1, 2)
|
|
local specWarnAnguishingStrike = mod:NewSpecialWarningDefensive(360284, nil, 31907, nil, 1, 2)
|
|
local specWarnAnguishingStrikeStack = mod:NewSpecialWarningStack(360284, nil, 3, 31907, nil, 1, 6)
|
|
local specWarnAnguishingStrikeTaunt = mod:NewSpecialWarningTaunt(360284, nil, 31907, nil, 1, 2)
|
|
|
|
local timerInfiltrationofDreadCD = mod:NewCDCountTimer(122.5, 360717, nil, nil, nil, 6)--120+3sec cast time with standard variation
|
|
local timerParanoia = mod:NewBuffFadesTimer(25, 360418, nil, nil, nil, 5)
|
|
local timerFearfulTrepidationCD = mod:NewCDCountTimer(29.1, 360145, 39176, nil, nil, 3)--DBM_COMMON_L.MAGIC_ICON
|
|
local timerSlumberCloudCD = mod:NewCDCountTimer(32.8, 360229, nil, nil, nil, 3)
|
|
local timerAnguishingStrikeCD = mod:NewCDTimer(9.7, 360284, 31907, "Tank", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
|
|
|
|
mod:AddSetIconOption("SetIconOnFearfulTrepidation", 360146, true, false, {1, 2})--On by default because max targets shows 2 debuffs can be out, and don't want both carrions running to same person. with icons the carrions can make split decisions to pick an icon each are going to
|
|
mod:GroupSpells(360717, 360418)--Group paranoia with parent mechanic Infiltration of dread
|
|
|
|
--Mal'Ganis
|
|
mod.vb.darknessCount = 0
|
|
mod.vb.carrionCount = 0
|
|
mod.vb.carrionDebuffs = 0
|
|
mod.vb.shadowsCount = 0
|
|
mod.vb.shadowsIcon = 8
|
|
--Kin'tessa
|
|
mod.vb.trepidationIcon = 1
|
|
mod.vb.infiltrationCount = 0
|
|
mod.vb.fearfulCount = 0
|
|
mod.vb.slumberCount = 0
|
|
mod.vb.auraofShadowsOn = false
|
|
local castsPerGUID = {}
|
|
local playerDebuffed = false
|
|
local carrionTime = 0
|
|
|
|
--Things get a bit complicated with debuff priority
|
|
local function updateRangeFrame(self)
|
|
if not self.Options.RangeFrame then return end
|
|
if self.vb.auraofShadowsOn then--Mythic fear mechanic
|
|
--I know this is smaller range than fearful, but if fearful target goes to 0 right away they'll get feared into bumfuck
|
|
--They are just going to have to be smart enough to joust this (stay within 8 til right before it expires then move out)
|
|
DBM.RangeCheck:Show(8)
|
|
elseif DBM:UnitDebuff("player", 360146) then--Fearful Trepidation
|
|
DBM.RangeCheck:Show(10)
|
|
elseif DBM:UnitDebuff("player", 360012) then--Cloud of Carrion
|
|
DBM.RangeCheck:Show(5)
|
|
else
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
end
|
|
|
|
local function BugsRepeater(self, text)
|
|
yellBitingWounds:Yell(text)
|
|
self:Schedule(1.5, BugsRepeater, self, text)
|
|
end
|
|
|
|
function mod:OnCombatStart(delay)
|
|
self.vb.darknessCount = 0
|
|
self.vb.shadowsCount = 0
|
|
self.vb.shadowsIcon = 8
|
|
self.vb.carrionCount = 0
|
|
self.vb.carrionDebuffs = 0
|
|
|
|
self.vb.trepidationIcon = 1
|
|
self.vb.infiltrationCount = 0
|
|
self.vb.fearfulCount = 0
|
|
self.vb.slumberCount = 0
|
|
playerDebuffed = false
|
|
--Mal'Ganis
|
|
timerCloudofCarrionCD:Start(6-delay, 1)--6-7 (leaning toward 7 on mythic)
|
|
timerManifestShadowsCD:Start(12.1-delay, 1)--12-13 (leaning toward 13 on mythic)
|
|
timerLeechingClawsCD:Start(15.7-delay)
|
|
timerUntoDarknessCD:Start(50-delay, 1)
|
|
--Kin'tessa
|
|
timerAnguishingStrikeCD:Start(8.2-delay)
|
|
timerSlumberCloudCD:Start(12.1-delay, 1)--12-13
|
|
timerFearfulTrepidationCD:Start(25.2-delay, 1)
|
|
timerInfiltrationofDreadCD:Start(123-delay, 1)
|
|
berserkTimer:Start(self:IsMythic() and 540 or self:IsHeroic() and 600 or 780)
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:SetHeader(DBM_CORE_L.INFOFRAME_POWER)
|
|
DBM.InfoFrame:Show(2, "enemypower", 1)--TODO, figure out power type
|
|
end
|
|
if self.Options.NPAuraOnIncompleteForm or self.Options.NPAuraOnFullyFormed then
|
|
DBM:FireEvent("BossMod_EnableHostileNameplates")
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatEnd()
|
|
table.wipe(castsPerGUID)
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Hide()
|
|
end
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
if self.Options.NPAuraOnIncompleteForm or self.Options.NPAuraOnFullyFormed then
|
|
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 360006 then
|
|
carrionTime = GetTime()
|
|
self.vb.carrionCount = self.vb.carrionCount + 1
|
|
specWarnCloudofCarrion:Show()
|
|
specWarnCloudofCarrion:Play("scatter")
|
|
timerCloudofCarrionCD:Start(nil, self.vb.carrionCount+1)--21.8
|
|
elseif spellId == 361913 then
|
|
self.vb.shadowsCount = self.vb.shadowsCount + 1
|
|
warnManifestShadows:Show(self.vb.shadowsCount)
|
|
-- timerManifestShadowsCD:Start(nil, self.vb.shadowsCount+1)--Never recast more than once between stages/rotations
|
|
self.vb.shadowsIcon = 8
|
|
elseif spellId == 361923 and castsPerGUID[args.sourceGUID] then
|
|
castsPerGUID[args.sourceGUID] = castsPerGUID[args.sourceGUID] + 1
|
|
local count = castsPerGUID[args.sourceGUID]
|
|
if self:CheckInterruptFilter(args.sourceGUID, false, false) then
|
|
specWarnRavenousHunger:Show(args.sourceName, count)
|
|
if count == 1 then
|
|
specWarnRavenousHunger:Play("kick1r")
|
|
elseif count == 2 then
|
|
specWarnRavenousHunger:Play("kick2r")
|
|
elseif count == 3 then
|
|
specWarnRavenousHunger:Play("kick3r")
|
|
elseif count == 4 then
|
|
specWarnRavenousHunger:Play("kick4r")
|
|
elseif count == 5 then
|
|
specWarnRavenousHunger:Play("kick5r")
|
|
else
|
|
specWarnRavenousHunger:Play("kickcast")
|
|
end
|
|
end
|
|
elseif spellId == 359960 then
|
|
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then--Change to boss1/2 if confirmed it's consistent
|
|
specWarnLeechingClaws:Show()
|
|
specWarnLeechingClaws:Play("defensive")
|
|
end
|
|
timerLeechingClawsCD:Start()--16.9
|
|
elseif spellId == 360717 and self:AntiSpam(3, 1) then
|
|
self.vb.infiltrationCount = self.vb.infiltrationCount + 1
|
|
specWarnInfiltrationofDread:Show(self.vb.infiltrationCount)
|
|
specWarnInfiltrationofDread:Play("specialsoon")
|
|
--Stop some timers (May still be missing some that actually pause/resume instead, but seems accurate enough)
|
|
--Mal'Ganis
|
|
timerCloudofCarrionCD:Stop()
|
|
timerManifestShadowsCD:Stop()
|
|
timerLeechingClawsCD:Stop()
|
|
--Kin'tessa
|
|
timerAnguishingStrikeCD:Stop()
|
|
timerSlumberCloudCD:Stop()
|
|
if self:IsFated() then
|
|
self:AffixEvent(0)
|
|
end
|
|
elseif (spellId == 360300 or spellId == 360304) and self:AntiSpam(3, 2) then
|
|
self.vb.darknessCount = self.vb.darknessCount + 1
|
|
specWarnUntoDarkness:Show(self.vb.darknessCount)
|
|
specWarnUntoDarkness:Play("specialsoon")
|
|
--Stop some timers (May still be missing some that actually pause/resume instead, but seems accurate enough)
|
|
--Mal'Ganis
|
|
timerCloudofCarrionCD:Stop()
|
|
timerManifestShadowsCD:Stop()
|
|
timerLeechingClawsCD:Stop()
|
|
--Kin'tessa
|
|
timerAnguishingStrikeCD:Stop()
|
|
timerFearfulTrepidationCD:Stop()
|
|
elseif spellId == 360145 then
|
|
self.vb.fearfulCount = self.vb.fearfulCount + 1
|
|
self.vb.trepidationIcon = 1
|
|
timerFearfulTrepidationCD:Start(nil, self.vb.fearfulCount+1)--29.1
|
|
elseif spellId == 360229 then
|
|
self.vb.slumberCount = self.vb.slumberCount + 1--Doesn't reset, used by timers and announce
|
|
warnSlumberCloud:Show(self.vb.slumberCount)
|
|
timerSlumberCloudCD:Start(self:IsMythic() and 32.8 or 45, self.vb.slumberCount+1)
|
|
elseif spellId == 360284 then
|
|
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then--Change to boss1/2 if confirmed it's consistent
|
|
specWarnAnguishingStrike:Show()
|
|
specWarnAnguishingStrike:Play("defensive")
|
|
end
|
|
timerAnguishingStrikeCD:Start()--9.7
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
local spellId = args.spellId
|
|
if spellId == 360420 and self:AntiSpam(3, 1) then
|
|
warnShatterMind:Show()
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 360012 then
|
|
self.vb.carrionDebuffs = self.vb.carrionDebuffs + 1
|
|
if args:IsPlayer() then
|
|
specWarnCloudofCarrionDebuff:Show()
|
|
specWarnCloudofCarrionDebuff:Play("range5")
|
|
yellCloudofCarrion:Yell()
|
|
updateRangeFrame(self)
|
|
else
|
|
if (GetTime() - carrionTime) < 4 then
|
|
warnCloudofCarrion:CombinedShow(0.5, args.destName)
|
|
end
|
|
end
|
|
elseif spellId == 361934 or spellId == 362020 then
|
|
if self.Options.SetIconOnManifestShadows then
|
|
self:ScanForMobs(args.destGUID, 2, self.vb.shadowsIcon, 1, nil, 12, "SetIconOnManifestShadows")
|
|
end
|
|
self.vb.shadowsIcon = self.vb.shadowsIcon - 1
|
|
if self.Options.NPAuraOnIncompleteForm then
|
|
DBM.Nameplate:Show(true, args.sourceGUID, spellId)
|
|
end
|
|
elseif spellId == 361945 then
|
|
if self:AntiSpam(3, 3) then--If multiple adds they'll fully form at same time
|
|
warnFullyFormed:Show()
|
|
end
|
|
if self.Options.NPAuraOnFullyFormed then
|
|
DBM.Nameplate:Show(true, args.sourceGUID, spellId)
|
|
end
|
|
elseif spellId == 359963 then
|
|
local uId = DBM:GetRaidUnitId(args.destName)
|
|
if self:IsTanking(uId) then--If not on a tank, it's just some numpty in wrong place
|
|
if not args:IsPlayer() then
|
|
local _, _, _, _, _, expireTime = DBM:UnitDebuff("player", spellId)
|
|
local remaining
|
|
if expireTime then
|
|
remaining = expireTime-GetTime()
|
|
end
|
|
if (not remaining or remaining and remaining < 5) and not UnitIsDeadOrGhost("player") then
|
|
specWarnOpenedVeins:Show(args.destName)
|
|
specWarnOpenedVeins:Play("tauntboss")
|
|
end
|
|
end
|
|
end
|
|
elseif (spellId == 360300 or spellId == 360304) and self:AntiSpam(3, 4) then--Darkness
|
|
timerSwarmofDecay:Start()
|
|
--This timer pauses, but also has a min time of 5 seconds so first we need to check and extend that if applicable
|
|
if timerSlumberCloudCD:GetRemaining(self.vb.slumberCount+1) < 4.6 then
|
|
local elapsed, total = timerSlumberCloudCD:GetTime(self.vb.slumberCount+1)
|
|
local extend = 4.6 - (total-elapsed)
|
|
timerSlumberCloudCD:Update(elapsed, total+extend, self.vb.slumberCount+1)
|
|
DBM:Debug("timerSlumberCloudCD extended by: "..extend, 2)
|
|
end
|
|
timerSlumberCloudCD:Pause(self.vb.slumberCount+1)
|
|
if self:IsFated() then
|
|
self:AffixEvent(0)
|
|
end
|
|
elseif spellId == 360516 and self:AntiSpam(3, 5) then--Infiltration
|
|
timerUntoDarknessCD:Pause(self.vb.darknessCount+1)--Pauses since bosses stop gaining energy
|
|
--This timer pauses, but also has a min time of 5 seconds so first we need to check and extend that if applicable
|
|
if timerFearfulTrepidationCD:GetRemaining(self.vb.fearfulCount+1) < 4.6 then
|
|
local elapsed, total = timerFearfulTrepidationCD:GetTime(self.vb.fearfulCount+1)
|
|
local extend = 4.6 - (total-elapsed)
|
|
timerFearfulTrepidationCD:Update(elapsed, total+extend, self.vb.fearfulCount+1)
|
|
DBM:Debug("timerFearfulTrepidationCD extended by: "..extend, 2)
|
|
end
|
|
timerFearfulTrepidationCD:Pause(self.vb.fearfulCount+1)
|
|
elseif spellId == 360418 and args:IsPlayer() then
|
|
timerParanoia:Start(self:IsEasy() and 40 or 25)
|
|
elseif spellId == 360146 then
|
|
local icon = self.vb.trepidationIcon
|
|
if self.Options.SetIconOnFearfulTrepidation then
|
|
self:SetIcon(args.destName, icon)
|
|
end
|
|
if args:IsPlayer() then
|
|
specWarnFearfulTrepidation:Show()
|
|
specWarnFearfulTrepidation:Play("runout")
|
|
yellFearfulTrepidation:Yell(icon, icon)
|
|
yellFearfulTrepidationFades:Countdown(spellId, nil, icon)
|
|
updateRangeFrame(self)
|
|
specWarnCloudofCarrionDebuffMove:Cancel()
|
|
specWarnCloudofCarrionDebuffMove:CancelVoice()
|
|
elseif self.Options.SpecWarn360012moveto and DBM:UnitDebuff("player", 360012) then--If have Carrion debuff, spec warn to runt o tepidate debuff to clear it
|
|
specWarnCloudofCarrionDebuffMove:CombinedShow(0.5, args.destName)
|
|
specWarnCloudofCarrionDebuffMove:ScheduleVoice(0.5, "gathershare")
|
|
end
|
|
warnFearfulTrepidation:CombinedShow(0.5, self.vb.fearfulCount, args.destName)
|
|
self.vb.trepidationIcon = self.vb.trepidationIcon + 1
|
|
elseif spellId == 360148 then
|
|
if args:IsPlayer() then
|
|
playerDebuffed = true
|
|
specWarnBurstingDread:Cancel()
|
|
specWarnBurstingDread:CancelVoice()
|
|
end
|
|
--Smart code that only warns player to dispel it, if they thesmelves aren't a victim of it and dispel is off CD
|
|
if self:CheckDispelFilter("magic") and not playerDebuffed then
|
|
specWarnBurstingDread:CombinedShow(0.3, args.destName)
|
|
specWarnBurstingDread:ScheduleVoice(0.3, "helpdispel")
|
|
end
|
|
elseif spellId == 360241 then
|
|
if args:IsPlayer() then
|
|
playerDebuffed = true
|
|
specWarnUnsettlingDreams:Cancel()
|
|
specWarnUnsettlingDreams:CancelVoice()
|
|
end
|
|
--Smart code that only warns player to dispel it, if they thesmelves aren't a victim of it and dispel is off CD
|
|
if self:CheckDispelFilter("magic") and not playerDebuffed then
|
|
specWarnUnsettlingDreams:CombinedShow(0.3, args.destName)
|
|
specWarnUnsettlingDreams:ScheduleVoice(0.3, "helpdispel")
|
|
end
|
|
elseif spellId == 363191 then
|
|
self.vb.auraofShadowsOn = true
|
|
updateRangeFrame(self)
|
|
warnAuraofShadows:Show()
|
|
elseif spellId == 360287 then
|
|
local uId = DBM:GetRaidUnitId(args.destName)
|
|
if self:IsTanking(uId) then--If not on a tank, it's just some numpty in wrong place
|
|
local amount = args.amount or 1
|
|
if args:IsPlayer() and amount >= 3 then
|
|
specWarnAnguishingStrikeStack:Show(amount)
|
|
specWarnAnguishingStrikeStack:Play("stackhigh")
|
|
else
|
|
warnAnguishingStrike:Show(args.destName, amount)
|
|
end
|
|
end
|
|
elseif spellId == 364985 then
|
|
if args:IsPlayer() then
|
|
self:Unschedule(BugsRepeater)
|
|
self:Schedule(1.5, BugsRepeater, self, 7)
|
|
end
|
|
end
|
|
end
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
local spellId = args.spellId
|
|
if (spellId == 360300 or spellId == 360304) and self:AntiSpam(3, 6) then--Both Swarm casts tied to Darkness
|
|
warnUntoDarknessOver:Show()
|
|
timerSwarmofDecay:Stop()
|
|
--May still be missing some that actually pause/resume instead, but seems accurate enough
|
|
--Mal
|
|
timerLeechingClawsCD:Start(5)
|
|
timerCloudofCarrionCD:Start(7.3, self.vb.carrionCount+1)
|
|
timerManifestShadowsCD:Start(10.1, self.vb.shadowsCount+1)
|
|
timerUntoDarknessCD:Start(nil, self.vb.darknessCount+1)--102.4
|
|
--Kintessa
|
|
timerFearfulTrepidationCD:Start(5, self.vb.fearfulCount+1)
|
|
timerAnguishingStrikeCD:Start(7.4)--7.4-9.7
|
|
--This timer resumes
|
|
timerSlumberCloudCD:Resume(self.vb.slumberCount+1)
|
|
if self:IsFated() then
|
|
self:AffixEvent(1, 2)
|
|
end
|
|
elseif spellId == 360516 and self:AntiSpam(3, 7) then--Infiltration
|
|
--May still be missing some that actually pause/resume instead, but seems accurate enough
|
|
--Mal
|
|
timerLeechingClawsCD:Start(4.6)--4.6-5.3
|
|
timerCloudofCarrionCD:Start(6, self.vb.carrionCount+1)--6-7.1
|
|
timerManifestShadowsCD:Start(10.6, self.vb.shadowsCount+1)
|
|
timerUntoDarknessCD:Resume(self.vb.darknessCount+1)
|
|
--Kintessa
|
|
timerSlumberCloudCD:Start(4.6, self.vb.slumberCount+1)--4.6-5.3
|
|
timerAnguishingStrikeCD:Start(7.1)
|
|
timerInfiltrationofDreadCD:Start(nil, self.vb.infiltrationCount+1)--122.5
|
|
--These timers resume
|
|
timerFearfulTrepidationCD:Resume(self.vb.fearfulCount+1)
|
|
if self:IsFated() then
|
|
self:AffixEvent(1, 2)
|
|
end
|
|
elseif spellId == 360418 and args:IsPlayer() then
|
|
timerParanoia:Stop()
|
|
elseif spellId == 360012 then
|
|
self.vb.carrionDebuffs = self.vb.carrionDebuffs + 1
|
|
if args:IsPlayer() then
|
|
updateRangeFrame(self)
|
|
end
|
|
elseif spellId == 361934 or spellId == 362020 then
|
|
if self.Options.NPAuraOnIncompleteForm then
|
|
DBM.Nameplate:Hide(true, args.sourceGUID, spellId)
|
|
end
|
|
if not castsPerGUID[args.destGUID] then
|
|
castsPerGUID[args.destGUID] = 0
|
|
end
|
|
elseif spellId == 361945 then
|
|
if self.Options.NPAuraOnFullyFormed then
|
|
DBM.Nameplate:Hide(true, args.sourceGUID, spellId)
|
|
end
|
|
elseif spellId == 360146 then
|
|
if self.Options.SetIconOnFearfulTrepidation then
|
|
self:SetIcon(args.destName, 0)
|
|
end
|
|
if args:IsPlayer() then
|
|
yellFearfulTrepidationFades:Cancel()
|
|
updateRangeFrame(self)
|
|
end
|
|
elseif spellId == 360148 then
|
|
if args:IsPlayer() and not DBM:UnitDebuff("player", 360241) then
|
|
playerDebuffed = false
|
|
end
|
|
elseif spellId == 360241 then
|
|
if args:IsPlayer() and not DBM:UnitDebuff("player", 360148) then
|
|
playerDebuffed = false
|
|
end
|
|
elseif spellId == 363191 then
|
|
self.vb.auraofShadowsOn = false
|
|
updateRangeFrame(self)
|
|
warnAuraofShadowsOver:Show()
|
|
elseif spellId == 364985 then
|
|
if args:IsPlayer() then
|
|
self:Unschedule(BugsRepeater)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 183138 then--Manifest Shadows/Inchoate Shadow
|
|
castsPerGUID[args.destGUID] = nil
|
|
elseif cid == 181398 then--Mal'Ganis
|
|
timerUntoDarknessCD:Stop()
|
|
timerCloudofCarrionCD:Stop()
|
|
timerManifestShadowsCD:Stop()
|
|
timerLeechingClawsCD:Stop()
|
|
elseif cid == 181399 then--Kin'tessa
|
|
timerInfiltrationofDreadCD:Stop()
|
|
timerFearfulTrepidationCD:Stop()
|
|
timerSlumberCloudCD:Stop()
|
|
timerAnguishingStrikeCD:Stop()
|
|
end
|
|
end
|
|
|