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