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.
186 lines
8.0 KiB
186 lines
8.0 KiB
|
3 years ago
|
local mod = DBM:NewMod("NecroticWakeTrash", "DBM-Party-Shadowlands", 1)
|
||
|
|
local L = mod:GetLocalizedStrings()
|
||
|
|
|
||
|
|
mod:SetRevision("20220920232426")
|
||
|
|
--mod:SetModelID(47785)
|
||
|
|
|
||
|
|
mod.isTrashMod = true
|
||
|
|
|
||
|
|
mod:RegisterEvents(
|
||
|
|
"SPELL_CAST_START 324293 327240 327399 334748 320462 338353 323496 333477 333479 338606",
|
||
|
|
"SPELL_AURA_APPLIED 327401 323347 335141 324372 338353 338357 338606 327396",
|
||
|
|
"SPELL_AURA_APPLIED_DOSE 338357",
|
||
|
|
"SPELL_AURA_REMOVED 338606 327396"
|
||
|
|
)
|
||
|
|
|
||
|
|
--TODO targetscan shared agony during cast and get at least one of targets early? for fade/invis and feign death?
|
||
|
|
--TODO, actually, does shared agony even still exist? it's not in any recent logs
|
||
|
|
--https://www.wowhead.com/guides/necrotic-wake-shadowlands-dungeon-strategy-guide
|
||
|
|
--Notable Blightbone Trash
|
||
|
|
local warnClingingDarkness = mod:NewTargetNoFilterAnnounce(323347, 3, nil, "Healer|RemoveMagic")
|
||
|
|
--Notable Amarth Trash
|
||
|
|
local warnSharedAgony = mod:NewCastAnnounce(327401, 3)
|
||
|
|
local warnSharedAgonyTargets = mod:NewTargetAnnounce(327401, 4)
|
||
|
|
local warnTenderize = mod:NewStackAnnounce(338357, 2, nil, "Tank|Healer")
|
||
|
|
local warnThrowCleaver = mod:NewCastAnnounce(323496, 2)
|
||
|
|
--Unknown
|
||
|
|
local warnSpewDisease = mod:NewTargetNoFilterAnnounce(333479, 2)
|
||
|
|
local warnMorbidFixation = mod:NewTargetNoFilterAnnounce(338606, 2)
|
||
|
|
local warnGrimFate = mod:NewTargetAnnounce(327396, 2)
|
||
|
|
|
||
|
|
--General
|
||
|
|
--local specWarnGTFO = mod:NewSpecialWarningGTFO(257274, nil, nil, nil, 1, 8)
|
||
|
|
--Notable Blightbone Trash
|
||
|
|
local specWarnClingingDarkness = mod:NewSpecialWarningDispel(323347, false, nil, nil, 1, 2)--Opt it for now, since dispel timing is less black and white
|
||
|
|
local specWarnDrainFluids = mod:NewSpecialWarningInterrupt(334748, false, nil, 2, 1, 2)--Based on feedback. it's too spammy to be on by default
|
||
|
|
--Notable Amarth Trash
|
||
|
|
local specWarnNecroticBolt = mod:NewSpecialWarningInterrupt(320462, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnRaspingScream = mod:NewSpecialWarningInterrupt(324293, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnSharedAgony = mod:NewSpecialWarningMoveAway(327401, nil, nil, nil, 1, 11)
|
||
|
|
local yellSharedAgony = mod:NewYell(327401)
|
||
|
|
local specWarnDarkShroud = mod:NewSpecialWarningDispel(335141, "MagicDispeller", nil, nil, 1, 2)
|
||
|
|
local specWarnReapingWinds = mod:NewSpecialWarningRun(324372, nil, nil, nil, 4, 2)
|
||
|
|
local yellThrowCleaver = mod:NewYell(323496)
|
||
|
|
--Notable Surgeon Stitchflesh Trash
|
||
|
|
local specWarnGoresplatter = mod:NewSpecialWarningInterrupt(338353, false, nil, nil, 1, 2)--Off by default since enemy has two casts and this is lower priority one
|
||
|
|
local specWarnGoresplatterDispel = mod:NewSpecialWarningDispel(338353, "RemoveDisease", nil, nil, 1, 2)
|
||
|
|
--Unknown
|
||
|
|
local specWarnSpineCrush = mod:NewSpecialWarningDodge(327240, nil, nil, nil, 2, 2)--Not sure where these spawn, not in guide, but I still feel warning worth having
|
||
|
|
local specWarnGutSlice = mod:NewSpecialWarningDodge(333477, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnSpewDisease = mod:NewSpecialWarningYou(333479, nil, nil, nil, 1, 2)
|
||
|
|
local yellSpewDisease = mod:NewYell(333479)
|
||
|
|
local specWarnMorbidFixation = mod:NewSpecialWarningRun(338606, nil, nil, nil, 4, 2)
|
||
|
|
local timerMorbidFixation = mod:NewTargetTimer(8, 338606, nil, nil, nil, 2)
|
||
|
|
local specWarnGrimFate = mod:NewSpecialWarningMoveAway(327396, nil, nil, nil, 1, 2)
|
||
|
|
local yellGrimFate = mod:NewYell(327396)
|
||
|
|
local yellGrimFateFades = mod:NewShortFadesYell(327396)
|
||
|
|
|
||
|
|
--Antispam IDs for this mod: 1 run away, 2 dodge, 3 dispel, 4 incoming damage, 5 you/role, 6 misc
|
||
|
|
|
||
|
|
function mod:ThrowCleaver(targetname, uId)
|
||
|
|
if not targetname then return end
|
||
|
|
-- warnRicochetingThrow:Show(targetname)
|
||
|
|
if targetname == UnitName("player") then
|
||
|
|
yellThrowCleaver:Yell()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:FixateTarget(targetname, uId)
|
||
|
|
if not targetname then return end
|
||
|
|
if targetname == UnitName("player") then
|
||
|
|
if self:AntiSpam(4, 1) then
|
||
|
|
specWarnMorbidFixation:Show()
|
||
|
|
specWarnMorbidFixation:Play("justrun")
|
||
|
|
end
|
||
|
|
else
|
||
|
|
warnMorbidFixation:Show(targetname)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SpewTarget(targetname, uId)
|
||
|
|
if not targetname then return end
|
||
|
|
if self:AntiSpam(3, targetname) then
|
||
|
|
if targetname == UnitName("player") then
|
||
|
|
specWarnSpewDisease:Show()
|
||
|
|
specWarnSpewDisease:Play("targetyou")
|
||
|
|
yellSpewDisease:Yell()
|
||
|
|
else
|
||
|
|
warnSpewDisease:Show(targetname)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_CAST_START(args)
|
||
|
|
if not self.Options.Enabled then return end
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 324293 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnRaspingScream:Show(args.sourceName)
|
||
|
|
specWarnRaspingScream:Play("kickcast")
|
||
|
|
elseif spellId == 334748 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnDrainFluids:Show(args.sourceName)
|
||
|
|
specWarnDrainFluids:Play("kickcast")
|
||
|
|
elseif spellId == 320462 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnNecroticBolt:Show(args.sourceName)
|
||
|
|
specWarnNecroticBolt:Play("kickcast")
|
||
|
|
elseif spellId == 338353 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnGoresplatter:Show(args.sourceName)
|
||
|
|
specWarnGoresplatter:Play("kickcast")
|
||
|
|
elseif spellId == 327240 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnSpineCrush:Show()
|
||
|
|
specWarnSpineCrush:Play("watchstep")
|
||
|
|
elseif spellId == 333477 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnGutSlice:Show()
|
||
|
|
specWarnGutSlice:Play("shockwave")
|
||
|
|
elseif spellId == 327399 and self:AntiSpam(3, 6) then
|
||
|
|
warnSharedAgony:Show()
|
||
|
|
elseif spellId == 323496 and self:AntiSpam(3, 6) then
|
||
|
|
warnThrowCleaver:Show()
|
||
|
|
self:ScheduleMethod(0.25, "BossTargetScanner", args.sourceGUID, "ThrowCleaver", 0.25, 12)
|
||
|
|
elseif spellId == 333479 then
|
||
|
|
self:ScheduleMethod(0.1, "BossTargetScanner", args.sourceGUID, "SpewTarget", 0.1, 6)
|
||
|
|
elseif spellId == 338606 then
|
||
|
|
self:ScheduleMethod(0.1, "BossTargetScanner", args.sourceGUID, "FixateTarget", 0.1, 6)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_AURA_APPLIED(args)
|
||
|
|
if not self.Options.Enabled then return end
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 327401 then
|
||
|
|
warnSharedAgonyTargets:CombinedShow(0.5, args.destName)
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnSharedAgony:Show()
|
||
|
|
specWarnSharedAgony:Play("lineapart")
|
||
|
|
yellSharedAgony:Yell()
|
||
|
|
end
|
||
|
|
elseif spellId == 323347 and args:IsDestTypePlayer() and self:AntiSpam(3, 5) then
|
||
|
|
if self.Options.SpecWarn323347dispel and self:CheckDispelFilter("magic") then
|
||
|
|
specWarnClingingDarkness:Show(args.destName)
|
||
|
|
specWarnClingingDarkness:Play("helpdispel")
|
||
|
|
else
|
||
|
|
warnClingingDarkness:Show(args.destName)
|
||
|
|
end
|
||
|
|
elseif spellId == 335141 and args:IsDestTypeHostile() then--Not filtered with self:AntiSpam(3, 5) for now
|
||
|
|
specWarnDarkShroud:Show(args.destName)
|
||
|
|
specWarnDarkShroud:Play("dispelboss")
|
||
|
|
elseif spellId == 324372 then
|
||
|
|
specWarnReapingWinds:Show()
|
||
|
|
specWarnReapingWinds:Play("justrun")
|
||
|
|
elseif spellId == 338353 and args:IsDestTypePlayer() and self:CheckDispelFilter("disease") and self:AntiSpam(3, 5) then
|
||
|
|
specWarnGoresplatterDispel:Show(args.destName)
|
||
|
|
specWarnGoresplatterDispel:Play("helpdispel")
|
||
|
|
elseif spellId == 340288 and args:IsDestTypePlayer() then
|
||
|
|
local amount = args.amount or 1
|
||
|
|
if amount >= 2 then
|
||
|
|
warnTenderize:Show(args.destName, args.amount or 1)
|
||
|
|
end
|
||
|
|
elseif spellId == 338606 then
|
||
|
|
timerMorbidFixation:Start(args.destName)
|
||
|
|
if args:IsPlayer() and self:AntiSpam(4, 1) then
|
||
|
|
specWarnMorbidFixation:Show()
|
||
|
|
specWarnMorbidFixation:Play("justrun")
|
||
|
|
end
|
||
|
|
elseif spellId == 327396 then
|
||
|
|
warnGrimFate:CombinedShow(0.3, args.destName)
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnGrimFate:Show()
|
||
|
|
specWarnGrimFate:Play("runout")
|
||
|
|
yellGrimFate:Yell()
|
||
|
|
yellGrimFateFades:Countdown(spellId)
|
||
|
|
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 == 338606 then
|
||
|
|
timerMorbidFixation:Stop(args.destName)
|
||
|
|
elseif spellId == 327396 then
|
||
|
|
if args:IsPlayer() then
|
||
|
|
yellGrimFateFades:Cancel()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|