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.

651 lines
29 KiB

local mod = DBM:NewMod(2493, "DBM-VaultoftheIncarnates", nil, 1200)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20230706053014")
mod:SetCreatureID(190245)
mod:SetEncounterID(2614)
mod:SetUsedIcons(8, 7, 6, 5, 4)
mod:SetHotfixNoticeRev(20230226000000)
mod:SetMinSyncRevision(20230226000000)
mod.respawnTime = 33
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 376073 375871 388716 375870 375716 376272 376257 375485 375575 375457 375653 375630 388918 396269 396779 375475",
"SPELL_CAST_SUCCESS 380175 375870 396269 181113",
"SPELL_AURA_APPLIED 375889 375829 376073 378782 390561 376272 375475 375620 375879 376330 396264 380483",
"SPELL_AURA_APPLIED_DOSE 375829 378782 376272 375475 375879",
"SPELL_AURA_REMOVED 376073 375809 376330 396264",
"SPELL_AURA_REMOVED_DOSE 375809",
"SPELL_PERIODIC_DAMAGE 390747",
"SPELL_PERIODIC_MISSED 390747",
"UNIT_DIED"
)
--TODO, add https://www.wowhead.com/beta/spell=388644/vicious-thrust ? it's instant cast but maybe a timer? depends how many adds there are. omitting for now to avoid clutter
--TODO, improve auto marking of the priority adds (like mages that need interrupt rotations)?
--TODO, what is range of tremors? does the mob turn while casting it? These answers affect warning defaults/filters, for now it's everyone
--[[
(ability.id = 376073 or ability.id = 375871 or ability.id = 388716 or ability.id = 388918 or ability.id = 375870 or ability.id = 396269 or ability.id = 396779) and type = "begincast"
or ability.id = 380175 and type = "cast"
or ability.id = 375879
or ability.id = 181113
or (ability.id = 375716 or ability.id = 375653 or ability.id = 375457 or ability.id = 375630 or ability.id = 376257 or ability.id = 375575 or ability.id = 375475 or ability.id = 376272 or ability.id = 375485) and type = "begincast"
--]]
--Stage One: The Primalist Clutch
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25119))
----Broodkeeper Diurna
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25120))
local warnEggsLeft = mod:NewCountAnnounce(19873, 1)
local warnGreatstaffsWrath = mod:NewTargetNoFilterAnnounce(375889, 2)
local warnClutchwatchersRage = mod:NewStackAnnounce(375829, 2)
local warnRapidIncubation = mod:NewSpellAnnounce(376073, 3)
local warnMortalWounds = mod:NewStackAnnounce(378782, 2, nil, "Tank|Healer")
local warnDiurnasGaze = mod:NewYouAnnounce(390561, 3)
local specWarnGreatstaffoftheBroodkeeper = mod:NewSpecialWarningCount(380175, nil, nil, nil, 2, 2)
local specWarnGreatstaffsWrath = mod:NewSpecialWarningYou(375889, nil, nil, nil, 1, 2)
local yellGreatstaffsWrath = mod:NewYell(375889)
local specWarnWildfire = mod:NewSpecialWarningDodge(375871, nil, nil, nil, 2, 2)
local specWarnIcyShroud = mod:NewSpecialWarningCount(388716, nil, nil, nil, 2, 2)
local specWarnStormFissure = mod:NewSpecialWarningDodge(396779, nil, nil, nil, 2, 2, 4)
local specWarnMortalStoneclaws = mod:NewSpecialWarningDefensive(375870, nil, nil, nil, 1, 2)
local specWarnMortalWounds = mod:NewSpecialWarningTaunt(378782, nil, nil, nil, 1, 2)
local specWarnGTFO = mod:NewSpecialWarningGTFO(390747, nil, nil, nil, 1, 8)
local timerGreatstaffoftheBroodkeeperCD = mod:NewCDCountTimer(24.4, 380175, L.staff, nil, nil, 5)--Shared CD ability?
local timerRapidIncubationCD = mod:NewCDCountTimer(24.4, 376073, nil, nil, nil, 1)--Shared CD ability?
local timerWildfireCD = mod:NewCDCountTimer(21.4, 375871, nil, nil, nil, 3)--21.4-28
local timerIcyShroudCD = mod:NewCDCountTimer(39.1, 388716, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.MAGIC_ICON)--Static CD
local timerMortalStoneclawsCD = mod:NewCDCountTimer(20.2, 375870, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)--Shared CD in P1, 7.3-15 P2
local timerStormFissureCD = mod:NewCDTimer(24, 396779, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)
--local berserkTimer = mod:NewBerserkTimer(600)
mod:GroupSpells(380175, 375889)--Greatstaff spawn ith greatstaff wrath debuff
mod:GroupSpells(375870, 378782)--Mortal Claws with Mortal Wounds
----Primalist Reinforcements
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25129))
local warnBurrowingStrike = mod:NewStackAnnounce(376272, 2, nil, "Tank|Healer")
local warnCauterizingFlashflames = mod:NewCastAnnounce(375485, 4)
local warnFlameSentry = mod:NewCastAnnounce(375575, 3)
local warnRendingBite = mod:NewStackAnnounce(375475, 2, nil, "Tank|Healer")
local warnChillingTantrum = mod:NewCastAnnounce(375457, 3)
local warnIonizingCharge = mod:NewTargetAnnounce(375630, 3)
local specWarnPrimalistReinforcements = mod:NewSpecialWarningAddsCount(257554, "-Healer", nil, nil, 1, 2)
local specWarnIceBarrage = mod:NewSpecialWarningInterruptCount(375716, "HasInterrupt", nil, nil, 1, 2)
local specWarnBurrowingStrike = mod:NewSpecialWarningDefensive(376272, false, nil, 2, 1, 2, 3)--Spammy as all hell, should never be on by default
local specWarnTremors = mod:NewSpecialWarningDodge(376257, nil, nil, nil, 2, 2)
local specWarnRendingBite = mod:NewSpecialWarningDefensive(375475, nil, nil, nil, 1, 2, 3)
local specWarnStaticJolt = mod:NewSpecialWarningInterruptCount(375653, "HasInterrupt", nil, nil, 1, 2)
local specWarnIonizingCharge = mod:NewSpecialWarningMoveAway(375630, nil, nil, nil, 1, 2)
local yellIonizingCharge = mod:NewYell(375630)
local timerPrimalistReinforcementsCD = mod:NewAddsCustomTimer(60, 257554, nil, nil, nil, 1)
local timerBurrowingStrikeCD = mod:NewCDTimer(8.1, 376272, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.HEROIC_ICON)
local timerTremorsCD = mod:NewCDTimer(11, 376257, nil, nil, nil, 3)
local timerCauterizingFlashflamesCD = mod:NewCDTimer(11.7, 375485, nil, "MagicDispeller", nil, 5)
local timerFlameSentryCD = mod:NewCDTimer(12.2, 375575, nil, nil, nil, 3)
local timerRendingBiteCD = mod:NewCDTimer(11, 375475, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.HEROIC_ICON)
local timerChillingTantrumCD = mod:NewCDTimer(11.1, 375457, nil, nil, nil, 3)
local timerIonizingChargeCD = mod:NewCDTimer(10, 375630, nil, nil, nil, 3)
--mod:AddRangeFrameOption("8")
--mod:AddInfoFrameOption(361651, true)
mod:AddNamePlateOption("NPFixate", 376330, true)
mod:AddSetIconOption("SetIconOnMages", "ej25144", true, true, {6, 5, 4})
mod:AddSetIconOption("SetIconOnStormbringers", "ej25139", true, true, {8, 7})
mod:GroupSpells(385618, "ej25144", "ej25139")--Icon Marking with general adds announce
--Stage Two: A Broodkeeper Scorned
mod:AddTimerLine(DBM:EJ_GetSectionInfo(25146))
local warnBroodkeepersFury = mod:NewStackAnnounce(375879, 2)
local warnEGreatstaffsWrath = mod:NewTargetNoFilterAnnounce(380483, 2)
local specWarnEGreatstaffoftheBroodkeeper = mod:NewSpecialWarningCount(380176, nil, nil, nil, 2, 2)
local specWarnEGreatstaffsWrath = mod:NewSpecialWarningYou(380483, nil, nil, nil, 1, 2)
local yellEGreatstaffsWrath = mod:NewYell(380483)
local specWarnFrozenShroud = mod:NewSpecialWarningCount(388918, nil, nil, nil, 2, 2)
local specWarnMortalStoneSlam = mod:NewSpecialWarningDefensive(396269, nil, nil, nil, 1, 2, 4)
local specWarnDetonatingStoneslam = mod:NewSpecialWarningYou(396264, false, nil, nil, 1, 2, 4)--Bit redundant, so off by default
local yellDetonatingStoneslam = mod:NewShortYell(396264, nil, nil, nil, "YELL")
local yellDetonatingStoneslamFades = mod:NewShortFadesYell(396264, nil, nil, nil, "YELL")
local specWarnDetonatingStoneslamTaunt = mod:NewSpecialWarningTaunt(396264, nil, nil, nil, 1, 2, 4)
local timerBroodkeepersFuryCD = mod:NewNextCountTimer(30, 375879, nil, nil, nil, 5)--Static CD
--local timerEGreatstaffoftheBroodkeeperCD = mod:NewCDCountTimer(17, 380176, L.staff, nil, nil, 5)--Shared CD ability
local timerFrozenShroudCD = mod:NewCDCountTimer(40.5, 388918, nil, nil, nil, 2, nil, DBM_COMMON_L.DAMAGE_ICON..DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.MAGIC_ICON)--Static CD
local timerMortalStoneSlamCD = mod:NewCDCountTimer(20.7, 396269, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON..DBM_COMMON_L.MYTHIC_ICON)
local castsPerGUID = {}
mod.vb.staffCount = 0
mod.vb.icyCount = 0
mod.vb.addsCount = 0
mod.vb.tankComboStarted = false
mod.vb.tankCombocount = 0
mod.vb.wildFireCount = 0
mod.vb.incubationCount = 0
mod.vb.eggsGone = false
local mythicAddsTimers = {32.9, 14.7, 48.9, 14.4, 41.1, 18.9, 44.7, 15.3, 41.4, 18.2}
local heroicAddsTimers = {35.4, 19.0, 36.3, 20.0, 43.2, 19.8, 36.3, 19.9, 43.1, 21.0, 35.7, 20.0}--Last 5 no longer happen?
local normalAddsTimers = {35.4, 24.6, 36.3, 24.9, 43.1, 24.9, 36.3, 24.9, 43.1, 24.8}
local addUsedMarks = {}
--[[
Mortal Stoneclaws 2 second ICD (P1)
Mortal Stoneslam 2 second ICD (P2 mythic)
Wildfire 2.5 second ICD in P1 and 5 second ICD in P2 when double cast on heroic/mythic (still 2.5 on lfr/normal)
Icy Shroud 2.5 second ICD
Frozen Shroud 2.5 ICD including staff*
Storm Fissure triggers 3 sec ICD
greatstaff triggers 1 second ICD (not really worth including)
rapid incubation triggers 3 second ICD, usually it's staff cast after 3 seconds later but in other cases another spell can jump in and push staff further out so 3 sec before staff rule isn't a gaurentee, but the 3 seconds before next spell is
Key Notes:
In stage 1 staff is consistently 24 seconds, whether that's actual CD kind of doesn't matter, since other spells have equal CD it'll queue at 24-27sec regardless
In stage 2, staff has 20 second cd on easy and 17 seconds on normal (at least based on current data) but it'll rarely ever see it's base CD due to spell queuing/ICD
--]]
local function updateAllTimers(self, ICD, exclusion)
if not self.Options.ExperimentalTimerCorrection then return end
DBM:Debug("updateAllTimers running", 3)
--Abilities that use same timer in P1 and P2
if timerWildfireCD:GetRemaining(self.vb.wildFireCount+1) < ICD then
local elapsed, total = timerWildfireCD:GetTime(self.vb.wildFireCount+1)
local extend = ICD - (total-elapsed)
DBM:Debug("timerWildfireCD extended by: "..extend, 2)
timerWildfireCD:Update(elapsed, total+extend, self.vb.wildFireCount+1)
end
if self:IsMythic() and timerStormFissureCD:GetRemaining() < ICD then
local elapsed, total = timerStormFissureCD:GetTime()
local extend = ICD - (total-elapsed)
DBM:Debug("timerStormFissureCD extended by: "..extend, 2)
timerStormFissureCD:Update(elapsed, total+extend)
end
--Specific Phase ability timers
if self:GetStage(1) then
if not exclusion and timerMortalStoneclawsCD:GetRemaining(self.vb.tankCombocount+1) < ICD then--All difficulties have P1 stoneclaws
local elapsed, total = timerMortalStoneclawsCD:GetTime(self.vb.tankCombocount+1)
local extend = ICD - (total-elapsed)
DBM:Debug("timerMortalStoneclawsCD extended by: "..extend, 2)
timerMortalStoneclawsCD:Update(elapsed, total+extend, self.vb.tankCombocount+1)
end
if timerGreatstaffoftheBroodkeeperCD:GetRemaining(self.vb.staffCount+1) < ICD then
local elapsed, total = timerGreatstaffoftheBroodkeeperCD:GetTime(self.vb.staffCount+1)
local extend = ICD - (total-elapsed)
DBM:Debug("timerGreatstaffoftheBroodkeeperCD extended by: "..extend, 2)
timerGreatstaffoftheBroodkeeperCD:Update(elapsed, total+extend, self.vb.staffCount+1)
end
if timerIcyShroudCD:GetRemaining(self.vb.icyCount+1) < ICD then
local elapsed, total = timerIcyShroudCD:GetTime(self.vb.icyCount+1)
local extend = ICD - (total-elapsed)
DBM:Debug("timerIcyShroudCD extended by: "..extend, 2)
timerIcyShroudCD:Update(elapsed, total+extend, self.vb.icyCount+1)
end
else--Phase 2
if self:IsMythic() then--Mythic P2 has stoneslam versus stoneclaws
if not exclusion and timerMortalStoneSlamCD:GetRemaining(self.vb.tankCombocount+1) < ICD then--All difficulties have P1 stoneclaws
local elapsed, total = timerMortalStoneSlamCD:GetTime(self.vb.tankCombocount+1)
local extend = ICD - (total-elapsed)
DBM:Debug("timerMortalStoneSlamCD extended by: "..extend, 2)
timerMortalStoneSlamCD:Update(elapsed, total+extend, self.vb.tankCombocount+1)
end
else
if not exclusion and timerMortalStoneclawsCD:GetRemaining(self.vb.tankCombocount+1) < ICD then--All difficulties have P1 stoneclaws
local elapsed, total = timerMortalStoneclawsCD:GetTime(self.vb.tankCombocount+1)
local extend = ICD - (total-elapsed)
DBM:Debug("timerMortalStoneclawsCD extended by: "..extend, 2)
timerMortalStoneclawsCD:Update(elapsed, total+extend, self.vb.tankCombocount+1)
end
end
if timerGreatstaffoftheBroodkeeperCD:GetRemaining(self.vb.staffCount+1) < ICD then
local elapsed, total = timerGreatstaffoftheBroodkeeperCD:GetTime(self.vb.staffCount+1)
local extend = ICD - (total-elapsed)
DBM:Debug("timerGreatstaffoftheBroodkeeperCD extended by: "..extend, 2)
timerGreatstaffoftheBroodkeeperCD:Update(elapsed, total+extend, self.vb.staffCount+1)
end
if timerFrozenShroudCD:GetRemaining(self.vb.icyCount+1) < ICD then
local elapsed, total = timerFrozenShroudCD:GetTime(self.vb.icyCount+1)
local extend = ICD - (total-elapsed)
DBM:Debug("timerFrozenShroudCD extended by: "..extend, 2)
timerFrozenShroudCD:Update(elapsed, total+extend, self.vb.icyCount+1)
end
end
end
local function resetTankComboState(self)
self.vb.tankComboStarted = false
end
function mod:OnCombatStart(delay)
table.wipe(castsPerGUID)
table.wipe(addUsedMarks)
self:SetStage(1)
self.vb.tankComboStarted = false
self.vb.tankCombocount = 0
self.vb.staffCount = 0
self.vb.icyCount = 0
self.vb.addsCount = 0
self.vb.wildFireCount = 0
self.vb.incubationCount = 0
self.vb.eggsGone = false
timerMortalStoneclawsCD:Start(3.2-delay, 1)
timerWildfireCD:Start(8.2-delay, 1)
if not self:IsEasy() then
timerRapidIncubationCD:Start(14.3-delay, 1)
end
timerGreatstaffoftheBroodkeeperCD:Start(16.2-delay, 1)
timerPrimalistReinforcementsCD:Start(self:IsMythic() and 32.9 or 35.4-delay, 1)
timerIcyShroudCD:Start(26.2-delay, 1)
if self.Options.NPFixate then
DBM:FireEvent("BossMod_EnableHostileNameplates")
end
if self:IsMythic() then
timerStormFissureCD:Start(28-delay)
end
end
function mod:OnCombatEnd()
-- if self.Options.RangeFrame then
-- DBM.RangeCheck:Hide()
-- end
-- if self.Options.InfoFrame then
-- DBM.InfoFrame:Hide()
-- end
if self.Options.NPFixate then
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
end
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 376073 then
self.vb.incubationCount = self.vb.incubationCount + 1
warnRapidIncubation:Show(self.vb.incubationCount)
if not self.vb.eggsGone then
timerRapidIncubationCD:Start(24, self.vb.incubationCount+1)
end
updateAllTimers(self, 3)
elseif spellId == 375871 and self:AntiSpam(10, 1) then
self.vb.wildFireCount = self.vb.wildFireCount + 1
specWarnWildfire:Show()
specWarnWildfire:Play("scatter")
specWarnWildfire:ScheduleVoice(2, "watchstep")
timerWildfireCD:Start(self:IsMythic() and 23 or self:IsHeroic() and 21.4 or 25, self.vb.wildFireCount+1)
if self:IsHard() and self:GetStage(2) then
updateAllTimers(self, 5)
else
updateAllTimers(self, 2.5)
end
elseif spellId == 388716 then
self.vb.icyCount = self.vb.icyCount + 1
specWarnIcyShroud:Show(self.vb.icyCount)
specWarnIcyShroud:Play("aesoon")
timerIcyShroudCD:Start(self:IsMythic() and 41 or self:IsHeroic() and 39.1 or 44, self.vb.icyCount+1)
updateAllTimers(self, 2.5)
elseif spellId == 388918 then
self.vb.icyCount = self.vb.icyCount + 1
specWarnFrozenShroud:Show(self.vb.icyCount)
specWarnFrozenShroud:Play("aesoon")
timerFrozenShroudCD:Start(nil, self.vb.icyCount+1)--40-45
updateAllTimers(self, 2.5)
elseif spellId == 375870 then
if self:IsTanking("player", "boss1", nil, true) then
specWarnMortalStoneclaws:Show()
specWarnMortalStoneclaws:Play("defensive")
end
--Sometimes boss interrupts cast to cast another ability then starts cast over, so we do all this
if not self.vb.tankComboStarted then
self.vb.tankComboStarted = true
self.vb.tankCombocount = self.vb.tankCombocount + 1
self:Unschedule(resetTankComboState)
self:Schedule(8, resetTankComboState, self)
else
timerMortalStoneclawsCD:Stop()--Don't print cast refreshed before expired for a recast
end
local timer = ((self:IsEasy() or self:GetStage(1)) and 22.4 or 7.3)
timerMortalStoneclawsCD:Start(timer, self.vb.tankCombocount+1)
updateAllTimers(self, 2, true)
elseif spellId == 396269 then
if self:IsTanking("player", "boss1", nil, true) then
specWarnMortalStoneSlam:Show()
specWarnMortalStoneSlam:Play("defensive")
end
--Sometimes boss interrupts cast to cast another ability then starts cast over, so we do all this
if not self.vb.tankComboStarted then
self.vb.tankComboStarted = true
self.vb.tankCombocount = self.vb.tankCombocount + 1
self:Unschedule(resetTankComboState)
self:Schedule(8, resetTankComboState, self)
else
timerMortalStoneSlamCD:Stop()
end
timerMortalStoneSlamCD:Start(14, self.vb.tankCombocount+1)
updateAllTimers(self, 2, true)
elseif spellId == 376272 then
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
specWarnBurrowingStrike:Show()
specWarnBurrowingStrike:Play("defensive")
end
if self:AntiSpam(1, spellId) then
timerBurrowingStrikeCD:Start(nil, args.sourceGUID)
end
elseif spellId == 375475 then
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
specWarnRendingBite:Show()
specWarnRendingBite:Play("defensive")
end
if self:AntiSpam(1, spellId) then
timerRendingBiteCD:Start(nil, args.sourceGUID)
end
elseif spellId == 376257 then
if self:AntiSpam(3, spellId) then
if self:CheckBossDistance(args.sourceGUID, false, 6450, 18) then
specWarnTremors:Show()
specWarnTremors:Play("shockwave")
end
timerTremorsCD:Start(nil, args.sourceGUID)
end
elseif spellId == 375485 then
if self:AntiSpam(3, spellId) then
if self:CheckBossDistance(args.sourceGUID, false, 13289, 28) then
warnCauterizingFlashflames:Show()
end
timerCauterizingFlashflamesCD:Start(self:IsMythic() and 8.6 or 11.7, args.sourceGUID)--TODO, recheck heroic
end
elseif spellId == 375575 then
if self:AntiSpam(3, spellId) then
if self:CheckBossDistance(args.sourceGUID, false, 13289, 28) then
warnFlameSentry:Show()
end
timerFlameSentryCD:Start(nil, args.sourceGUID)
end
elseif spellId == 375457 then
if self:AntiSpam(3, spellId) then
warnChillingTantrum:Show()
timerChillingTantrumCD:Start(nil, args.sourceGUID)
end
elseif spellId == 375630 then
if self:AntiSpam(1, spellId) then
timerIonizingChargeCD:Start(nil, args.sourceGUID)
end
elseif spellId == 375716 then
if not castsPerGUID[args.sourceGUID] then
castsPerGUID[args.sourceGUID] = 0
if self.Options.SetIconOnMages then
for i = 6, 4, -1 do -- 6, 5, 4
if not addUsedMarks[i] then
addUsedMarks[i] = args.sourceGUID
self:ScanForMobs(args.sourceGUID, 2, i, 1, nil, 12, "SetIconOnMages")
break
end
end
end
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
specWarnIceBarrage:Show(args.sourceName, count)
if count < 6 then
specWarnIceBarrage:Play("kick"..count.."r")
else
specWarnIceBarrage:Play("kickcast")
end
end
elseif spellId == 375653 then
if not castsPerGUID[args.sourceGUID] then
castsPerGUID[args.sourceGUID] = 0
if self.Options.SetIconOnStormbringers then
for i = 8, 7, -1 do -- 8, 7
if not addUsedMarks[i] then
addUsedMarks[i] = args.sourceGUID
self:ScanForMobs(args.sourceGUID, 2, i, 1, nil, 12, "SetIconOnStormbringers")
break
end
end
end
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
specWarnStaticJolt:Show(args.sourceName, count)
if count < 6 then
specWarnStaticJolt:Play("kick"..count.."r")
else
specWarnStaticJolt:Play("kickcast")
end
end
elseif spellId == 396779 then
specWarnStormFissure:Show()
specWarnStormFissure:Play("watchstep")
timerStormFissureCD:Start()
updateAllTimers(self, 3)
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 380175 then
self.vb.staffCount = self.vb.staffCount + 1
local staffTimer
if self:IsHard() then
staffTimer = (self.vb.staffCount >= 14) and 17 or 24.3
else
staffTimer = (self.vb.staffCount >= 13) and 20 or 24.3
end
if self:GetStage(1) then
specWarnGreatstaffoftheBroodkeeper:Show(self.vb.staffCount)
specWarnGreatstaffoftheBroodkeeper:Play("specialsoon")
timerGreatstaffoftheBroodkeeperCD:Start(staffTimer, self.vb.staffCount+1)--24-29 in all difficulties
else
specWarnEGreatstaffoftheBroodkeeper:Show(self.vb.staffCount)
specWarnEGreatstaffoftheBroodkeeper:Play("specialsoon")
timerGreatstaffoftheBroodkeeperCD:Start(staffTimer, self.vb.staffCount+1)--17-33
end
--updateAllTimers(self, 1)
elseif spellId == 375870 then
self.vb.tankComboStarted = false
elseif spellId == 396269 then
self.vb.tankComboStarted = false
elseif spellId == 181113 then
local cid = self:GetCIDFromGUID(args.sourceGUID)
if cid == 191206 then--Mages
if not castsPerGUID[args.sourceGUID] then
castsPerGUID[args.sourceGUID] = 0
if self.Options.SetIconOnMages then
for i = 6, 4, -1 do -- 6, 5, 4
if not addUsedMarks[i] then
addUsedMarks[i] = args.sourceGUID
self:ScanForMobs(args.sourceGUID, 2, i, 1, nil, 12, "SetIconOnMages")
break
end
end
end
end
elseif cid == 191232 then--StormBringers
if not castsPerGUID[args.sourceGUID] then
castsPerGUID[args.sourceGUID] = 0
if self.Options.SetIconOnStormbringers then
for i = 8, 7, -1 do -- 8, 7
if not addUsedMarks[i] then
addUsedMarks[i] = args.sourceGUID
self:ScanForMobs(args.sourceGUID, 2, i, 1, nil, 12, "SetIconOnStormbringers")
break
end
end
end
end
end
if self:AntiSpam(10, 2) then
self.vb.addsCount = self.vb.addsCount + 1
specWarnPrimalistReinforcements:Show(self.vb.addsCount)
specWarnPrimalistReinforcements:Play("killmob")
local timer = self:IsMythic() and mythicAddsTimers[self.vb.addsCount+1] or self:IsHeroic() and heroicAddsTimers[self.vb.addsCount+1] or self:IsEasy() and normalAddsTimers[self.vb.addsCount+1]
if timer then
timerPrimalistReinforcementsCD:Start(timer, self.vb.addsCount+1)
end
end
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 375889 then
warnGreatstaffsWrath:CombinedShow(2, args.destName)--Aggregated for now in case strat is to just pop multiple eggs and CD like fuck for Clutchwatcher's Rage
if args:IsPlayer() then
specWarnGreatstaffsWrath:Show()
specWarnGreatstaffsWrath:Play("targetyou")
yellGreatstaffsWrath:Yell()
end
elseif spellId == 380483 then
warnEGreatstaffsWrath:CombinedShow(2, args.destName)--Aggregated for now in case strat is to just pop multiple eggs and CD like fuck for Clutchwatcher's Rage
if args:IsPlayer() then
specWarnEGreatstaffsWrath:Show()
specWarnEGreatstaffsWrath:Play("targetyou")
yellEGreatstaffsWrath:Yell()
end
elseif spellId == 375620 then
warnIonizingCharge:CombinedShow(0.3, args.destName)
if args:IsPlayer() then
specWarnIonizingCharge:Show()
specWarnIonizingCharge:Play("range5")
yellIonizingCharge:Yell()
end
elseif spellId == 396264 then
if args:IsPlayer() then
specWarnDetonatingStoneslam:Show()
specWarnDetonatingStoneslam:Play("gathershare")
yellDetonatingStoneslam:Yell()
yellDetonatingStoneslamFades:Countdown(spellId)
else
specWarnDetonatingStoneslamTaunt:Show(args.destName)
specWarnDetonatingStoneslamTaunt:Play("tauntboss")
end
elseif spellId == 375829 then
warnClutchwatchersRage:Cancel()
warnClutchwatchersRage:Schedule(3, args.destName, args.amount or 1)
elseif spellId == 376330 then
if args:IsPlayer() then
if self.Options.NPFixate then
DBM.Nameplate:Show(true, args.sourceGUID, spellId)
end
end
elseif spellId == 378782 and not args:IsPlayer() then
local amount = args.amount or 1
local _, _, _, _, _, expireTime = DBM:UnitDebuff("player", spellId)
local remaining
if expireTime then
remaining = expireTime-GetTime()
end
if self:GetStage(2) and (not remaining or remaining and remaining < 6.1) and not UnitIsDeadOrGhost("player") and not self:IsHealer() then
specWarnMortalWounds:Show(args.destName)
specWarnMortalWounds:Play("tauntboss")
else
warnMortalWounds:Show(args.destName, amount)
end
elseif spellId == 390561 and args:IsPlayer() then
warnDiurnasGaze:Show()
elseif spellId == 376272 and not args:IsPlayer() then
local amount = args.amount or 1
if amount % 2 == 0 then
warnBurrowingStrike:Show(args.destName, amount)
end
elseif spellId == 375475 and not args:IsPlayer() then
local amount = args.amount or 1
warnRendingBite:Show(args.destName, amount)
elseif spellId == 375879 then
local amount = args.amount or 1
warnBroodkeepersFury:Show(args.destName, amount)
timerBroodkeepersFuryCD:Start(30, amount+1)
if self:GetStage(2, 1) then
self:SetStage(2)
self.vb.wildFireCount = 0
--Just stop outright
-- timerRapidIncubationCD:Stop()
timerPrimalistReinforcementsCD:Stop()
--Timers that do not reset.
--Mortal Stone Claws, since we don't swap timers, no action needed
--On mythic mortal claws swaps to mortal slam, doesn't change on heroic and below
if self:IsMythic() then
local remainingCombo = timerMortalStoneclawsCD:GetRemaining(self.vb.tankCombocount+1)
if remainingCombo then
timerMortalStoneclawsCD:Stop()
timerMortalStoneclawsCD:Start(remainingCombo, self.vb.tankCombocount+1)--Does NOT restart anymore, even though on mythic it inherits a cast sequence, it still finishes out previous CD
end
end
--Tank timer doesn't reset, just keeps going, staff timer doesn't restart, just swaps to new object
--local remainingStaff = timerGreatstaffoftheBroodkeeperCD:GetRemaining(self.vb.staffCount+1)
--if remainingStaff then
-- timerGreatstaffoftheBroodkeeperCD:Stop()
-- timerEGreatstaffoftheBroodkeeperCD:Start(remainingStaff, self.vb.staffCount+1)--Does NOT restart anymore, even though on mythic it inherits a cast sequence, it still finishes out previous CD
--end
local remainingIcy = timerGreatstaffoftheBroodkeeperCD:GetRemaining(self.vb.icyCount+1)
if remainingIcy then
timerIcyShroudCD:Stop()
timerFrozenShroudCD:Start(remainingIcy, 1)
end
self.vb.icyCount = 0--Reused for frozen shroud
end
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 375809 then
local amount = args.amount or 0
warnEggsLeft:Cancel()
warnEggsLeft:Schedule(2, amount)
if amount == 0 then
self.vb.eggsGone = true
end
elseif spellId == 376330 then
if args:IsPlayer() then
if self.Options.NPFixate then
DBM.Nameplate:Hide(true, args.sourceGUID, spellId)
end
end
elseif spellId == 396264 then
if args:IsPlayer() then
yellDetonatingStoneslamFades:Cancel()
end
end
end
mod.SPELL_AURA_REMOVED_DOSE = mod.SPELL_AURA_REMOVED
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 191225 then--Tarasek Earthreaver
timerBurrowingStrikeCD:Stop(args.destGUID)
timerTremorsCD:Stop(args.destGUID)
elseif cid == 192771 or cid == 191230 then--Dragonspawn Flamebender
timerCauterizingFlashflamesCD:Stop(args.destGUID)
timerFlameSentryCD:Stop(args.destGUID)
elseif cid == 191222 then--Juvenile Frost Proto-Dragon
timerRendingBiteCD:Stop(args.destGUID)
timerChillingTantrumCD:Stop(args.destGUID)
elseif cid == 191206 then--Primalist Mage
for i = 6, 4, -1 do -- 6, 5, 4
if addUsedMarks[i] == args.destGUID then
addUsedMarks[i] = nil
return
end
end
elseif cid == 191232 then--Drakonid Stormbringer
timerIonizingChargeCD:Stop(args.destGUID)
for i = 8, 7, -1 do -- 8, 7
if addUsedMarks[i] == args.destGUID then
addUsedMarks[i] = nil
break
end
end
end
end
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if spellId == 390747 and destGUID == UnitGUID("player") and self:AntiSpam(2, 4) then
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE