local mod = DBM:NewMod(2609, "DBM-Raids-WarWithin", 1, 1273) local L = mod:GetLocalizedStrings() mod:SetRevision("20240711100310") mod:SetCreatureID(214504) mod:SetEncounterID(2918) --mod:SetUsedIcons(1, 2, 3) mod:SetHotfixNoticeRev(20240614000000) --mod:SetMinSyncRevision(20230929000000) mod.respawnTime = 29 mod:RegisterCombat("combat") mod:RegisterEventsInCombat( "SPELL_CAST_START 444687 439789 455373 439784 439795 439811 454989 452806 456853", "SPELL_AURA_APPLIED 458067", "SPELL_AURA_APPLIED_DOSE 458067" -- "SPELL_PERIODIC_DAMAGE", -- "SPELL_PERIODIC_MISSED", -- "UNIT_SPELLCAST_START boss1" ) --TODO, maybe auto mark https://www.wowhead.com/beta/spell=434579/corrosion so still assign clears by icon --TODO, maybe use https://www.wowhead.com/beta/spell=455287/infested-bite to announce or mark infested spawns after the fact for healing? --TODO, emphasize Enveloping webs cast itself? will probably only have a soon warning for it that's emphasized with a precise timer --TODO, change option keys to match BW for weak aura compatability before live --[[ (ability.id = 444687 or ability.id = 439789 or ability.id = 455373 or ability.id = 439784 or ability.id = 439795 or ability.id = 439811 or ability.id = 454989 or ability.id = 452806) and type = "begincast" --]] local warnSavageWound = mod:NewStackAnnounce(458067, 2, nil, "Tank|Healer") local warnRollingAcid = mod:NewIncomingCountAnnounce(439789, 2)--General announce, private aura sound will be personal emphasis local warnInfestedSpawn = mod:NewIncomingCountAnnounce(455373, 2) local warnSpinneretsStrands = mod:NewIncomingCountAnnounce(439784, 3)--General announce, private aura sound will be personal emphasis local warnErosiveSpray = mod:NewCountAnnounce(439811, 2) local warnEnvelopingWebs = mod:NewCountAnnounce(454989, 4, nil, nil, 157317)--Shortname "Webs" local warnAcidEruption = mod:NewCastAnnounce(452806, 4) local specWarnSavageAssault = mod:NewSpecialWarningDefensive(444687, nil, nil, nil, 1, 2) local specWarnSavageWoundSwap = mod:NewSpecialWarningTaunt(458067, nil, nil, nil, 1, 2) local specWarnWebReave = mod:NewSpecialWarningCount(439795, nil, nil, nil, 2, 2) --local yellWebReave = mod:NewShortYell(439795, DBM_COMMON_L.GROUPSOAK, nil, nil, "YELL") --local yellSearingAftermathFades = mod:NewShortFadesYell(422577) local specWarnAcidEruption = mod:NewSpecialWarningInterrupt(452806, "HasInterrupt", nil, nil, 1, 2) --local specWarnGTFO = mod:NewSpecialWarningGTFO(421532, nil, nil, nil, 1, 8) local timerSavageAssaultCD = mod:NewCDCountTimer(49, 444687, DBM_COMMON_L.TANKDEBUFF.." (%s)", "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON) local timerRollingAcidCD = mod:NewCDCountTimer(21.3, 439789, nil, nil, nil, 3) local timerInfestedSpawnCD = mod:NewCDCountTimer(21.3, 455373, nil, nil, nil, 1) local timerSpinneretsStrandsCD = mod:NewCDCountTimer(33.9, 439784, nil, nil, nil, 3) local timerWebReaveCD = mod:NewCDCountTimer(49, 439795, nil, nil, nil, 3, nil, DBM_COMMON_L.DEADLY_ICON) local timerErosiveSprayCD = mod:NewCDCountTimer(49, 439811, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON) local timerEnvelopingWebsCD = mod:NewAITimer(49, 454989, 157317, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)--Shortname "Webs" local timerMovementCD = mod:NewStageContextCountTimer(49, 334371, nil, nil, nil, 6, 178717) mod:AddPrivateAuraSoundOption(439790, true, 439789, 1)--Rolling Acid target mod:AddPrivateAuraSoundOption(455284, true, 455373, 1)--Infested Spawn target mod:AddPrivateAuraSoundOption(439783, true, 439784, 1)--Spineret's Strands target mod.vb.assaultCount = 0 mod.vb.rollingCount = 0 mod.vb.spawnCount = 0 mod.vb.strandsCount = 0 mod.vb.reaveCount = 0 mod.vb.sprayCount = 0 mod.vb.envelopingCount = 0 mod.vb.movementCount = 0 local savedDifficulty = "heroic" local allTimers = { ["normal"] = { --Erosive Spray [439811] = {3.0, 31.4, 47.0, 59.7, 47.0, 59.1, 47.1, 61.1}, --Infested Spawn [455373] = {62.4, 85.3, 80.5, 52.9, 80.8}, --Rolling Acid [439789] = {43.4, 81.2, 52.9, 100.2}, --Savage Assault [444687] = {10.9, 15.6, 23.5, 7.8, 15.7, 36.2, 7.8, 15.7, 23.5, 7.8, 15.7, 35.5, 7.9, 15.7, 23.5, 7.8, 15.7, 35.4, 7.8, 15.7, 23.5, 7.8}, --Spinneret's Strands [439784] = {14.9, 52.9, 100.9, 84.7, 80.4}, --Web Reave [439795] = {}, --Caustic Hail [456853] = {90.0, 106.8, 106.1}, }, ["heroic"] = { --Erosive Spray [439811] = {3.0, 29.6, 44.4, 57.5, 44.4, 56.6, 44.4, 59.1, 44.4, 59.6, 44.5, 57.4, 44.4}, --Infested Spawn [455373] = {59.1, 82.9, 75.7, 29.7, 20.2, 78.9, 123.2, 57.4, 29.8, 20.2}, --Rolling Acid [439789] = {41.4, 76.7, 30.2, 19.6, 95.4, 103.6, 59.5, 29.8, 20.2, 77.1}, --Savage Assault [444687] = {10.5, 13.0, 23.0, 6.5, 14.9, 42.7, 14.8, 23.6, 5.9, 14.8, 3.7, 38.6, 14.8, 23.7, 5.9, 14.8, 3.5, 40.6, 14.8, 23.7, 5.9, 14.9, 3.7, 41.0, 14.8, 23.1, 6.5, 14.8, 3.7, 38.9, 14.8, 23.8, 5.9, 14.8, 3.7}, --Spinneret's Strands [439784] = {14.2, 27.1, 20.2, 96.4, 81.8, 78.3, 30.3, 19.7, 79.3, 121.1}, --Web Reave [439795] = {106.3, 101.6, 103.6, 104.0, 101.9}, --Caustic Hail [456853] = {86.4, 102, 102.2, 103.5, 104.0}, }, ["mythic"] = { --Erosive Spray [439811] = {2.9, 29.6, 44.4, 54.2, 44.4, 49.1, 44.4, 51.3, 44.4, 48.9, 44.4, 49.5, 44.4, 78.4}, --Infested Spawn [455373] = {39.8, 78.9, 24.2, 69.4, 90.1, 25.2, 68.1, 29.7, 69.7}, --Rolling Acid [439789] = {16.0, 30.3, 112.7, 49.1, 29.7, 14.7, 156.3, 44.4, 93.9, 78.4},--156 is probably 150 --Savage Assault [444687] = {10.3, 14.8, 23.8, 9.0, 11.7, 39.4, 14.8, 23.7, 5.9, 14.8, 3.7, 30.6, 14.8, 23.1, 6.4, 14.8, 3.7, 32.7, 14.8, 23.6, 6.0, 14.8, 3.7, 30.4, 14.8, 23.7, 5.9, 14.8, 3.7, 31.0, 14.8, 23.1, 6.5, 14.8, 3.7, 59.9, 14.8}, --Spinneret's Strands [439784] = {19.6, 45.0, 73.4, 93.5, 76.0, 38.9, 93.4, 49.4, 25.3, 97.6},--One of these possibly 6 seconds off --Web Reave [439795] = {51.1, 50.4, 93.6, 95.7, 93.4, 93.9, 122.8},--One of these might be 6 seconds off --Caustic Hail [456853] = {86.3, 98.6, 93.6, 95.7, 93.4, 122.8}, }, } function mod:OnCombatStart(delay) self.vb.assaultCount = 0 self.vb.rollingCount = 0 self.vb.spawnCount = 0 self.vb.strandsCount = 0 self.vb.reaveCount = 0 self.vb.sprayCount = 0 self.vb.envelopingCount = 0 self.vb.movementCount = 0 if self:IsMythic() then savedDifficulty = "mythic" elseif self:IsHeroic() then savedDifficulty = "heroic" else--Combine LFR and Normal savedDifficulty = "normal" end timerSavageAssaultCD:Start(allTimers[savedDifficulty][444687][1]-delay, 1) timerRollingAcidCD:Start(allTimers[savedDifficulty][439789][1]-delay, 1) timerInfestedSpawnCD:Start(allTimers[savedDifficulty][455373][1]-delay, 1) timerSpinneretsStrandsCD:Start(allTimers[savedDifficulty][439784][1]-delay, 1) timerErosiveSprayCD:Start(allTimers[savedDifficulty][439811][1]-delay, 1) timerMovementCD:Start(allTimers[savedDifficulty][456853][1]-delay, 1) if self:IsHard() then timerWebReaveCD:Start(allTimers[savedDifficulty][439795][1]-delay, 1) end if self:IsMythic() then timerEnvelopingWebsCD:Start(1) end self:EnablePrivateAuraSound(439790, "targetyou", 2)--Raid version, (434406 is in dungeon) --self:EnablePrivateAuraSound(434406, "targetyou", 2, 439790)--Likely dungeon version of Rolling Acid self:EnablePrivateAuraSound(455284, "mobout", 2)--Maybe better sound later, but this one does say "mob out" as in "mob on you, get out and spread" which is the mechanic self:EnablePrivateAuraSound(439815, "mobout", 2, 455284)--Secondary ID for Infested Spawn self:EnablePrivateAuraSound(439783, "pullin", 12)--Raid version of Spinneret's Strands -- self:EnablePrivateAuraSound(434090, "pullin", 12, 439783)--Likely the Dungeon version of Spinneret's Strands end function mod:OnTimerRecovery() if self:IsMythic() then savedDifficulty = "mythic" elseif self:IsHeroic() then savedDifficulty = "heroic" else--Combine LFR and Normal savedDifficulty = "normal" end end function mod:SPELL_CAST_START(args) local spellId = args.spellId if spellId == 444687 then self.vb.assaultCount = self.vb.assaultCount + 1 if self:IsTanking("player", "boss1", nil, true) then specWarnSavageAssault:Show() specWarnSavageAssault:Play("defensive") end local timer = self:GetFromTimersTable(allTimers, savedDifficulty, false, spellId, self.vb.assaultCount+1) if timer then timerSavageAssaultCD:Start(timer, self.vb.assaultCount+1) end elseif spellId == 439789 then self.vb.rollingCount = self.vb.rollingCount + 1 warnRollingAcid:Show(self.vb.rollingCount) local timer = self:GetFromTimersTable(allTimers, savedDifficulty, false, spellId, self.vb.rollingCount+1) if timer then timerRollingAcidCD:Start(timer, self.vb.rollingCount+1) end elseif spellId == 455373 then self.vb.spawnCount = self.vb.spawnCount + 1 warnInfestedSpawn:Show(self.vb.spawnCount) local timer = self:GetFromTimersTable(allTimers, savedDifficulty, false, spellId, self.vb.spawnCount+1) if timer then timerInfestedSpawnCD:Start(timer, self.vb.spawnCount+1) end elseif spellId == 439784 then self.vb.strandsCount = self.vb.strandsCount + 1 warnSpinneretsStrands:Show(self.vb.strandsCount) local timer = self:GetFromTimersTable(allTimers, savedDifficulty, false, spellId, self.vb.strandsCount+1) if timer then timerSpinneretsStrandsCD:Start(timer, self.vb.strandsCount+1) end elseif spellId == 439795 then self.vb.reaveCount = self.vb.reaveCount + 1 specWarnWebReave:Show(self.vb.reaveCount) specWarnWebReave:Play("gathershare") local timer = self:GetFromTimersTable(allTimers, savedDifficulty, false, spellId, self.vb.reaveCount+1) if timer then timerWebReaveCD:Start(timer, self.vb.reaveCount+1) end elseif spellId == 439811 then self.vb.sprayCount = self.vb.sprayCount + 1 warnErosiveSpray:Show(self.vb.sprayCount) local timer = self:GetFromTimersTable(allTimers, savedDifficulty, false, spellId, self.vb.sprayCount+1) if timer then timerErosiveSprayCD:Start(timer, self.vb.sprayCount+1) end elseif spellId == 454989 then--Mythic self.vb.envelopingCount = self.vb.envelopingCount + 1 warnEnvelopingWebs:Show(self.vb.envelopingCount) local timer = self:GetFromTimersTable(allTimers, savedDifficulty, false, spellId, self.vb.envelopingCount+1) if timer then timerEnvelopingWebsCD:Start(timer, self.vb.envelopingCount+1) end elseif spellId == 452806 then if self.Options.SpecWarn452806Interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnAcidEruption:Show(args.sourceName) specWarnAcidEruption:Play("kickcast") else warnAcidEruption:Show() end elseif spellId == 456853 then self.vb.movementCount = self.vb.movementCount + 1 local timer = self:GetFromTimersTable(allTimers, savedDifficulty, false, spellId, self.vb.movementCount+1) if timer then timerMovementCD:Start(timer, self.vb.movementCount+1) end end end function mod:SPELL_AURA_APPLIED(args) local spellId = args.spellId if spellId == 458067 then local uId = DBM:GetRaidUnitId(args.destName) if self:IsTanking(uId) then if not DBM:UnitDebuff("player", spellId) and not UnitIsDeadOrGhost("player") then specWarnSavageWoundSwap:Show(args.destName) specWarnSavageWoundSwap:Play("tauntboss") else warnSavageWound:Show(args.destName, args.amount or 1) end end end end mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED --[[ function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName) if spellId == 421532 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:WebReaveTarget(targetname) -- if not targetname then return end -- if targetname == UnitName("player") then -- yellWebReave:Yell() -- end --end --function mod:UNIT_SPELLCAST_START(uId, _, spellId) -- if spellId == 439795 then -- self:BossUnitTargetScanner(uId, "WebReaveTarget") -- end --end