local mod = DBM:NewMod("BRHTrash", "DBM-Party-Legion", 1) local L = mod:GetLocalizedStrings() mod:SetRevision("20240127063852") --mod:SetModelID(47785) mod:SetZone(1501) mod.isTrashMod = true mod:RegisterEvents( "SPELL_CAST_START 200261 221634 221688 225573 214003 199663 200105 196916 225732 196883 194966 200248 200256 200291 200784 200913 201139 201176 182118 214001 227913",--199663 "SPELL_CAST_SUCCESS 200343 225962 203163 204896 200784",--8599 "SPELL_AURA_APPLIED 194966 200105 200248 8599 203163", "SPELL_AURA_APPLIED_DOSE 200084 225909 200248", "SPELL_AURA_REMOVED 200248", "UNIT_DIED" ) --[[ (ability.id = 200261 or ability.id = 221634 or ability.id = 221688 or ability.id = 225573 or ability.id = 214003 or ability.id = 199663 or ability.id = 200105 or ability.id = 196916 or ability.id = 225732 or ability.id = 196883 or ability.id = 194966 or ability.id = 200248 or ability.id = 200256 or ability.id = 200291 or ability.id = 200784 or ability.id = 200913 or ability.id = 201139 or ability.id = 201176 or ability.id = 182118 or ability.id = 203163 or ability.id = 214001 or ability.id = 199663) and type = "begincast" or (ability.id = 200343 or ability.id = 225962 or ability.id = 203163 or ability.id = 204896 or ability.id = 8599 or ability.id = 200784) and type = "cast" --]] --TODO, add Etch? http://www.wowhead.com/spell=198959/etch --TODO, can't find spellId for Priceless artifact puddles. when found, add GTFO --TODO, despite what two guides say, fel frenzy doesn't exist in any M+ logs at all --NOTE, trash uses 194966 just like boss, the expression will pick up both local warnSoulEchoes = mod:NewTargetAnnounce(194966, 2) local warnSacrificeSoul = mod:NewTargetNoFilterAnnounce(200105, 2) local warnSicBats = mod:NewTargetNoFilterAnnounce(203163, 2) local warnArrowBarrage = mod:NewSpellAnnounce(200343, 4, nil, "-Healer", 2, nil, nil, 3) local warnKnifeDance = mod:NewSpellAnnounce(200291, 4, nil, "-Healer", 2, nil, nil, 3) local warnDrinkPotion = mod:NewSpellAnnounce(200784, 4, nil, "-Healer", 2, nil, nil, 3) local warnBloodthirstyLeap = mod:NewSpellAnnounce(225962, 2, nil, false)--Instant cast, announcing it already happened doesn't affect much agency to player local warnGlaiveToss = mod:NewCastAnnounce(196916, 3) local warnPhasedExplosion = mod:NewCastAnnounce(200256, 3, nil, nil, false)--They basically spam cast it, so off by default local warnFelFrenzy = mod:NewCastAnnounce(227913, 4)--High prio off internet local warnSoulVenom = mod:NewStackAnnounce(225909, 2) local specWarnSicBats = mod:NewSpecialWarningYou(203163, nil, nil, nil, 1, 2) local specWarnStrikeDown = mod:NewSpecialWarningDefensive(225732, nil, nil, nil, 1, 2) local specWarnCoupdeGrace = mod:NewSpecialWarningDefensive(214003, nil, nil, nil, 1, 2) local specWarnBrutalAssault = mod:NewSpecialWarningDefensive(201139, nil, nil, nil, 1, 2) local specWarnBonebreakingStrike = mod:NewSpecialWarningDodge(200261, nil, nil, nil, 2, 2)--Even tank can side step it, but tank can also aim it away from others local specWarnWhirlOfFlame = mod:NewSpecialWarningDodge(221634, nil, nil, nil, 2, 2) local specWarnIndigestion = mod:NewSpecialWarningDodge(200913, nil, nil, nil, 2, 2) local specWarnThrowArtifact = mod:NewSpecialWarningDodge(201176, nil, nil, nil, 2, 2) local specWarnRavensDive = mod:NewSpecialWarningDodge(214001, nil, nil, nil, 2, 2) local specWarnOverDetonation = mod:NewSpecialWarningRun(221688, nil, nil, nil, 4, 2) local specWarnSoulEchos = mod:NewSpecialWarningMoveAway(194966, nil, nil, nil, 1, 2) local yellArrowBarrage = mod:NewYell(200343) local specWarnSpiritBlast = mod:NewSpecialWarningInterrupt(196883, "HasInterrupt", nil, nil, 1, 2) local specWarnDarkMending = mod:NewSpecialWarningInterrupt(225573, "HasInterrupt", nil, nil, 1, 2) local specWarnSoulBlast = mod:NewSpecialWarningInterrupt(199663, "HasInterrupt", nil, nil, 1, 2) local specWarnArcaneBlitz = mod:NewSpecialWarningInterrupt(200248, "HasInterrupt", nil, nil, 1, 2) local specWarnFelFrenzy = mod:NewSpecialWarningInterrupt(227913, "HasInterrupt", nil, nil, 1, 2)--High Priority local specWarnSoulBlade = mod:NewSpecialWarningDispel(200084, "RemoveMagic", nil, nil, 1, 2) local specWarnDrainLife = mod:NewSpecialWarningDispel(204896, "RemoveMagic", nil, nil, 1, 2) local specWarnEnrage = mod:NewSpecialWarningDispel(8599, "RemoveEnrage", nil, 2, 1, 2) local timerRP = mod:NewRPTimer(68) local timerSacrificeSoulCD = mod:NewCDNPTimer(21.8, 200105, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON) local timerGlaiveTossCD = mod:NewCDNPTimer(14.5, 196916, nil, nil, nil, 3) local timerStrikeDownCD = mod:NewCDNPTimer(9.7, 225732, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON) local timerBonebreakingStrikeCD = mod:NewCDNPTimer(21, 200261, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON) local timerKnifeDanceCD = mod:NewCDNPTimer(18.1, 200291, nil, nil, nil, 2) local timerArrowBarrageCD = mod:NewCDNPTimer(20.6, 200343, nil, nil, nil, 3)--20.7-23 local timerBloodthirstyLeapCD = mod:NewCDNPTimer(14.5, 225962, nil, nil, nil, 3) local timerDrainLifeCD = mod:NewCDNPTimer(16.8, 204896, nil, nil, nil, 3)--16.8-19 local timerBrutalAssaultCD = mod:NewCDNPTimer(20.6, 201139, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON) local timerDrinkPotionCD = mod:NewCDNPTimer(21.8, 200784, nil, nil, nil, 5) local timerSicBatsCD = mod:NewCDNPTimer(21.8, 203163, nil, nil, nil, 5) local timerCoupdeGraceCD = mod:NewCDNPTimer(8.4, 214003, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON) local timerRavensDiveCD = mod:NewCDNPTimer(16, 214001, nil, nil, nil, 3) --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 local blitzStacks = {} --"<2.04 23:10:40> [BOSS_KILL] 1832#Amalgam of Souls", -- [27] --"<2.07 23:10:40> [CLEU] UNIT_DIED##nil#Creature-0-4225-1501-17971-98542-00007A7FD4#Amalgam of Souls#-1#false#nil#nil", -- [28] --"<10.62 23:10:49> [CHAT_MSG_MONSTER_SAY] The darkness... it is gone.#Lady Velandras Ravencrest###Omegal##0#0##0#2108#nil#0#false#false#false#false", -- [37] --"<15.93 23:10:54> [CHAT_MSG_MONSTER_YELL] You... aren't the ones who did this?#Lord Etheldrin Ravencrest###Omegal##0#0##0#2109#nil#0#false#false#false#false", -- [38] --"<29.29 23:11:07> [CHAT_MSG_MONSTER_SAY] I... understand now. You... you must find Kur'talos. You must put a stop to this.#Lord Etheldrin Ravencrest###Darksøl##0#0##0#2110#nil#0#false#false#false#false", -- [39] --"<39.20 23:11:17> [ZONE_CHANGED_INDOORS] Black Rook Hold#Black Rook Hold#Hidden Passageway", -- [41] function mod:StartFirstRP() timerRP:Start(35)--Adjusted based on twitch streams end function mod:SPELL_CAST_START(args) if not self.Options.Enabled then return end if not self:IsValidWarning(args.sourceGUID) then return end local spellId = args.spellId if spellId == 200261 then timerBonebreakingStrikeCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 2) then specWarnBonebreakingStrike:Show() specWarnBonebreakingStrike:Play("shockwave") end elseif spellId == 200913 and self:AntiSpam(3, 2) then specWarnIndigestion:Show() specWarnIndigestion:Play("shockwave") elseif spellId == 201176 and self:AntiSpam(3, 2) then specWarnThrowArtifact:Show() specWarnThrowArtifact:Play("watchstep") elseif spellId == 221634 then if self:AntiSpam(3, 2) then specWarnWhirlOfFlame:Show() specWarnWhirlOfFlame:Play("watchstep") end elseif spellId == 214001 then timerRavensDiveCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 2) then specWarnRavensDive:Show() specWarnRavensDive:Play("watchstep") end elseif spellId == 221688 then if self:AntiSpam(3, 1) then specWarnOverDetonation:Show() specWarnOverDetonation:Play("justrun") end elseif spellId == 225573 then if self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnDarkMending:Show(args.sourceName) specWarnDarkMending:Play("kickcast") end elseif spellId == 182118 or spellId == 227913 then if self.Options.SpecWarn227913interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnFelFrenzy:Show(args.sourceName) specWarnFelFrenzy:Play("kickcast") elseif self:AntiSpam(3, 7) then warnFelFrenzy:Show() end elseif spellId == 199663 then if self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnSoulBlast:Show(args.sourceName) specWarnSoulBlast:Play("kickcast") end elseif spellId == 196883 then if self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnSpiritBlast:Show(args.sourceName) specWarnSpiritBlast:Play("kickcast") end elseif spellId == 200248 then --Excessively throttle it cause ability is literally spammed so we check stacks, we check interrupt CD, and we even 3 second throttle it if blitzStacks[args.destGUID] and blitzStacks[args.destGUID] >= 5 and self:CheckInterruptFilter(args.sourceGUID, false, true) and self:AntiSpam(3, 5) then specWarnArcaneBlitz:Show(args.sourceName) specWarnArcaneBlitz:Play("kickcast") end elseif spellId == 214003 then timerCoupdeGraceCD:Start(nil, args.sourceGUID) if self:IsTanking("player", nil, nil, true, args.sourceGUID) and self:AntiSpam(3, 5) then specWarnCoupdeGrace:Show() specWarnCoupdeGrace:Play("defensive") end elseif spellId == 225732 then timerStrikeDownCD:Start(nil, args.sourceGUID) if self:IsTanking("player", nil, nil, true, args.sourceGUID) and self:AntiSpam(3, 5) then specWarnStrikeDown:Show() specWarnStrikeDown:Play("defensive") end elseif spellId == 200105 then timerSacrificeSoulCD:Start(nil, args.sourceGUID) elseif spellId == 196916 then timerGlaiveTossCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 6) then warnGlaiveToss:Show() end elseif spellId == 194966 then --Soul Echoes Timer elseif spellId == 200256 then warnPhasedExplosion:Show() elseif spellId == 200291 then timerKnifeDanceCD:Start(nil, args.sourceGUID) if self:AntiSpam(5, 6) then warnKnifeDance:Show() warnKnifeDance:Play("crowdcontrol") end elseif spellId == 200784 then --Starts 4.8 second recast timer on cast start --ie it'll recast after 4.8 seconds if this cast is stopped --But if it finishes casting, goes on ?? second CD timerDrinkPotionCD:Start(4.8, args.sourceGUID) if self:AntiSpam(3.5, 6) then warnDrinkPotion:Show() warnDrinkPotion:Play("crowdcontrol") end elseif spellId == 201139 then timerBrutalAssaultCD:Start(nil, args.sourceGUID) if self:IsTanking("player", nil, nil, true, args.sourceGUID) and self:AntiSpam(3, 5) then specWarnBrutalAssault:Show() specWarnBrutalAssault:Play("defensive") end end end function mod:SPELL_CAST_SUCCESS(args) if not self.Options.Enabled then return end local spellId = args.spellId if spellId == 200343 then timerArrowBarrageCD:Start(nil, args.sourceGUID) if self:AntiSpam(5, 6) then warnArrowBarrage:Show() warnArrowBarrage:Play("crowdcontrol") end if args:IsPlayer() and self:AntiSpam(3, 6) then yellArrowBarrage:Yell() end elseif spellId == 225962 then--225962 first leap, 225963 second leap (which we don't care about for announce/timer purposes) timerBloodthirstyLeapCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 6) then warnBloodthirstyLeap:Show() end elseif spellId == 203163 then --Does not go on CD until it's cast. if it's stunned, it's recast within a 3-5 sec cast window timerSicBatsCD:Start(16, args.sourceGUID) elseif spellId == 204896 then timerDrainLifeCD:Start(nil, args.sourceGUID) if self:CheckDispelFilter("magic") and self:AntiSpam(3, 3) then specWarnDrainLife:Show(args.destName) specWarnDrainLife:Play("helpdispel") end elseif spellId == 200784 then --Starts 4.8 second recast timer on cast start --ie it'll recast after 4.8 seconds if this cast is stopped --But if it finishes casting, goes on ?? second CD timerDrinkPotionCD:Stop(args.sourceGUID) --TODO, when it's recast is it actually goes on cooldown end end function mod:SPELL_AURA_APPLIED(args) if not self.Options.Enabled then return end local spellId = args.spellId if spellId == 194966 then if args:IsPlayer() then specWarnSoulEchos:Show() specWarnSoulEchos:Play("runout") specWarnSoulEchos:ScheduleVoice(1, "keepmove") else warnSoulEchoes:Show(args.destName) end elseif spellId == 200084 and args:IsDestTypePlayer() then local amount = args.amount or 1 if amount % 2 == 0 and self:CheckDispelFilter("magic") and self:AntiSpam(3, 3) then specWarnSoulBlade:Show(args.destName) specWarnSoulBlade:Play("helpdispel") end elseif spellId == 225909 and args:IsDestTypePlayer() then local amount = args.amount or 1 if (amount % 10 == 0) and (self:CheckDispelFilter("magic") or args:IsPlayer()) and self:AntiSpam(3, 3) then warnSoulVenom:Show(args.destName, amount) end elseif spellId == 200105 then warnSacrificeSoul:Show(args.sourceName)--Source name used, we want to kill the actor not the target (sometimes one in same though) elseif spellId == 200248 then blitzStacks[args.destGUID] = args.amount or 1 elseif spellId == 8599 and self:AntiSpam(4, 3) then specWarnEnrage:Show(args.destName) specWarnEnrage:Play("enrage") elseif spellId == 203163 then if args:IsPlayer() then specWarnSicBats:Show() specWarnSicBats:Play("targetyou") else warnSicBats:Show(args.destName) 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 == 200248 then blitzStacks[args.destGUID] = nil end end function mod:UNIT_DIED(args) local cid = self:GetCIDFromGUID(args.destGUID) if cid == 98368 then--ghostly-protector timerSacrificeSoulCD:Stop(args.destGUID) -- elseif cid == 98370 then--ghostly-councilor --Soul Blast elseif cid == 98538 then--lady-velandras-ravencrest#drops;mode:normal timerGlaiveTossCD:Stop(args.destGUID) timerStrikeDownCD:Stop(args.destGUID) -- elseif cid == 98521 then--lord-etheldrin-ravencrest --Spirit Blast --Soul Echoes elseif cid == 98275 then--risen-archer timerArrowBarrageCD:Stop(args.destGUID) elseif cid == 98280 then--risen-arcanist blitzStacks[args.destGUID] = nil elseif cid == 98691 then--risen-scout timerKnifeDanceCD:Stop(args.destGUID) elseif cid == 98243 or cid == 98706 then--soul-torn-champion / commander-shemdahsohn timerBonebreakingStrikeCD:Stop(args.destGUID) elseif cid == 101839 then--risen-companion timerBloodthirstyLeapCD:Stop(args.destGUID) elseif cid == 98810 then--wrathguard-bladelord timerBrutalAssaultCD:Stop(args.destGUID) elseif cid == 98792 then--wyrmtongue-scavenger timerDrinkPotionCD:Stop() elseif cid == 102788 then--felspite-dominator --Fel Frenzy timerSicBatsCD:Stop(args.destGUID) elseif cid == 102094 then--risen-swordsman timerCoupdeGraceCD:Stop(args.destGUID) elseif cid == 102095 then--risen-lancer timerRavensDiveCD:Stop(args.destGUID) elseif cid == 98813 then--Bloodscent Felhouhd timerDrainLifeCD:Stop(args.destGUID) end end