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.

275 lines
12 KiB

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