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.

218 lines
9.8 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("20231107112605")
--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