local mod = DBM:NewMod("TheNokhudOffensiveTrash", "DBM-Party-Dragonflight", 3) local L = mod:GetLocalizedStrings() mod:SetRevision("20240503080608") --mod:SetModelID(47785) mod.isTrashMod = true mod:RegisterEvents( "SPELL_CAST_START 387145 386024 387127 384336 387629 387614 387411 382233 373395 383823 384365 386694 387125 387440 436841 387596 384134 381683", "SPELL_CAST_SUCCESS 384476 382267", "SPELL_AURA_APPLIED 395035 334610 386223 345561", -- "SPELL_AURA_APPLIED_DOSE 339528", -- "SPELL_AURA_REMOVED 339525", "UNIT_DIED" ) --TODO, target scan https://www.wowhead.com/beta/spell=387127/chain-lightning ? --Lady's Trash, minus bottled anima, which will need a unit event to detect it looks like --TODO, uncomment/update rain of arrows timer for season 4 --[[ (ability.id = 373395 or ability.id = 387411 or ability.id = 373395 or ability.id = 383823 or ability.id = 384365 or ability.id = 387440 or ability.id = 384336 or ability.id = 386024) and type = "begincast" or (ability.id = 382267 or ability.id = 384476) and type = "cast" --]] local warnTotemicOverload = mod:NewCastAnnounce(387145, 3) local warnChantoftheDead = mod:NewCastAnnounce(387614, 3) local warnTempest = mod:NewCastAnnounce(386024, 4) local warnDeathBoltVolley = mod:NewCastAnnounce(387411, 3) local warnBloodcurdlingShout = mod:NewCastAnnounce(373395, 3) local warnRallytheClan = mod:NewCastAnnounce(383823, 4, nil, nil, nil, nil, nil, 3)--Has to be stunned/disrupted local warnDisruptiveShout = mod:NewCastAnnounce(384365, 3) local warnStormsurge = mod:NewCastAnnounce(386694, 3) local warnThunderstrike = mod:NewCastAnnounce(387125, 3, nil, nil, "Tank") local warnSwiftStab = mod:NewCastAnnounce(381683, 3) local warnDesecratingRoar = mod:NewCastAnnounce(387440, 4, nil, nil, nil, nil, nil, 3)--Has to be stunned/disrupted local warnRottingWind = mod:NewCastAnnounce(436841, 3) local warnSwiftWind = mod:NewCastAnnounce(387596, 3) local specWarnShatterSoul = mod:NewSpecialWarningMoveTo(395035, nil, nil, nil, 1, 2) local specWarnChainLightning = mod:NewSpecialWarningMoveAway(387127, nil, nil, nil, 1, 2) local yellChainLightning = mod:NewYell(387127) local specWarnVehementCharge = mod:NewSpecialWarningMoveAway(382277, nil, nil, nil, 1, 2) local yellVehementCharge = mod:NewYell(382277) local specWarnHuntPrey = mod:NewSpecialWarningYou(334610, nil, nil, nil, 1, 2)--This might throw duplicate spell alert in debug, that's cause it is in fact used in necrotic wake too local specWarnWarStomp = mod:NewSpecialWarningDodge(384336, nil, nil, nil, 2, 2) local specWarnBroadStomp = mod:NewSpecialWarningDodge(382233, nil, nil, nil, 2, 2) local specWarnRainofArrows = mod:NewSpecialWarningDodge(384476, nil, nil, nil, 2, 2) local specWarnStormshield = mod:NewSpecialWarningDispel(386223, "MagicDispeller", nil, nil, 1, 2) local specWarnTempest = mod:NewSpecialWarningInterrupt(386024, "HasInterrupt", nil, nil, 1, 2) local specWarnDeathBoltVolley = mod:NewSpecialWarningInterrupt(387411, "HasInterrupt", nil, nil, 1, 2) local specWarnBloodcurdlingShout = mod:NewSpecialWarningInterrupt(373395, "HasInterrupt", nil, nil, 1, 2) local specWarnDisruptiveShout = mod:NewSpecialWarningInterrupt(384365, "HasInterrupt", nil, nil, 1, 2) local timerRallytheClanCD = mod:NewCDNPTimer(20.6, 383823, nil, nil, nil, 5)--20-23 local timerWarStompCD = mod:NewCDNPTimer(15.7, 384336, nil, nil, nil, 3) --local timerRainofArrowsCD = mod:NewCDNPTimer(15.7, 384476, nil, nil, nil, 3) local timerRottingWindCD = mod:NewCDNPTimer(23, 436841, nil, nil, nil, 2) local timerSwiftWindCD = mod:NewCDNPTimer(20.6, 387596, nil, nil, nil, 5) local timerSwiftStabCD = mod:NewCDNPTimer(13.4, 381683, nil, nil, nil, 5)--13.4-26.9 (basically casts can be skipped via stuns local timerThunderstrikeCD = mod:NewCDNPTimer(4.9, 387125, nil, nil, nil, 5) local timerVehementChargeCD = mod:NewCDNPTimer(16.3, 382277, nil, nil, nil, 3)--16.3-17.1 local timerDisruptingShoutCD = mod:NewCDNPTimer(21.8, 384365, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--20-30ish local timerTempestCD = mod:NewCDNPTimer(20.6, 386024, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--20-25 local timerDesecratingRoarCD = mod:NewCDNPTimer(15.8, 387440, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON) local timerDeathBoltVolleyCD = mod:NewCDNPTimer(10.9, 387411, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON) local timerBloodcurdlingShoutCD = mod:NewCDNPTimer(19.1, 373395, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON) --local playerName = UnitName("player") local teeramod = DBM:GetModByName("2478") --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: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 == 387145 and self:AntiSpam(5, 4) then warnTotemicOverload:Show() elseif spellId == 386024 then timerTempestCD:Start(nil, args.sourceGUID) if self.Options.SpecWarn386024interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnTempest:Show(args.sourceName) specWarnTempest:Play("kickcast") elseif self:AntiSpam(3, 7) then warnTempest:Show() end elseif spellId == 387411 then timerDeathBoltVolleyCD:Start(nil, args.sourceGUID) if self.Options.SpecWarn387411interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnDeathBoltVolley:Show(args.sourceName) specWarnDeathBoltVolley:Play("kickcast") elseif self:AntiSpam(3, 7) then warnDeathBoltVolley:Show() end elseif spellId == 373395 then timerBloodcurdlingShoutCD:Start(nil, args.sourceGUID) if self.Options.SpecWarn373395interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnBloodcurdlingShout:Show(args.sourceName) specWarnBloodcurdlingShout:Play("kickcast") elseif self:AntiSpam(3, 7) then warnBloodcurdlingShout:Show() end elseif spellId == 383823 then timerRallytheClanCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 5) then warnRallytheClan:Show() warnRallytheClan:Play("crowdcontrol") end elseif spellId == 387440 then timerDesecratingRoarCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 5) then warnDesecratingRoar:Show() warnDesecratingRoar:Play("crowdcontrol") end elseif spellId == 384365 then timerDisruptingShoutCD:Start(nil, args.sourceGUID) if self.Options.SpecWarn384365interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then specWarnDisruptiveShout:Show(args.sourceName) specWarnDisruptiveShout:Play("kickcast") elseif self:AntiSpam(3, 7) then warnDisruptiveShout:Show() end elseif spellId == 387127 then self:ScheduleMethod(0.1, "BossTargetScanner", args.sourceGUID, "CLTarget", 0.1, 8) elseif spellId == 384336 then timerWarStompCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 2) then specWarnWarStomp:Show() specWarnWarStomp:Play("watchstep") end elseif (spellId == 436841 or spellId == 387629) then--387629 is season 1 version, 436841 season 4 timerRottingWindCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 2) then warnRottingWind:Show() end elseif spellId == 387596 then timerSwiftWindCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 2) then warnSwiftWind:Show() end elseif spellId == 382233 and self:AntiSpam(3, 2) then specWarnBroadStomp:Show() specWarnBroadStomp:Play("shockwave") elseif spellId == 387614 and self:AntiSpam(5, 6) then warnChantoftheDead:Show() elseif spellId == 386694 and self:AntiSpam(3, 6) then warnStormsurge:Show() elseif spellId == 387125 then timerThunderstrikeCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 5) then warnThunderstrike:Show() end elseif spellId == 381683 then timerSwiftStabCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 4) then warnSwiftStab:Show() 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 -- timerRainofArrowsCD:Start(nil, args.sourceGUID) if self:AntiSpam(3, 2) then specWarnRainofArrows:Show() specWarnRainofArrows:Play("watchstep") end elseif spellId == 382267 then timerVehementChargeCD:Start(nil, args.sourceGUID) if args:IsPlayer() then specWarnVehementCharge:Show() specWarnVehementCharge:Play("chargemove") yellVehementCharge:Yell() end end end function mod:SPELL_AURA_APPLIED(args) if not self.Options.Enabled then return end local spellId = args.spellId if spellId == 395035 and args:IsPlayer() then specWarnShatterSoul:Show(L.Soul) specWarnShatterSoul:Play("targetyou") elseif spellId == 334610 and args:IsPlayer() and not self:IsTank() and self:AntiSpam(3, 5) then specWarnHuntPrey:Show() specWarnHuntPrey:Play("targetyou") elseif spellId == 386223 and args:IsDestTypeHostile() and self:AntiSpam(3, 3) then specWarnStormshield:Show(args.destName) specWarnStormshield:Play("helpdispel") elseif spellId == 345561 and self:AntiSpam(5, 8) then--Life Link ---@diagnostic disable-next-line: dbm-sync-checker teeramod:SendSync("TeeraRP") end end --mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED function mod:UNIT_DIED(args) local cid = self:GetCIDFromGUID(args.destGUID) if cid == 192796 then--Nokhud Hornsounder timerRallytheClanCD:Stop(args.destGUID) elseif cid == 191847 then--Nokhud Plainstomper timerWarStompCD:Stop(args.destGUID) timerDisruptingShoutCD:Stop(args.destGUID) elseif cid == 194894 then--Primalist Stormspeaker timerTempestCD:Stop(args.destGUID) elseif cid == 195878 then--Uthel Beastcaller timerDesecratingRoarCD:Stop(args.destGUID) elseif cid == 195928 or cid == 195927 or cid == 195930 or cid == 195929 then--All 4 Soulharvesters timerDeathBoltVolleyCD:Stop(args.destGUID) elseif cid == 193462 then--Batak timerBloodcurdlingShoutCD:Stop(args.destGUID) elseif cid == 192789 then--Nokhud Longbow --timerRainofArrowsCD:Stop(args.destGUID) elseif cid == 195876 then--Desecrated Ohuna timerRottingWindCD:Stop(args.destGUID) elseif cid == 195877 then--Risen Mystic timerSwiftWindCD:Stop(args.destGUID) elseif cid == 192791 then--Nokhud Warspear timerSwiftStabCD:Stop(args.destGUID) elseif cid == 195696 then--Primalist Thunderbeast timerThunderstrikeCD:Stop(args.destGUID) elseif cid == 193457 then--Balara timerVehementChargeCD:Stop(args.destGUID) end end