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.
217 lines
9.7 KiB
217 lines
9.7 KiB
if (DBM:GetTOC() < 100200) then return end--DO NOT DELETE DO NOT DELETE DO NOT DELETE. We don't want this module loading in cataclysm
|
|
local mod = DBM:NewMod("ThroneofTidesTrash", "DBM-Party-Cataclysm", 9)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20231113121941")
|
|
--mod:SetModelID(47785)
|
|
mod:SetZone(643)
|
|
|
|
mod.isTrashMod = true
|
|
|
|
mod:RegisterEvents(
|
|
"SPELL_CAST_START 76813 76815 76820 426741 426684 426645 428926 76590 429021 426783 428542 429176 426905",
|
|
-- "SPELL_CAST_SUCCESS",
|
|
"SPELL_AURA_APPLIED 76820 428542 426618 426659",
|
|
"SPELL_AURA_APPLIED_DOSE 426659",
|
|
-- "SPELL_AURA_REMOVED",
|
|
"SPELL_PERIODIC_DAMAGE 426688",
|
|
"SPELL_PERIODIC_MISSED 426688",
|
|
"UNIT_DIED"
|
|
)
|
|
|
|
--TODO, additional spells not covered in wowhead guide?
|
|
--TODO, hybrid the mod for cataclysm classic (which basically would only have like 3-4 spells of this entire list
|
|
--[[
|
|
(ability.id = 76813 or ability.id = 76815 or ability.id = 76820 or ability.id = 426741 or ability.id = 426684 or ability.id = 426645 or ability.id = 428926 or ability.id = 76590 or ability.id = 429021 or ability.id = 426783 or ability.id = 428542 or ability.id = 429176 or ability.id = 426905) and type = "begincast"
|
|
--]]
|
|
--https://www.wowhead.com/guide/mythic-plus-dungeons/throne-of-the-tides-strategy
|
|
local warnCrushingDepths = mod:NewTargetNoFilterAnnounce(428542, 4)
|
|
local warnSlitheringAssault = mod:NewTargetNoFilterAnnounce(426618, 2, nil, "RemoveEnrage")
|
|
local warnHealingWave = mod:NewCastAnnounce(76813, 3)
|
|
local warnHex = mod:NewCastAnnounce(76820, 2)
|
|
local warnClenchingTentacles = mod:NewCastAnnounce(428926, 4, nil, nil, nil, nil, nil, 13)
|
|
local warnPsionicPulse = mod:NewCastAnnounce(426905, 4, nil, nil, nil, nil, nil, 3)
|
|
local warnRazorJaws = mod:NewStackAnnounce(426659, 2, nil, "Tank|Healer")
|
|
|
|
local specWarnShadowSmash = mod:NewSpecialWarningRun(76590, nil, nil, nil, 4, 2)
|
|
local specWarnVolatileBolt = mod:NewSpecialWarningDodge(426684, nil, nil, nil, 2, 2)
|
|
local specWarnAcidBarrageOther = mod:NewSpecialWarningDodge(426645, false, nil, nil, 2, 2)--Non Tank Version (off by default, tank SHOULD aim it away from group, but an option for those who want to be mindful of it)
|
|
local specWarnAcidBarrageTank = mod:NewSpecialWarningDefensive(426645, nil, nil, nil, 1, 2)--Tank Version
|
|
local specWarnShellbreaker = mod:NewSpecialWarningDefensive(426741, nil, nil, nil, 1, 2)
|
|
local specWarnCrush = mod:NewSpecialWarningDefensive(429021, nil, nil, nil, 1, 2)
|
|
--local yellnViciousAmbush = mod:NewYell(388984)
|
|
local specWarnHealingWave = mod:NewSpecialWarningInterrupt(76813, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnWrath = mod:NewSpecialWarningInterrupt(76815, false, nil, nil, 1, 2)--TODO, Is this even used in 10.2 version? no log of it
|
|
local specWarnMindFlay = mod:NewSpecialWarningInterrupt(426783, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnAquablast = mod:NewSpecialWarningInterrupt(429176, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnHex = mod:NewSpecialWarningDispel(76820, "RemoveMagic", nil, nil, 1, 2)
|
|
local specWarnGTFO = mod:NewSpecialWarningGTFO(426688, nil, nil, nil, 1, 8)
|
|
|
|
local timerHealingWaveCD = mod:NewCDNPTimer(17, 76813, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--17-18.2
|
|
local timerHexCD = mod:NewCDNPTimer(20.4, 76820, nil, nil, nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)--Weak sample size, could be wrong
|
|
local timerCrushingDepthsCD = mod:NewCDNPTimer(27.9, 428542, nil, nil, nil, 5, nil, DBM_COMMON_L.HEALER_ICON)--Weak sample size, could be wrong
|
|
local timerShellbreakerCD = mod:NewCDNPTimer(17, 426741, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)--17-19
|
|
local timerVolatileBoltCD = mod:NewCDNPTimer(20.6, 426684, nil, nil, nil, 3)--20.6-24.2
|
|
local timerAcidBarrageCD = mod:NewCDNPTimer(13.3, 426645, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)--13.3-
|
|
local timerClenchingTentaclesCD = mod:NewCDNPTimer(24.3, 428926, nil, nil, nil, 2)--24.3-25.5
|
|
local timerCrushCD = mod:NewCDNPTimer(17, 429021, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
|
|
local timerPsionicPulseCD = mod:NewCDNPTimer(8.5, 426905, nil, nil, nil, 2)
|
|
local timerMindFlayCD = mod:NewCDNPTimer(8.5, 426783, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
|
|
|
|
--Antispam IDs for this mod: 1 run away, 2 dodge, 3 dispel, 4 incoming damage, 5 you/role, 6 misc, 7 off interrupt, 8 GTFO
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if not self:IsValidWarning(args.sourceGUID) then return end
|
|
if spellId == 76813 then
|
|
timerHealingWaveCD:Start(nil, args.sourceGUID)
|
|
if self.Options.SpecWarn76813interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnHealingWave:Show(args.sourceName)
|
|
specWarnHealingWave:Play("kickcast")
|
|
elseif self:AntiSpam(3, 7) then
|
|
warnHealingWave:Show()
|
|
end
|
|
elseif spellId == 76815 then
|
|
--TODO, timer? Does this even exist?
|
|
if self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnWrath:Show(args.sourceName)
|
|
specWarnWrath:Play("kickcast")
|
|
end
|
|
elseif spellId == 429176 then
|
|
--No timer, it's basically spammed off spell lockout
|
|
if self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnAquablast:Show(args.sourceName)
|
|
specWarnAquablast:Play("kickcast")
|
|
end
|
|
elseif spellId == 76820 then
|
|
timerHexCD:Start(nil, args.sourceGUID)
|
|
if self:AntiSpam(3, 5) then
|
|
warnHex:Show()
|
|
end
|
|
elseif spellId == 428542 then
|
|
timerCrushingDepthsCD:Start(nil, args.sourceGUID)
|
|
elseif spellId == 426741 then
|
|
timerShellbreakerCD:Start(nil, args.sourceGUID)
|
|
if self:IsTanking("player", nil, nil, true, args.sourceGUID) and self:AntiSpam(3, 5) then
|
|
specWarnShellbreaker:Show()
|
|
specWarnShellbreaker:Play("defensive")
|
|
end
|
|
elseif spellId == 426684 then
|
|
timerVolatileBoltCD:Start(nil, args.sourceGUID)
|
|
--If remaining time on acid barrage is less than 6 seconds when volatile bolt is cast, it'll be extended
|
|
if timerAcidBarrageCD:GetRemaining(args.sourceGUID) < 6 then
|
|
timerAcidBarrageCD:Stop(args.sourceGUID)
|
|
timerAcidBarrageCD:Start(6, args.sourceGUID)
|
|
end
|
|
if self:AntiSpam(3, 2) then
|
|
specWarnVolatileBolt:Show()
|
|
specWarnVolatileBolt:Play("watchstep")
|
|
end
|
|
elseif spellId == 426645 then
|
|
timerAcidBarrageCD:Start(nil, args.sourceGUID)
|
|
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
|
|
if self:AntiSpam(3, 5) then
|
|
specWarnAcidBarrageTank:Show()
|
|
specWarnAcidBarrageTank:Play("defensive")
|
|
end
|
|
else
|
|
if self:AntiSpam(3, 2) then
|
|
specWarnAcidBarrageOther:Show()
|
|
specWarnAcidBarrageOther:Play("shockwave")
|
|
end
|
|
end
|
|
elseif spellId == 428926 then--Clenching tentacles is the new 10.2 mechanic that now triggers before the old Shadow Smash
|
|
timerClenchingTentaclesCD:Start(nil, args.sourceGUID)
|
|
if self:AntiSpam(3, 6) then
|
|
warnClenchingTentacles:Show()
|
|
warnClenchingTentacles:Play("pullin")
|
|
end
|
|
elseif spellId == 76590 and self:AntiSpam(3, 1) then
|
|
specWarnShadowSmash:Show()
|
|
specWarnShadowSmash:Play("justrun")
|
|
elseif spellId == 429021 then
|
|
timerCrushCD:Start(nil, args.sourceGUID)
|
|
if self:IsTanking("player", nil, nil, true, args.sourceGUID) and self:AntiSpam(3, 5) then
|
|
specWarnCrush:Show()
|
|
specWarnCrush:Play("defensive")
|
|
end
|
|
elseif spellId == 426905 then
|
|
timerPsionicPulseCD:Start(nil, args.sourceGUID)
|
|
if self:AntiSpam(5, 6) then--A lot of these exist in a single pack, so a larger 5 second antispam window used
|
|
warnPsionicPulse:Show()
|
|
warnPsionicPulse:Play("crowdcontrol")
|
|
end
|
|
elseif spellId == 426783 then
|
|
timerMindFlayCD:Start(nil, args.sourceGUID)
|
|
if self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnMindFlay:Show(args.sourceName)
|
|
specWarnMindFlay:Play("kickcast")
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
local spellId = args.spellId
|
|
if spellId == 88055 then
|
|
|
|
end
|
|
end
|
|
--]]
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
if not self.Options.Enabled then return end
|
|
local spellId = args.spellId
|
|
if spellId == 76820 and args:IsDestTypePlayer() and self:CheckDispelFilter("magic") and self:AntiSpam(3, 3) then
|
|
specWarnHex:Show(args.destName)
|
|
specWarnHex:Play("helpdispel")
|
|
elseif spellId == 428542 and (args:IsPlayer() or self:IsHealer()) then
|
|
warnCrushingDepths:Show(args.destName)
|
|
elseif spellId == 426618 and self:AntiSpam(3, 5) then
|
|
warnSlitheringAssault:Show(args.destName)
|
|
elseif spellId == 426659 then
|
|
local amount = args.amount or 1
|
|
if self:AntiSpam(3, 5) then
|
|
warnRazorJaws:Show(args.destName, amount)
|
|
end
|
|
end
|
|
end
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
|
|
|
--[[
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 87726 then
|
|
|
|
end
|
|
end
|
|
--]]
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 41096 then--Naz'jar Oracle
|
|
timerHealingWaveCD:Stop(args.destGUID)
|
|
timerHexCD:Stop(args.destGUID)
|
|
elseif cid == 40577 then--Naz'jar Sentinel
|
|
timerCrushingDepthsCD:Stop(args.destGUID)
|
|
timerShellbreakerCD:Stop(args.destGUID)
|
|
elseif cid == 212673 then--Naj'jar Ravager
|
|
timerVolatileBoltCD:Stop(args.destGUID)
|
|
timerAcidBarrageCD:Stop(args.destGUID)
|
|
elseif cid == 40936 then--Faceless watcher
|
|
timerClenchingTentaclesCD:Stop(args.destGUID)
|
|
timerCrushCD:Stop(args.destGUID)
|
|
elseif cid == 212778 then--Minion of Ghur'sha
|
|
timerPsionicPulseCD:Stop(args.destGUID)
|
|
elseif cid == 212775 then--Faceless Seer
|
|
timerMindFlayCD:Stop(args.destGUID)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
|
|
if spellId == 426688 and destGUID == UnitGUID("player") and self:AntiSpam(3, 8) then
|
|
specWarnGTFO:Show(spellName)
|
|
specWarnGTFO:Play("watchfeet")
|
|
end
|
|
end
|
|
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
|
|
|