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.
274 lines
12 KiB
274 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
|
|
|