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.

544 lines
18 KiB

local mod = DBM:NewMod(2609, "DBM-Raids-WarWithin", 1, 1273)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20240720200947")
mod:SetCreatureID(214504)
mod:SetEncounterID(2918)
--mod:SetUsedIcons(1, 2, 3)
mod:SetHotfixNoticeRev(20240720000000)
mod:SetMinSyncRevision(20240720000000)
mod.respawnTime = 29
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 444687 439789 455373 439784 439795 439811 454989 452806 456853 456762",
"SPELL_AURA_APPLIED 458067",
"SPELL_AURA_APPLIED_DOSE 458067",
"SPELL_INTERRUPT"
-- "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 or ability.id = 456853 or ability.id = 456841 or ability.id = 456762) and type = "begincast"
or stoppedability.id = 452806
--]]
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:NewCDCountTimer(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.movementFinished = false
--Totals used for fight overall
mod.vb.assaultCountTotal = 0
mod.vb.rollingCountTotal = 0
mod.vb.spawnCountTotal = 0
mod.vb.strandsCountTotal = 0
mod.vb.sprayCountTotal = 0
mod.vb.envelopingCountTotal = 0
--Non totals used for phase counts
mod.vb.assaultCount = 0
mod.vb.rollingCount = 0
mod.vb.spawnCount = 0
mod.vb.strandsCount = 0
mod.vb.sprayCount = 0
mod.vb.envelopingCount = 0
--Totals that don't need phase counts
mod.vb.reaveCount = 0
mod.vb.movementCount = 0
local savedDifficulty = "heroic"
local allTimers = {
["normal"] = {--Complete up to 6:44
[1] = {
--Erosive Spray
[439811] = {3.0, 31.4, 47.0},
--Infested Spawn
[455373] = {62.4},
--Rolling Acid
[439789] = {43.3},
--Savage Assault
[444687] = {10.9, 15.6, 23.5, 7.8, 15.7},
--Spinneret's Strands
[439784] = {14.9, 52.9},
},
[2] = {
--Erosive Spray
[439811] = {35.0, 47.0},
--Infested Spawn
[455373] = {41.4},
--Rolling Acid
[439789] = {18.3, 52.9},
--Savage Assault
[444687] = {3.6, 7.8, 15.7, 23.5, 7.8, 15.7},
--Spinneret's Strands
[439784] = {62.4},
},
[3] = {
--Erosive Spray
[439811] = {35.0, 47.0},
--Infested Spawn
[455373] = {15.9, 52.9},
--Rolling Acid
[439789] = {65.4},
--Savage Assault
[444687] = {3.6, 7.9, 15.7, 23.5, 7.8, 15.7},
--Spinneret's Strands
[439784] = {40.9},
},
[4] = {
--Erosive Spray
[439811] = {35.0},
--Infested Spawn
[455373] = {41.4},
--Rolling Acid
[439789] = {65.4},
--Savage Assault
[444687] = {3.6, 7.8, 15.7, 23.5, 7.8, 15.7},
--Spinneret's Strands
[439784] = {15.3, 52.9},
},
[5] = {
--Erosive Spray
[439811] = {0},
--Infested Spawn
[455373] = {0},
--Rolling Acid
[439789] = {0},
--Savage Assault
[444687] = {0},
--Spinneret's Strands
[439784] = {0},
},
[6] = {
--Erosive Spray
[439811] = {0},
--Infested Spawn
[455373] = {0},
--Rolling Acid
[439789] = {0},
--Savage Assault
[444687] = {0},
--Spinneret's Strands
[439784] = {0},
},
[7] = {
--Erosive Spray
[439811] = {0},
--Infested Spawn
[455373] = {0},
--Rolling Acid
[439789] = {0},
--Savage Assault
[444687] = {0},
--Spinneret's Strands
[439784] = {0},
},
},
["heroic"] = {--Complete up to 10:07
[1] = {
--Erosive Spray
[439811] = {3.0, 29.6, 44.4},
--Infested Spawn
[455373] = {59.0},
--Rolling Acid
[439789] = {41.4},
--Savage Assault
[444687] = {10.5, 13.0, 23.0, 6.5, 14.9},
--Spinneret's Strands
[439784] = {14.1, 27.1, 20.2},
},
[2] = {
--Erosive Spray
[439811] = {33.3, 44.4},
--Infested Spawn
[455373] = {40.5},
--Rolling Acid
[439789] = {16.7, 30.2, 19.6},
--Savage Assault
[444687] = {11.0, 14.8, 23.6, 5.9, 14.8, 3.7},
--Spinneret's Strands
[439784] = {59.1},
},
[3] = {
--Erosive Spray
[439811] = {33.3, 44.4},
--Infested Spawn
[455373] = {15.2, 29.7, 20.2},
--Rolling Acid
[439789] = {61.2},
--Savage Assault
[444687] = {11.0, 14.8, 23.7, 5.9, 14.8, 3.5},
--Spinneret's Strands
[439784] = {40.0},
},
[4] = {
--Erosive Spray
[439811] = {33.2, 44.4},
--Infested Spawn
[455373] = {40.5},
--Rolling Acid
[439789] = {61.2},
--Savage Assault
[444687] = {11.0, 14.8, 23.7, 5.9, 14.9, 3.7},
--Spinneret's Strands
[439784] = {14.7, 30.3, 19.7},
},
[5] = {
--Erosive Spray
[439811] = {33.2, 44.4},
--Infested Spawn
[455373] = {59.6},
--Rolling Acid
[439789] = {16.7, 29.8, 20.2},
--Savage Assault
[444687] = {11.0, 14.8, 23.1, 6.5, 14.8, 3.7},
--Spinneret's Strands
[439784] = {39.9},
},
[6] = {
--Erosive Spray
[439811] = {33.2, 44.4},
--Infested Spawn
[455373] = {15.2, 29.8, 20.2},
--Rolling Acid
[439789] = {42.0},
--Savage Assault
[444687] = {11.0, 14.8, 23.8, 5.9, 14.8, 3.7},
--Spinneret's Strands
[439784] = {59.1},
},
[7] = {
--Erosive Spray
[439811] = {0},
--Infested Spawn
[455373] = {0},
--Rolling Acid
[439789] = {0},
--Savage Assault
[444687] = {0},
--Spinneret's Strands
[439784] = {0},
},
},
["mythic"] = {--11:00
[1] = {
--Erosive Spray
[439811] = {2.9, 29.6, 44.4},
--Infested Spawn
[455373] = {39.8},
--Rolling Acid
[439789] = {16.0, 30.3},
--Savage Assault
[444687] = {10.3, 14.8, 23.8, 9.0, 11.7},
--Spinneret's Strands
[439784] = {19.6, 45.0},
--Enveloping Webs
[454989] = {60.1},
},
[2] = {
--Erosive Spray
[439811] = {33.2, 44.4},
--Infested Spawn
[455373] = {20.8, 24.2},
--Rolling Acid
[439789] = {61.2},
--Savage Assault
[444687] = {11.0, 14.8, 23.7, 5.9, 14.8, 3.7},
--Spinneret's Strands
[439784] = {40.0},
--Enveloping Webs
[454989] = {14.7, 50.0},
},
[3] = {
--Erosive Spray
[439811] = {33.2, 44.4},
--Infested Spawn
[455373] = {20.8},
--Rolling Acid
[439789] = {16.7, 29.7, 14.7},
--Savage Assault
[444687] = {11.0, 14.8, 23.1, 6.4, 14.8, 3.7},
--Spinneret's Strands
[439784] = {40.0},
--Enveloping Webs
[454989] = {64.7},
},
[4] = {
--Erosive Spray
[439811] = {33.2, 44.4},
--Infested Spawn
[455373] = {15.2, 25.2},
--Rolling Acid
[439789] = {0},--Not cast on 4th area, bug?
--Savage Assault
[444687] = {11.0, 14.8, 23.6, 6.0, 14.8, 3.7},
--Spinneret's Strands
[439784] = {20.3, 38.9},
--Enveloping Webs
[454989] = {45.0, 19.7},
},
[5] = {
--Erosive Spray
[439811] = {33.2, 44.4},
--Infested Spawn
[455373] = {15.2, 29.7},
--Rolling Acid
[439789] = {22.3, 44.4},
--Savage Assault
[444687] = {11.0, 14.8, 23.7, 5.9, 14.8, 3.7},
--Spinneret's Strands
[439784] = {59.1},
--Enveloping Webs
[454989] = {40.0},
},
[6] = {
--Erosive Spray
[439811] = {33.2, 44.4},
--Infested Spawn
[455373] = {20.7},
--Rolling Acid
[439789] = {66.7},
--Savage Assault
[444687] = {11.0, 14.8, 23.1, 6.5, 14.8, 3.7},
--Spinneret's Strands
[439784] = {14.7, 25.3},
--Enveloping Webs
[454989] = {44.5, 14.6},
},
[7] = {--Not complete
--Erosive Spray
[439811] = {33.2, 44.4},--44.4 is assumed
--Infested Spawn
[455373] = {0},--Not enough data
--Rolling Acid
[439789] = {22.3},--Not enough data
--Savage Assault
[444687] = {11.0, 14.8, 23.1, 5.9, 14.8, 3.7},--23 + is assumed
--Spinneret's Strands
[439784] = {14.7},--Not enough data
--Enveloping Webs
[454989] = {0},--Not enough data
},
},
}
function mod:OnCombatStart(delay)
self:SetStage(1)
self.vb.movementFinished = false
self.vb.assaultCountTotal = 0
self.vb.rollingCountTotal = 0
self.vb.spawnCountTotal = 0
self.vb.strandsCountTotal = 0
self.vb.sprayCountTotal = 0
self.vb.envelopingCountTotal = 0
self.vb.assaultCount = 0
self.vb.rollingCount = 0
self.vb.spawnCount = 0
self.vb.strandsCount = 0
self.vb.sprayCount = 0
self.vb.envelopingCount = 0
self.vb.reaveCount = 0
self.vb.movementCount = 0
if self:IsMythic() then
savedDifficulty = "mythic"
timerWebReaveCD:Start(51.1-delay, 1)--Only mythic gets one before first movement, but heroic might now too, need to recheck heroic
timerEnvelopingWebsCD:Start(60.1-delay, 1)
elseif self:IsHeroic() then
savedDifficulty = "heroic"
else--Combine LFR and Normal
savedDifficulty = "normal"
end
timerSavageAssaultCD:Start(allTimers[savedDifficulty][1][444687][1]-delay, 1)
timerRollingAcidCD:Start(allTimers[savedDifficulty][1][439789][1]-delay, 1)
timerInfestedSpawnCD:Start(allTimers[savedDifficulty][1][455373][1]-delay, 1)
timerSpinneretsStrandsCD:Start(allTimers[savedDifficulty][1][439784][1]-delay, 1)
timerErosiveSprayCD:Start(allTimers[savedDifficulty][1][439811][1]-delay, 1)
timerMovementCD:Start(self:IsMythic() and 86.3 or 90, 1)
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.assaultCountTotal = self.vb.assaultCountTotal + 1
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, self.vb.phase, spellId, self.vb.assaultCount+1)
if timer then
timerSavageAssaultCD:Start(timer, self.vb.assaultCountTotal+1)
end
elseif spellId == 439789 then
self.vb.rollingCountTotal = self.vb.rollingCountTotal + 1
self.vb.rollingCount = self.vb.rollingCount + 1
warnRollingAcid:Show(self.vb.rollingCountTotal)
local timer = self:GetFromTimersTable(allTimers, savedDifficulty, self.vb.phase, spellId, self.vb.rollingCount+1)
if timer then
timerRollingAcidCD:Start(timer, self.vb.rollingCountTotal+1)
end
elseif spellId == 455373 then
self.vb.spawnCountTotal = self.vb.spawnCountTotal + 1
self.vb.spawnCount = self.vb.spawnCount + 1
warnInfestedSpawn:Show(self.vb.spawnCountTotal)
local timer = self:GetFromTimersTable(allTimers, savedDifficulty, self.vb.phase, spellId, self.vb.spawnCount+1)
if timer then
timerInfestedSpawnCD:Start(timer, self.vb.spawnCountTotal+1)
end
elseif spellId == 439784 then
self.vb.strandsCountTotal = self.vb.strandsCountTotal + 1
self.vb.strandsCount = self.vb.strandsCount + 1
warnSpinneretsStrands:Show(self.vb.strandsCountTotal)
local timer = self:GetFromTimersTable(allTimers, savedDifficulty, self.vb.phase, spellId, self.vb.strandsCount+1)
if timer then
timerSpinneretsStrandsCD:Start(timer, self.vb.strandsCountTotal+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, self.vb.phase, spellId, self.vb.reaveCount+1)
if timer then
timerWebReaveCD:Start(timer, self.vb.reaveCount+1)
end
elseif spellId == 439811 then
self.vb.sprayCountTotal = self.vb.sprayCountTotal + 1
self.vb.sprayCount = self.vb.sprayCount + 1
warnErosiveSpray:Show(self.vb.sprayCountTotal)
local timer = self:GetFromTimersTable(allTimers, savedDifficulty, self.vb.phase, spellId, self.vb.sprayCount+1)
if timer then
timerErosiveSprayCD:Start(timer, self.vb.sprayCountTotal+1)
end
elseif spellId == 454989 then--Mythic
self.vb.envelopingCountTotal = self.vb.envelopingCountTotal + 1
self.vb.envelopingCount = self.vb.envelopingCount + 1
warnEnvelopingWebs:Show(self.vb.envelopingCountTotal)
local timer = self:GetFromTimersTable(allTimers, savedDifficulty, self.vb.phase, spellId, self.vb.envelopingCount+1)
if timer then
timerEnvelopingWebsCD:Start(timer, self.vb.envelopingCountTotal+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--Inital Rain
self.vb.movementFinished = false
self.vb.movementCount = self.vb.movementCount + 1
elseif spellId == 456762 then--Secondary Rain
self.vb.movementFinished = true
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_INTERRUPT(args)
if args.extraSpellId == 452806 and self.vb.movementFinished then
self:SetStage(0)
self.vb.assaultCount = 0
self.vb.rollingCount = 0
self.vb.spawnCount = 0
self.vb.strandsCount = 0
self.vb.sprayCount = 0
self.vb.envelopingCount = 0
if self:IsHard() then
timerWebReaveCD:Start(3.6, self.vb.reaveCount+1)
end
if self:IsMythic() then
timerEnvelopingWebsCD:Start(allTimers[savedDifficulty][self.vb.phase][454989][1], self.vb.envelopingCountTotal+1)
end
timerSavageAssaultCD:Start(allTimers[savedDifficulty][self.vb.phase][444687][1], self.vb.assaultCountTotal+1)
timerRollingAcidCD:Start(allTimers[savedDifficulty][self.vb.phase][439789][1], self.vb.rollingCountTotal+1)
timerInfestedSpawnCD:Start(allTimers[savedDifficulty][self.vb.phase][455373][1], self.vb.spawnCountTotal+1)
timerSpinneretsStrandsCD:Start(allTimers[savedDifficulty][self.vb.phase][439784][1], self.vb.strandsCountTotal+1)
timerErosiveSprayCD:Start(allTimers[savedDifficulty][self.vb.phase][439811][1], self.vb.sprayCountTotal+1)
timerMovementCD:Start(self:IsHard() and (self.vb.movementCount == 5 and 115 or 86.3) or 90.5, self.vb.movementCount+1)--5th movement rule is confirmed on mythic but not on heroic
end
end
--[[
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