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.

210 lines
8.4 KiB

local mod = DBM:NewMod("GrimBatolTrash", "DBM-Party-Cataclysm", 3)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20240616102700")
--mod:SetModelID(47785)
mod.isTrashMod = true
mod:RegisterEvents(
"SPELL_CAST_START 451871 456696 451612 451939 451379 451378 76711 456711 456713 451387 451067 451224 451391",
-- "SPELL_CAST_SUCCESS",
"SPELL_AURA_APPLIED 451613 451614 451379 451224",
-- "SPELL_AURA_APPLIED_DOSE",
"SPELL_AURA_REMOVED 451613",
"UNIT_DIED"
)
--TODO, additional priority interrupts
local warnRive = mod:NewCastAnnounce(451378, 3, nil, nil, "Tank|Healer")
local warnSearMind = mod:NewCastAnnounce(76711, 2)
local specWarnMassTremor = mod:NewSpecialWarningSpell(451871, nil, nil, nil, 2, 2)
local specWarnUmbralWind = mod:NewSpecialWarningSpell(451939, nil, nil, nil, 2, 2)
local specWarnAscension = mod:NewSpecialWarningDodge(451387, nil, nil, nil, 2, 2)
local specWarnObsidianStomp = mod:NewSpecialWarningDodge(456696, nil, nil, nil, 2, 2)
local specWarnShadowlavaBlast = mod:NewSpecialWarningDodge(456711, nil, nil, nil, 2, 2)
local specWarnDarkEruption = mod:NewSpecialWarningDodge(456713, nil, nil, nil, 2, 2)
local specWarnDecapitate = mod:NewSpecialWarningDodge(451067, nil, nil, nil, 2, 2)
local specWarnMindPiercer = mod:NewSpecialWarningDodge(451391, nil, nil, nil, 2, 2)
local specWarnTwilightFlames = mod:NewSpecialWarningMoveAway(451612, nil, nil, nil, 2, 2)
local yellTwilightFlames = mod:NewShortYell(451612)
local yellTwilightFlamesFades = mod:NewShortFadesYell(451612)
local specWarnRecklessTacticDispel = mod:NewSpecialWarningDispel(451379, "RemoveEnrage", nil, nil, 1, 2)
local specWarnEnvelopingShadowflame = mod:NewSpecialWarningDispel(451224, "RemoveCurse", nil, nil, 1, 2)
local specWarnSearMind = mod:NewSpecialWarningInterrupt(76711, "HasInterrupt", nil, nil, 1, 2)
local specWarnGTFO = mod:NewSpecialWarningGTFO(451614, nil, nil, nil, 1, 8)
local timerMassTremorCD = mod:NewCDNPTimer(23, 451871, nil, nil, nil, 2)
local timerObsidianStompCD = mod:NewCDNPTimer(18.2, 451871, nil, nil, nil, 3)
local timerTwilightFlamesCD = mod:NewCDNPTimer(20.6, 451612, nil, nil, nil, 3)
local timerUmbralWindCD = mod:NewCDNPTimer(22.2, 451939, nil, nil, nil, 2)
local timerRecklessTacticCD = mod:NewCDNPTimer(15.4, 451379, nil, nil, nil, 5, nil, DBM_COMMON_L.ENRAGE_ICON)
local timerRiveCD = mod:NewCDNPTimer(17, 451378, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerShadowlavaBlastCD = mod:NewCDNPTimer(19.4, 456711, nil, nil, nil, 3)--Small Sample, could be shorter
local timerDarkEruptionCD = mod:NewCDNPTimer(21.8, 456713, nil, nil, nil, 3)--Small Sample, could be shorter
local timerAscensionCD = mod:NewCDNPTimer(20, 451387, nil, nil, nil, 2)
local timerDecapitateCD = mod:NewCDNPTimer(18.1, 451067, nil, nil, nil, 3)--Small Sample, could be shorter
local timerEnvelopingShadowflameCD = mod:NewCDNPTimer(18.1, 451224, nil, nil, nil, 3, nil, DBM_COMMON_L.CURSE_ICON)--Small Sample, could be shorter
local timerMindPiercerCD = mod:NewCDNPTimer(18.1, 451391, nil, nil, nil, 3)
--local timerSearMindCD = mod:NewCDNPTimer(19.1, 76711, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--Not useful right now since stuns can interrupt (without putting on cooldown)
--local playerName = UnitName("player")
--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:CLTarget(targetname)
if not targetname then return end
if targetname == UnitName("player") then
if self:AntiSpam(4, 5) then
specWarnChainLightning:Show()
specWarnChainLightning:Play("runout")
end
yellChainLightning:Yell()
end
end
--]]
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if not self:IsValidWarning(args.sourceGUID) then return end
if spellId == 451871 then
timerMassTremorCD:Start(nil, args.sourceGUID)
if self:AntiSpam(3, 4) then
specWarnMassTremor:Show()
specWarnMassTremor:Play("aesoon")
end
elseif spellId == 456696 then--Spammed by non combat enemies entire instance, if IsValidWarning above isn't enough, additional filter messages needed
timerObsidianStompCD:Start(nil, args.sourceGUID)
if self:AntiSpam(3, 2) then
specWarnObsidianStomp:Show()
specWarnObsidianStomp:Play("watchstep")
end
elseif spellId == 451612 then
timerTwilightFlamesCD:Start(nil, args.sourceGUID)
elseif spellId == 451939 then
timerUmbralWindCD:Start(nil, args.sourceGUID)
if self:AntiSpam(3, 5) then
specWarnUmbralWind:Show()
specWarnUmbralWind:Play("carefly")
end
elseif spellId == 451379 then
timerRecklessTacticCD:Start(nil, args.sourceGUID)
elseif spellId == 451378 then
timerRiveCD:Start(nil, args.sourceGUID)
if self:AntiSpam(3, 5) then
warnRive:Show()
end
elseif spellId == 76711 then
--timerSearMindCD:Start(nil, args.sourceGUID)
if self.Options.SpecWarn76711interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
specWarnSearMind:Show(args.sourceName)
specWarnSearMind:Play("kickcast")
elseif self:AntiSpam(3, 7) then
warnSearMind:Show()
end
elseif spellId == 456711 then
timerShadowlavaBlastCD:Start(nil, args.sourceGUID)
if self:AntiSpam(3, 2) then
specWarnShadowlavaBlast:Show()
specWarnShadowlavaBlast:Play("shockwave")
end
elseif spellId == 456713 then
timerDarkEruptionCD:Start(nil, args.sourceGUID)
if self:AntiSpam(3, 2) then
specWarnDarkEruption:Show()
specWarnDarkEruption:Play("watchstep")
end
elseif spellId == 451387 then
timerAscensionCD:Start()
if self:AntiSpam(3, 4) then
specWarnAscension:Show()
specWarnAscension:Play("aesoon")
end
elseif spellId == 451067 then
timerDecapitateCD:Start(nil, args.sourceGUID)
if self:AntiSpam(3, 2) then
specWarnDecapitate:Show()
specWarnDecapitate:Play("watchstep")
end
elseif spellId == 451224 then
timerEnvelopingShadowflameCD:Start(nil, args.sourceGUID)
elseif spellId == 451391 then
timerMindPiercerCD:Start(nil, args.sourceGUID)
if self:AntiSpam(3, 2) then
specWarnMindPiercer:Show()
specWarnMindPiercer:Play("watchstep")
end
end
end
--[[
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if not self:IsValidWarning(args.sourceGUID) then return end
if spellId == 384476 then
end
end
--]]
function mod:SPELL_AURA_APPLIED(args)
if not self.Options.Enabled then return end
local spellId = args.spellId
if spellId == 451613 then
if args:IsPlayer() then
specWarnTwilightFlames:Show()
specWarnTwilightFlames:Play("runout")
yellTwilightFlames:Yell()
yellTwilightFlamesFades:Countdown(spellId)
end
elseif spellId == 451614 and args:IsPlayer() and self:AntiSpam(3, 8) then
specWarnGTFO:Show(args.spellName)
specWarnGTFO:Play("watchfeet")
elseif spellId == 451379 and self:AntiSpam(3, 3) then
specWarnRecklessTacticDispel:Show(args.destName)
specWarnRecklessTacticDispel:Play("enrage")
elseif spellId == 451224 and args:IsDestTypePlayer() then
if self:CheckDispelFilter("curse") then
specWarnEnvelopingShadowflame:Show(args.destName)
specWarnEnvelopingShadowflame:Play("helpdispel")
end
end
end
--mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
if not self.Options.Enabled then return end
local spellId = args.spellId
if spellId == 451613 then
if args:IsPlayer() then
yellTwilightFlamesFades:Cancel()
end
end
end
function mod:UNIT_DIED(args)
local cid = self:GetCIDFromGUID(args.destGUID)
if cid == 224219 then--Twilight Earthcaller
timerMassTremorCD:Stop(args.destGUID)
elseif cid == 224152 then--Twilight Brute
timerObsidianStompCD:Stop(args.destGUID)
elseif cid == 224609 then--Twilight Destroyer
timerTwilightFlamesCD:Stop(args.destGUID)
timerUmbralWindCD:Stop(args.destGUID)
elseif cid == 224221 then--Twilight Overseer
timerRecklessTacticCD:Stop(args.destGUID)
timerRiveCD:Stop(args.destGUID)
elseif cid == 224249 then--Twilight LavaBender
timerShadowlavaBlastCD:Stop(args.destGUID)
timerDarkEruptionCD:Stop(args.destGUID)
timerAscensionCD:Stop(args.destGUID)
elseif cid == 224240 then--Twilight Decapitator
timerDecapitateCD:Stop(args.destGUID)
elseif cid == 224271 then--Twilight Warlock
timerEnvelopingShadowflameCD:Stop(args.destGUID)
elseif cid == 39392 then--Faceless Corruptor
timerMindPiercerCD:Stop(args.destGUID)
end
end