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.
279 lines
14 KiB
279 lines
14 KiB
local mod = DBM:NewMod("UnderrotTrash", "DBM-Party-BfA", 8)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20240412075414")
|
|
--mod:SetModelID(47785)
|
|
|
|
mod.isTrashMod = true
|
|
|
|
|
|
mod:RegisterEvents(
|
|
"SPELL_CAST_START 272609 266106 265019 265089 265091 265433 265540 272183 278961 278755 265487 272592 265081 272180 266209 413044",
|
|
"SPELL_CAST_SUCCESS 265523 265016 266201 266265 265668",
|
|
"SPELL_AURA_APPLIED 265568 266107 266209 265091 278789 278961 266201",
|
|
"UNIT_DIED"
|
|
)
|
|
|
|
--TODO, verify dark omen can actually be stunned/CCed
|
|
--TODO, maybe alert if multiple https://www.wowhead.com/spell=265376/barbed-spear target you at once
|
|
--TODO, gift of ghuun and reconstruction timers. they are pretty long and rarely see double cast from a single mob
|
|
--[[
|
|
(ability.id = 413044 or ability.id = 272609 or ability.id = 266106 or ability.id = 265019 or ability.id = 265089 or ability.id = 265091 or ability.id = 265433 or ability.id = 265540 or ability.id = 272183 or ability.id = 278961 or ability.id = 265523 or ability.id = 278755 or ability.id = 265568 or ability.id = 265487 or ability.id = 272592 or ability.id = 265081 or ability.id = 272180 or ability.id = 266209 or ability.id = 265016) and type = "begincast"
|
|
or (ability.id = 265668 or ability.id = 266107 or ability.id = 266201 or ability.id = 266265) and type = "cast"
|
|
--]]
|
|
local warnBloodHarvest = mod:NewTargetNoFilterAnnounce(265016, 3)
|
|
local warnGiftOfGhuun = mod:NewCastAnnounce(265091, 3)
|
|
local warnDarkReconstitution = mod:NewCastAnnounce(265089, 3)
|
|
local warnSonicSreech = mod:NewCastAnnounce(266106, 3)
|
|
local warnRaiseDead = mod:NewCastAnnounce(272183, 3)--No longer exists in M+ but maybe still exists in timewalking/leveling version?
|
|
local warnShadowBoltVolley = mod:NewCastAnnounce(265487, 3)
|
|
local warnWitheringCurse = mod:NewCastAnnounce(265433, 3)
|
|
local warnWarcry = mod:NewCastAnnounce(265081, 4)
|
|
local warnHarrowingDespair = mod:NewCastAnnounce(278755, 3)
|
|
local warnWickedFrenzy = mod:NewCastAnnounce(266209, 3)
|
|
local warnVoidSpit = mod:NewCastAnnounce(272180, 2, nil, nil, false)--AKA Dark Bolt prior to 10.1
|
|
local warnDarkEchoes = mod:NewCastAnnounce(413044, 4)
|
|
|
|
local specWarnMaddeningGaze = mod:NewSpecialWarningDodge(272609, nil, nil, 2, 3, 2)
|
|
local yellBloodHarvest = mod:NewShortYell(265016)--Pre Savage Cleave target awareness
|
|
local specWarnSavageCleave = mod:NewSpecialWarningDodge(265019, nil, nil, nil, 2, 2)
|
|
local specWarnRottenBile = mod:NewSpecialWarningDodge(265540, nil, nil, nil, 2, 2)
|
|
local specWarnAbyssalReach = mod:NewSpecialWarningDodge(272592, nil, nil, nil, 2, 2)
|
|
local specWarnDarkOmen = mod:NewSpecialWarningMoveAway(265568, nil, nil, nil, 1, 2)
|
|
local yellDarkOmen = mod:NewShortYell(265568)
|
|
local specWarnThirstforBlood = mod:NewSpecialWarningRun(266107, nil, nil, nil, 4, 2)
|
|
local specWarnSonicScreech = mod:NewSpecialWarningInterrupt(266106, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnDarkReconstituion = mod:NewSpecialWarningInterrupt(265089, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnGiftofGhuun = mod:NewSpecialWarningInterrupt(265091, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnShadowBoltVolley = mod:NewSpecialWarningInterrupt(265487, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnWitheringCurse = mod:NewSpecialWarningInterrupt(265433, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnRaiseDead = mod:NewSpecialWarningInterrupt(272183, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnDecayingMind = mod:NewSpecialWarningInterrupt(278961, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnHarrowingDespair = mod:NewSpecialWarningInterrupt(278755, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnVoidSpit = mod:NewSpecialWarningInterrupt(272180, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnDarkEchoes = mod:NewSpecialWarningInterrupt(413044, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnWickedFrenzy = mod:NewSpecialWarningInterrupt(266209, "HasInterrupt", nil, nil, 1, 2)
|
|
local specWarnWickedFrenzyDispel = mod:NewSpecialWarningDispel(266209, "RemoveEnrage", nil, nil, 1, 2)
|
|
local specWarnDecayingMindDispel = mod:NewSpecialWarningDispel(278961, "RemoveDisease", nil, nil, 1, 2)
|
|
local specWarnGiftofGhuunDispel = mod:NewSpecialWarningDispel(265091, "MagicDispeller", nil, nil, 1, 2)
|
|
local specWarnBoneShieldDispel = mod:NewSpecialWarningDispel(266201, "MagicDispeller", nil, nil, 1, 2)--Unlike BFA version, 10.1 version now instant cast, no interrupt just dispel
|
|
local specWarnSpiritDrainTotemOut = mod:NewSpecialWarningDodge(265523, nil, nil, nil, 2, 2)
|
|
local specWarnGTFO = mod:NewSpecialWarningGTFO(278789, nil, nil, nil, 1, 8)
|
|
|
|
local timerBloodHarvestCD = mod:NewCDNPTimer(12.1, 265016, nil, nil, nil, 3)
|
|
local timerRottenBileCD = mod:NewCDNPTimer(10.7, 265540, nil, nil, nil, 3)
|
|
local timerWaveofDecayCD = mod:NewCDNPTimer(10.7, 265668, nil, false, nil, 3)--Off by default to reduce clutter, but optional for those that want it
|
|
local timerWarcryCD = mod:NewCDNPTimer(25.2, 265081, nil, nil, nil, 2)
|
|
local timerDecayingMindCD = mod:NewCDNPTimer(27.7, 278961, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
|
|
local timerSonicScreechCD = mod:NewCDNPTimer(25.4, 266106, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
|
|
--local timerVoidSpitCD = mod:NewCDNPTimer(9.7, 272180, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
|
|
local timerDarkEchoesCD = mod:NewCDNPTimer(18.2, 413044, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
|
|
local timerBoneShieldCD = mod:NewCDNPTimer(25.4, 266201, nil, nil, nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)
|
|
local timerWickedEmbraceCD = mod:NewCDNPTimer(8.5, 266265, nil, "RemoveMagic", nil, 5, nil, DBM_COMMON_L.MAGIC_ICON)
|
|
local timerWickedFrenzyCD = mod:NewCDNPTimer(25.4, 266209, nil, nil, nil, 5, nil, DBM_COMMON_L.ENRAGE_ICON)
|
|
local timerWitheringCurseCD = mod:NewCDNPTimer(25.4, 272180, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
|
|
local timerShadowBoltVolleyCD = mod:NewCDNPTimer(25.4, 265487, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--25.4-27.7
|
|
local timerAbyssalReachCD = mod:NewCDNPTimer(16.1, 272592, nil, nil, nil, 3)
|
|
local timerMaddeningGazeCD = mod:NewCDNPTimer(15.7, 272609, nil, nil, nil, 3, nil, DBM_COMMON_L.HEALER_ICON, nil, mod:IsTank() and 2 or nil, 3)--15.7-17
|
|
|
|
function mod:OnInitialize()
|
|
if self.Options.Timer272609cdCVoice == true then
|
|
self.Options.Timer272609cdCVoice = self:IsTank() and 2
|
|
end
|
|
end
|
|
|
|
--Antispam IDs for this mod: 1 run away, 2 dodge, 3 dispel, 4 incoming damage, 5 you/role, 6 misc, 7 off interrupt
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
if not self.Options.Enabled then return end
|
|
local spellId = args.spellId
|
|
if spellId == 272609 then
|
|
timerMaddeningGazeCD:Start(nil, args.sourceGUID)
|
|
if self:AntiSpam(3, 2) then
|
|
specWarnMaddeningGaze:Show()
|
|
specWarnMaddeningGaze:Play("shockwave")
|
|
end
|
|
elseif spellId == 265019 and self:AntiSpam(3, 2) then
|
|
specWarnSavageCleave:Show()
|
|
specWarnSavageCleave:Play("shockwave")
|
|
elseif spellId == 265540 then
|
|
timerRottenBileCD:Start(nil, args.sourceGUID)
|
|
if self:AntiSpam(3, 2) then
|
|
specWarnRottenBile:Show()
|
|
specWarnRottenBile:Play("shockwave")
|
|
end
|
|
elseif spellId == 266106 then
|
|
timerSonicScreechCD:Start(nil, args.sourceGUID)
|
|
if self.Options.SpecWarn266106interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnSonicScreech:Show(args.sourceName)
|
|
specWarnSonicScreech:Play("kickcast")
|
|
elseif self:AntiSpam(2, 7) then
|
|
warnSonicSreech:Show()
|
|
end
|
|
elseif spellId == 265089 then
|
|
if self.Options.SpecWarn265089interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnDarkReconstituion:Show(args.sourceName)
|
|
specWarnDarkReconstituion:Play("kickcast")
|
|
elseif self:AntiSpam(2, 7) then
|
|
warnDarkReconstitution:Show()
|
|
end
|
|
elseif spellId == 265091 then
|
|
if self.Options.SpecWarn265091interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnGiftofGhuun:Show(args.sourceName)
|
|
specWarnGiftofGhuun:Play("kickcast")
|
|
elseif self:AntiSpam(2, 7) then
|
|
warnGiftOfGhuun:Show()
|
|
end
|
|
elseif spellId == 265433 then
|
|
timerWitheringCurseCD:Start(nil, args.sourceGUID)
|
|
if self.Options.SpecWarn265433interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnWitheringCurse:Show(args.sourceName)
|
|
specWarnWitheringCurse:Play("kickcast")
|
|
elseif self:AntiSpam(2, 7) then
|
|
warnWitheringCurse:Show()
|
|
end
|
|
elseif spellId == 272183 then
|
|
if self.Options.SpecWarn272183interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnRaiseDead:Show(args.sourceName)
|
|
specWarnRaiseDead:Play("kickcast")
|
|
elseif self:AntiSpam(2, 5) then
|
|
warnRaiseDead:Show()
|
|
end
|
|
elseif spellId == 278961 then
|
|
timerDecayingMindCD:Start(nil, args.sourceGUID)
|
|
if self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnDecayingMind:Show(args.sourceName)
|
|
specWarnDecayingMind:Play("kickcast")
|
|
end
|
|
elseif spellId == 278755 then
|
|
if self.Options.SpecWarn278755interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnHarrowingDespair:Show(args.sourceName)
|
|
specWarnHarrowingDespair:Play("kickcast")
|
|
elseif self:AntiSpam(2, 7) then
|
|
warnHarrowingDespair:Show()
|
|
end
|
|
elseif spellId == 272180 then
|
|
-- timerVoidSpitCD:Start(nil, args.sourceGUID)
|
|
if self.Options.SpecWarn272180interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnVoidSpit:Show(args.sourceName)
|
|
specWarnVoidSpit:Play("kickcast")
|
|
elseif self:AntiSpam(2, 7) then
|
|
warnVoidSpit:Show()
|
|
end
|
|
elseif spellId == 265487 then
|
|
timerShadowBoltVolleyCD:Start(nil, args.sourceGUID)
|
|
if self.Options.SpecWarn265487interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnShadowBoltVolley:Show(args.sourceName)
|
|
specWarnShadowBoltVolley:Play("kickcast")
|
|
elseif self:AntiSpam(2, 7) then
|
|
warnShadowBoltVolley:Show()
|
|
end
|
|
elseif spellId == 272592 then
|
|
timerAbyssalReachCD:Start(nil, args.sourceGUID)
|
|
if self:AntiSpam(3, 2) then
|
|
specWarnAbyssalReach:Show()
|
|
specWarnAbyssalReach:Play("watchstep")
|
|
end
|
|
elseif spellId == 265081 then
|
|
timerWarcryCD:Start(nil, args.sourceGUID)
|
|
if self:AntiSpam(3, 5) then
|
|
warnWarcry:Show()
|
|
end
|
|
elseif spellId == 266209 then
|
|
timerWickedFrenzyCD:Start(nil, args.sourceGUID)
|
|
if self.Options.SpecWarn266209interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnWickedFrenzy:Show(args.sourceName)
|
|
specWarnWickedFrenzy:Play("kickcast")
|
|
elseif self:AntiSpam(2, 7) then
|
|
warnWickedFrenzy:Show()
|
|
end
|
|
elseif spellId == 413044 then
|
|
timerDarkEchoesCD:Start(nil, args.sourceGUID)
|
|
if self.Options.SpecWarn413044interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnDarkEchoes:Show(args.sourceName)
|
|
specWarnDarkEchoes:Play("kickcast")
|
|
elseif self:AntiSpam(2, 7) then
|
|
warnDarkEchoes:Show()
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
if not self.Options.Enabled then return end
|
|
local spellId = args.spellId
|
|
if spellId == 265523 and self:AntiSpam(3, 2) then
|
|
specWarnSpiritDrainTotemOut:Show()
|
|
specWarnSpiritDrainTotemOut:Play("watchstep")
|
|
elseif spellId == 265016 then
|
|
timerBloodHarvestCD:Start(nil, args.sourceGUID)
|
|
if args:IsPlayer() then
|
|
yellBloodHarvest:Yell()
|
|
else
|
|
warnBloodHarvest:Show(args.destName)
|
|
end
|
|
elseif spellId == 266201 then
|
|
timerBoneShieldCD:Start(nil, args.sourceGUID)
|
|
elseif spellId == 266265 then
|
|
timerWickedEmbraceCD:Start(nil, args.sourceGUID)
|
|
elseif spellId == 265668 then
|
|
timerWaveofDecayCD:Start(nil, args.sourceGUID)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
if not self.Options.Enabled then return end
|
|
local spellId = args.spellId
|
|
if spellId == 265568 and args:IsPlayer() and not DBM:UnitDebuff("player", spellId) then
|
|
specWarnDarkOmen:Show()
|
|
specWarnDarkOmen:Play("range5")
|
|
yellDarkOmen:Yell()
|
|
elseif spellId == 266107 and args:IsPlayer() and self:AntiSpam(3, 1) then
|
|
specWarnThirstforBlood:Show()
|
|
specWarnThirstforBlood:Play("justrun")
|
|
elseif spellId == 266209 and self:AntiSpam(3, 5) then
|
|
specWarnWickedFrenzyDispel:Show(args.destName)
|
|
specWarnWickedFrenzyDispel:Play("enrage")
|
|
elseif spellId == 265091 and not args:IsDestTypePlayer() and self:AntiSpam(4, 3) then
|
|
specWarnGiftofGhuunDispel:Show(args.destName)
|
|
specWarnGiftofGhuunDispel:Play("helpdispel")
|
|
elseif spellId == 266201 and not args:IsDestTypePlayer() and self:AntiSpam(4, 3) then
|
|
specWarnBoneShieldDispel:Show(args.destName)
|
|
specWarnBoneShieldDispel:Play("helpdispel")
|
|
elseif spellId == 278789 and args:IsPlayer() and self:AntiSpam(3, 8) then
|
|
specWarnGTFO:Show(args.spellName)
|
|
specWarnGTFO:Play("watchfeet")
|
|
elseif spellId == 278961 and args:IsDestTypePlayer() and self:CheckDispelFilter("disease") and self:AntiSpam(3, 3) then
|
|
specWarnDecayingMindDispel:Show(args.destName)
|
|
specWarnDecayingMindDispel:Play("helpdispel")
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 131436 then--Chosen Blood Matron
|
|
timerBloodHarvestCD:Stop(args.destGUID)
|
|
timerWarcryCD:Stop(args.destGUID)
|
|
elseif cid == 130909 then--Fetid Maggot
|
|
timerRottenBileCD:Stop(args.destGUID)
|
|
elseif cid == 133870 then--Diseased Lasher
|
|
timerDecayingMindCD:Stop(args.destGUID)
|
|
elseif cid == 133835 then--Feral Bloodswarmer
|
|
timerSonicScreechCD:Stop(args.destGUID)
|
|
elseif cid == 138187 then--Grotesque Horror
|
|
-- timerVoidSpitCD:Stop(args.destGUID)
|
|
timerDarkEchoesCD:Stop(args.destGUID)
|
|
elseif cid == 134284 then--Fallen Deathspeaker
|
|
timerWickedFrenzyCD:Stop(args.destGUID)
|
|
timerWickedEmbraceCD:Stop(args.destGUID)
|
|
elseif cid == 133912 then--Broodsworn Defiler
|
|
timerWitheringCurseCD:Stop(args.destGUID)
|
|
timerShadowBoltVolleyCD:Stop(args.destGUID)
|
|
elseif cid == 138281 then--Faceless Corruptor
|
|
timerAbyssalReachCD:Stop(args.destGUID)
|
|
timerMaddeningGazeCD:Stop(args.destGUID)
|
|
elseif cid == 133836 then--Reanimated Guardian
|
|
timerBoneShieldCD:Stop(args.destGUID)
|
|
elseif cid == 133852 then--Living Rot
|
|
timerWaveofDecayCD:Start(args.destGUID)
|
|
end
|
|
end
|
|
|