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.
242 lines
11 KiB
242 lines
11 KiB
local mod = DBM:NewMod("TheNokhudOffensiveTrash", "DBM-Party-Dragonflight", 3)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20240621023045")
|
|
--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 388801",
|
|
"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 = 388801 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(18.2, 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 timerMortalStrikeCD = mod:NewCDNPTimer(15.1, 388801, nil, nil, nil, 5)
|
|
local timerDisruptingShoutCD = mod:NewCDNPTimer(21.8, 384365, nil, "HasInterrupt", nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--20-30ish
|
|
local timerTempestCD = mod:NewCDNPTimer(18.2, 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
|
|
elseif spellId == 388801 then
|
|
timerMortalStrikeCD:Start(nil, args.sourceGUID)
|
|
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)
|
|
elseif cid == 195855 then--Risen Warrior
|
|
timerMortalStrikeCD:Stop(args.destGUID)
|
|
end
|
|
end
|
|
|