local mod = DBM:NewMod("PlaguefallTrash", "DBM-Party-Shadowlands", 2) local L = mod:GetLocalizedStrings() mod:SetRevision("20231020041658") --mod:SetModelID(47785) mod.isTrashMod = true mod:RegisterEvents( "SPELL_CAST_START 328016 328177 327584 327581 330403 327233 328986 318949 319070 328338 328475", "SPELL_CAST_SUCCESS 320517", "SPELL_AURA_APPLIED 328015 320072 320103 336451", "SPELL_AURA_REMOVED 320103" ) --TODO, maybe auto icon marking/tracking of slimes summoned via 327598 --Notable Globgrog Trash local warnFungistorm = mod:NewSpellAnnounce(328177, 3, nil, "Healer") local warnBeckonSlime = mod:NewCastAnnounce(327581, 2, 6)--Cast 3 seconds, plus 3 seconds til slime appears --Notable Doctor Ickus Trash local warnViolentDetonation = mod:NewCastAnnounce(328986, 3) --Notable Domina Venomblade --Unknown local warnEnvelopingWebbing = mod:NewCastAnnounce(328475, 3) --General local specWarnGTFO = mod:NewSpecialWarningGTFO(320072, nil, nil, nil, 1, 8) --Notable Globgrog Trash local specWarnWingBuffet = mod:NewSpecialWarningDodge(330403, "Tank", nil, nil, 1, 8) local specWarnBelchPlague = mod:NewSpecialWarningDodge(327233, nil, nil, nil, 1, 2) --Notable Doctor Ickus Trash local specWarnFesteringBelch = mod:NewSpecialWarningDodge(318949, "Tank", nil, nil, 1, 2) local specWarCorrosiveGunk = mod:NewSpecialWarningInterrupt(319070, false, nil, nil, 1, 2)--Spam cast. Even with Cd filter this may annoy users, off by default --Notable Domina Venomblade local specWarnBulwarkofMaldraxxus = mod:NewSpecialWarningMove(336451, "Tank", nil, nil, 1, 10) --Notable Margrave Stradama Trash local specWarnCallVenomfang = mod:NewSpecialWarningInterrupt(328338, "HasInterrupt", nil, nil, 1, 2) --Unknown local specWarnWonderGrow = mod:NewSpecialWarningInterrupt(328016, "HasInterrupt", nil, nil, 1, 2) local specWarnWonderGrowDispel = mod:NewSpecialWarningDispel(328015, "MagicDispeller", nil, nil, 1, 2) local specWarnJaggedSpines = mod:NewSpecialWarningDodge(320517, nil, nil, nil, 2, 2) local timerMetamorphosis = mod:NewCastTimer(10, 322232, nil, nil, nil, 1) --mod:GroupSpells(328016, 328015)--Group two wonder grows (they use diff spell Ids because they have diff icons, so it's clearer which is interrupt and which is dispel --Antispam IDs for this mod: 1 run away, 2 dodge, 3 dispel, 4 incoming damage, 5 you/role, 6 misc mod.vb.metaCast = 0--Disconnects or reloads or leaving/entering the zone when it's at a non 0 count will break timer accuracy --function mod:RicochetingTarget(targetname, uId) -- if not targetname then return end -- warnRicochetingThrow:Show(targetname) -- if targetname == UnitName("player") then -- yellRicochetingThrow:Yell() -- end --end function mod:SPELL_CAST_START(args) if not self.Options.Enabled then return end if not self:IsValidWarning(args.sourceGUID) then return end--Filter all casts done by mobs in combat with npcs/other mobs. local spellId = args.spellId if spellId == 328016 and self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnWonderGrow:Show(args.sourceName) specWarnWonderGrow:Play("kickcast") elseif spellId == 319070 and self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarCorrosiveGunk:Show(args.sourceName) specWarCorrosiveGunk:Play("kickcast") elseif spellId == 328338 and self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnCallVenomfang:Show(args.sourceName) specWarnCallVenomfang:Play("kickcast") elseif spellId == 328177 and self:AntiSpam(3, 4) then warnFungistorm:Show() elseif (spellId == 327584 or spellId == 327581) and self:AntiSpam(3, 6) then warnBeckonSlime:Show() elseif spellId == 330403 and self:AntiSpam(3, 2) then specWarnWingBuffet:Show() specWarnWingBuffet:Play("shockwave") elseif spellId == 327233 and self:AntiSpam(3, 2) then specWarnBelchPlague:Show() specWarnBelchPlague:Play("shockwave") elseif spellId == 318949 and self:AntiSpam(3, 2) then specWarnFesteringBelch:Show() specWarnFesteringBelch:Play("shockwave") elseif spellId == 328986 and self:AntiSpam(3, 6) then warnViolentDetonation:Show() elseif spellId == 328475 and self:AntiSpam(3, 6) then warnEnvelopingWebbing:Show() -- elseif spellId == 272402 then -- self:ScheduleMethod(0.1, "BossTargetScanner", args.sourceGUID, "RicochetingTarget", 0.1, 4) end end function mod:SPELL_CAST_SUCCESS(args) if not self.Options.Enabled then return end local spellId = args.spellId if spellId == 320517 and self:AntiSpam(3, 2) then --Using success because it can be interrupted, so we don't want to warn to dodge it unless it's NOT interupted specWarnJaggedSpines:Show() specWarnJaggedSpines:Play("watchstep") end end function mod:SPELL_AURA_APPLIED(args) if not self.Options.Enabled then return end local spellId = args.spellId if spellId == 328015 and self:IsValidWarning(args.destGUID) then specWarnWonderGrowDispel:CombinedShow(1, args.destName) specWarnWonderGrowDispel:ScheduleVoice(1, "dispelboss") elseif spellId == 320072 and args:IsPlayer() and self:AntiSpam(3, 1) then specWarnGTFO:Show(args.spellName) specWarnGTFO:Play("watchfeet") -- elseif spellId == 328015 and args:IsDestTypePlayer() and self:CheckDispelFilter() and self:AntiSpam(3, 5) then -- specWarnBestialWrath:Show(args.destName) -- specWarnBestialWrath:Play("helpdispel") elseif spellId == 320103 then--This may need valid warning filter too not sure yet self.vb.metaCast = self.vb.metaCast + 1 if self.vb.metaCast == 1 then timerMetamorphosis:Start() end elseif spellId == 336451 and self:IsValidWarning(args.destGUID) and args:IsDestTypeHostile() and self:AntiSpam(3, 5) then specWarnBulwarkofMaldraxxus:Show() specWarnBulwarkofMaldraxxus:Play("mobout") end end function mod:SPELL_AURA_REMOVED(args) if not self.Options.Enabled then return end local spellId = args.spellId if spellId == 320103 then self.vb.metaCast = self.vb.metaCast - 1 if self.vb.metaCast == 0 then timerMetamorphosis:Stop() 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 end end --]]