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.
298 lines
15 KiB
298 lines
15 KiB
local mod = DBM:NewMod("BoralusTrash", "DBM-Party-BfA", 5)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20240808043723")
|
|
--mod:SetModelID(47785)
|
|
|
|
mod.isTrashMod = true
|
|
mod.isTrashModBossFightAllowed = true
|
|
|
|
mod:RegisterEvents(
|
|
"SPELL_CAST_START 275826 256627 256957 256709 257170 272546 257169 272713 274569 272571 272888 272711 268260 257288 454440 272662",
|
|
"SPELL_CAST_SUCCESS 256627 256640 257170 256709 257288 272422 454437 275826 275835 272888 272546 454440 272711 257169 272571",
|
|
"SPELL_INTERRUPT",
|
|
"SPELL_AURA_APPLIED 256957 257168 272421 272571 272888 454437",
|
|
"UNIT_DIED"
|
|
)
|
|
|
|
--TODO, heavy slash tank only?
|
|
--TODO, target scan Ricochet (272542)? (does it even still exist?)
|
|
--TODO, https://www.wowhead.com/beta/spell=275836/stinging-venom stack announcer for tank/healer?
|
|
--TODO, nameplate timer for Watertight shell. it has a really long CD (or is health based) and I haven't been able to find a shitter enough group to see two casts on a single mob yet
|
|
--[[
|
|
(ability.id = 275826 or ability.id = 256627 or ability.id = 256957 or ability.id = 256709 or ability.id = 257170 or ability.id = 272546 or ability.id = 257169 or ability.id = 272713 or ability.id = 274569 or ability.id = 272571 or ability.id = 272888 or ability.id = 257288 or ability.id = 268260 or ability.id = 272711 or ability.id = 275835 or ability.id = 454440 or ability.id = 272874) and type = "begincast"
|
|
or (ability.id = 256640 or ability.id = 272422 or ability.id = 454437) and type = "cast"
|
|
or (stoppedAbility.id = 256957 or stoppedAbility.id = 274569 or stoppedAbility.id = 272571 or stoppedAbility.id = 454440 or stoppedability.id = 275826)
|
|
or (ability.id = 275826 or ability.id = 256627 or ability.id = 256957 or ability.id = 256709 or ability.id = 257170 or ability.id = 272546 or ability.id = 257169 or ability.id = 272713 or ability.id = 274569 or ability.id = 272571 or ability.id = 272888 or ability.id = 257288 or ability.id = 268260 or ability.id = 272711 or ability.id = 275835 or ability.id = 454440 or ability.id = 272874) and type = "cast"
|
|
or type = "dungeonencounterstart" or type = "dungeonencounterend"
|
|
--]]
|
|
local warnBananaRampage = mod:NewSpellAnnounce(272546, 2)
|
|
local warnBolsteringShout = mod:NewCastAnnounce(275826, 4)--High Prio Interrupt
|
|
local warnWatertightShell = mod:NewCastAnnounce(256957, 4)--High Prio Interrupt
|
|
local warnChoakingWaters = mod:NewCastAnnounce(272571, 4)--High Prio Interrupt
|
|
local warnStinkyVomit = mod:NewCastAnnounce(454440, 4)--High Prio Interrupt
|
|
local warnFerocity = mod:NewCastAnnounce(272888, 3)
|
|
local warnAzeriteCharge = mod:NewTargetAnnounce(454437, 2)
|
|
local warnBurningTar = mod:NewSpellAnnounce(256640, 2)
|
|
local warnIronHook = mod:NewSpellAnnounce(272662, 4, nil, nil, nil, nil, nil, 12)
|
|
|
|
local specWarnSlobberKnocker = mod:NewSpecialWarningDodge(256627, "Tank", nil, nil, 1, 2)
|
|
local specWarnSingingSteel = mod:NewSpecialWarningDodge(256709, "Tank", nil, nil, 1, 2)
|
|
local specWarnHeavySlash = mod:NewSpecialWarningDodge(257288, "Tank", nil, nil, 1, 2)
|
|
local specWarnCrushingSlam = mod:NewSpecialWarningDodge(272711, "Tank", nil, nil, 1, 2)
|
|
--local specWarnTrample = mod:NewSpecialWarningDodge(272874, nil, nil, nil, 2, 2)
|
|
local specWarnBroadside = mod:NewSpecialWarningDodge(268260, nil, nil, nil, 2, 2)
|
|
local specWarnSavageTempest = mod:NewSpecialWarningRun(257170, nil, nil, nil, 4, 2)--can tank run out too? or does it follow tank
|
|
local specWarnSightedArt = mod:NewSpecialWarningYou(272421, nil, nil, nil, 1, 2)
|
|
local yellSightedArt = mod:NewYell(272421)
|
|
local specWarnAzeriteCharge = mod:NewSpecialWarningMoveAway(454437, nil, nil, nil, 1, 2)
|
|
local yellAzeriteCharge = mod:NewYell(454437)
|
|
local specWarnBolsteringShout = mod:NewSpecialWarningInterrupt(275826, "HasInterrupt", nil, nil, 1, 2)--High Prio
|
|
local specWarnWatertightShell = mod:NewSpecialWarningInterrupt(256957, "HasInterrupt", nil, nil, 1, 2)--High Prio
|
|
local specWarnRevitalizingMist = mod:NewSpecialWarningInterrupt(274569, "HasInterrupt", nil, nil, 1, 2)--Same mob as choking waters, but also important
|
|
local specWarnChokingWaters = mod:NewSpecialWarningInterrupt(272571, "HasInterrupt", nil, nil, 1, 2)--High Prio
|
|
local specWarnStinkyVomit = mod:NewSpecialWarningInterrupt(454440, "HasInterrupt", nil, nil, 1, 2)--High Prio
|
|
local specWarnWatertightShellDispel = mod:NewSpecialWarningDispel(256957, "MagicDispeller", nil, nil, 1, 2)
|
|
local specWarnCursedSlash = mod:NewSpecialWarningDispel(257168, "RemoveCurse", nil, nil, 1, 2)
|
|
local specWarnFerocity = mod:NewSpecialWarningDispel(272888, "RemoveEnrage", nil, 2, 1, 2)
|
|
local specWarnChokingWatersDispel = mod:NewSpecialWarningDispel(272571, "RemoveMagic", nil, 2, 1, 2)
|
|
local specWarnFear = mod:NewSpecialWarningSpell(257169, nil, nil, nil, 2, 2)
|
|
|
|
--copilot, there are no NewCDTimer objects in this mod, only NewCDNPTimer objects
|
|
--copilot, there is no DBM_CORE_L in this mod, only DBM_COMMON_L
|
|
local timerSlobberknockerCD = mod:NewCDNPTimer(18.8, 256627, nil, nil, nil, 5)--18.8-20
|
|
local timerBurningTarCD = mod:NewCDNPTimer(22.6, 256640, nil, nil, nil, 3)
|
|
local timerSavageTempestCD = mod:NewCDNPTimer(19.1, 257170, nil, nil, nil, 3)
|
|
local timerSingSteelCD = mod:NewCDNPTimer(17, 256709, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
|
|
local timerHeavySlashCD = mod:NewCDNPTimer(20.6, 257288, nil, nil, nil, 5)
|
|
local timerSightedArtCD = mod:NewCDNPTimer(12.1, 272421, nil, nil, nil, 3)
|
|
local timerAzeriteChargeCD = mod:NewCDNPTimer(15.7, 454437, nil, nil, nil, 3)
|
|
local timerBolsteringShoutCD = mod:NewCDNPTimer(18.1, 275826, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
|
|
local timerStingingVenomCoatingCD = mod:NewCDNPTimer(16.9, 275835, nil, nil, nil, 5)--Lasts 10 seconds, recast time is 17 so has a high uptime
|
|
local timerFerocityCD = mod:NewCDNPTimer(38.9, 272888, nil, nil, nil, 5)--Small sample, but it seems like a very long cooldown
|
|
local timerBananaRampageCD = mod:NewCDNPTimer(16.9, 272546, nil, nil, nil, 3)
|
|
local timerStinkyVomitCD = mod:NewCDNPTimer(16.1, 454440, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--16.1-19.4
|
|
local timerCrushingSlamCD = mod:NewCDNPTimer(20.6, 272711, nil, nil, nil, 3)
|
|
local timerTerrifyingRoarCD = mod:NewCDNPTimer(31.6, 257169, nil, nil, nil, 2)
|
|
local timerChoakingWatersCD = mod:NewCDNPTimer(29.1, 272571, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--29.1-31.6
|
|
local timerIronHookCD = mod:NewCDNPTimer(19.4, 272662, nil, nil, nil, 3)
|
|
|
|
--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
|
|
if not self:IsValidWarning(args.sourceGUID) then return end
|
|
local spellId = args.spellId
|
|
if spellId == 275826 then
|
|
if self.Options.SpecWarn275826interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnBolsteringShout:Show(args.sourceName)
|
|
specWarnBolsteringShout:Play("kickcast")
|
|
elseif self:AntiSpam(4, 7) then
|
|
warnBolsteringShout:Show()
|
|
end
|
|
elseif spellId == 256627 and self:AntiSpam(3, 2) then
|
|
specWarnSlobberKnocker:Show()
|
|
specWarnSlobberKnocker:Play("shockwave")
|
|
elseif spellId == 256709 and self:AntiSpam(3, 2) then
|
|
specWarnSingingSteel:Show()
|
|
specWarnSingingSteel:Play("shockwave")
|
|
elseif spellId == 257170 and self:AntiSpam(4, 1) then
|
|
specWarnSavageTempest:Show()
|
|
specWarnSavageTempest:Play("whirlwind")
|
|
elseif spellId == 272546 and self:AntiSpam(4, 6) then
|
|
warnBananaRampage:Show()
|
|
elseif spellId == 257169 and self:AntiSpam(4, 5) then
|
|
specWarnFear:Show()
|
|
specWarnFear:Play("fearsoon")
|
|
elseif spellId == 256957 then
|
|
if self.Options.SpecWarn256957interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnWatertightShell:Show(args.sourceName)
|
|
specWarnWatertightShell:Play("kickcast")
|
|
elseif self:AntiSpam(4, 7) then
|
|
warnWatertightShell:Show()
|
|
end
|
|
elseif spellId == 274569 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnRevitalizingMist:Show(args.sourceName)
|
|
specWarnRevitalizingMist:Play("kickcast")
|
|
elseif spellId == 272571 then
|
|
if self.Options.SpecWarn272571interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnChokingWaters:Show(args.sourceName)
|
|
specWarnChokingWaters:Play("kickcast")
|
|
elseif self:AntiSpam(4, 7) then
|
|
warnChoakingWaters:Show()
|
|
end
|
|
elseif spellId == 272888 and self:AntiSpam(4, 6) then
|
|
warnFerocity:Show()
|
|
elseif spellId == 272711 and self:AntiSpam(3, 2) then
|
|
specWarnCrushingSlam:Show()
|
|
specWarnCrushingSlam:Play("shockwave")
|
|
elseif spellId == 268260 and args:GetSrcCreatureID() == 138465 then--Trash version
|
|
if self:AntiSpam(3, 2) then
|
|
specWarnBroadside:Show()
|
|
specWarnBroadside:Play("watchstep")
|
|
end
|
|
elseif spellId == 257288 and args:GetSrcCreatureID() == 129879 and self:AntiSpam(3, 2) then--Trash version
|
|
specWarnHeavySlash:Show()
|
|
specWarnHeavySlash:Play("shockwave")
|
|
elseif spellId == 454440 then
|
|
if self.Options.SpecWarn454440interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnStinkyVomit:Show(args.sourceName)
|
|
specWarnStinkyVomit:Play("kickcast")
|
|
elseif self:AntiSpam(4, 7) then
|
|
warnStinkyVomit:Show()
|
|
end
|
|
elseif spellId == 272662 then
|
|
warnIronHook:Show()
|
|
warnIronHook:Play("pullin")
|
|
timerIronHookCD:Start(19.4, args.sourceGUID)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
if not self.Options.Enabled then return end
|
|
local spellId = args.spellId
|
|
if spellId == 256627 then
|
|
timerSlobberknockerCD:Start(16.8, args.sourceGUID)--18.8 - 2
|
|
elseif spellId == 256640 then
|
|
warnBurningTar:Show()
|
|
timerBurningTarCD:Start(22.6, args.sourceGUID)
|
|
elseif spellId == 257170 then
|
|
timerSavageTempestCD:Start(16.1, args.sourceGUID)--19.1 - 3
|
|
elseif spellId == 256709 then
|
|
timerSingSteelCD:Start(15, args.sourceGUID)--17 - 2
|
|
elseif spellId == 257288 and args:GetSrcCreatureID() == 129879 then
|
|
timerHeavySlashCD:Start(17.8, args.sourceGUID)--20.6 - 2.8
|
|
elseif spellId == 272422 then--No filter needed, boss version doesn't fire this spellID
|
|
timerSightedArtCD:Start(12.1, args.sourceGUID)
|
|
elseif spellId == 454437 then
|
|
timerAzeriteChargeCD:Start(15.7, args.sourceGUID)
|
|
elseif spellId == 275826 then
|
|
timerBolsteringShoutCD:Start(15.6, args.sourceGUID)--18.1 - 2.5
|
|
elseif spellId == 275835 then
|
|
timerStingingVenomCoatingCD:Start(15.4, args.sourceGUID)--16.9 - 1.5
|
|
elseif spellId == 272888 then
|
|
timerFerocityCD:Start(35.9, args.sourceGUID)--38.9 - 3
|
|
elseif spellId == 272546 then
|
|
timerBananaRampageCD:Start(15.4, args.sourceGUID)
|
|
elseif spellId == 454440 then
|
|
timerStinkyVomitCD:Start(18.1, args.sourceGUID)--16.1 - 2
|
|
elseif spellId == 272711 then
|
|
timerCrushingSlamCD:Start(17.1, args.sourceGUID)--20.6 - 3.5
|
|
elseif spellId == 257169 then
|
|
timerTerrifyingRoarCD:Start(28.6, args.sourceGUID)--31.6 - 3
|
|
elseif spellId == 272571 then
|
|
timerChoakingWatersCD:Start(26.6, args.sourceGUID)--29.1 - 2.5
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_INTERRUPT(args)
|
|
if type(args.extraSpellId) ~= "number" then return end
|
|
if args.extraSpellId == 275826 then
|
|
timerBolsteringShoutCD:Start(15.6, args.sourceGUID)--18.1 - 2.5
|
|
elseif args.extraSpellId == 454440 then
|
|
timerStinkyVomitCD:Start(18.1, args.sourceGUID)--16.1 - 2
|
|
elseif args.extraSpellId == 272571 then
|
|
timerChoakingWatersCD:Start(26.6, args.sourceGUID)--29.1 - 2.5
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
if not self.Options.Enabled then return end
|
|
local spellId = args.spellId
|
|
if spellId == 256957 and self:IsValidWarning(args.sourceGUID) and not args:IsDestTypePlayer() then
|
|
specWarnWatertightShellDispel:CombinedShow(1, args.destName)
|
|
specWarnWatertightShellDispel:ScheduleVoice(1, "helpdispel")
|
|
elseif spellId == 257168 and self:IsValidWarning(args.sourceGUID) and self:CheckDispelFilter("curse") then
|
|
specWarnCursedSlash:Show(args.destName)
|
|
specWarnCursedSlash:Play("helpdispel")
|
|
elseif spellId == 272421 and args:IsPlayer() and args:GetSrcCreatureID() ~= 129208 then--Want to filter it from firing on boss fight
|
|
specWarnSightedArt:Show()
|
|
specWarnSightedArt:Play("targetyou")
|
|
yellSightedArt:Yell()
|
|
elseif spellId == 272571 and args:IsDestTypePlayer() and self:CheckDispelFilter("magic") then
|
|
specWarnChokingWatersDispel:Show(args.destName)
|
|
specWarnChokingWatersDispel:Play("helpdispel")
|
|
elseif spellId == 272888 and self:IsValidWarning(args.sourceGUID) then
|
|
specWarnFerocity:Show(args.destName)
|
|
specWarnFerocity:Play("helpdispel")
|
|
elseif spellId == 454437 and args:IsDestTypePlayer() then
|
|
if args:IsPlayer() then
|
|
specWarnAzeriteCharge:Show()
|
|
specWarnAzeriteCharge:Play("runout")
|
|
yellAzeriteCharge:Yell()
|
|
else
|
|
warnAzeriteCharge:Show(args.destName)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 129374 then--Scrimshaw Enforcer
|
|
timerSlobberknockerCD:Stop(args.destGUID)
|
|
elseif cid == 129372 then--Blacktar Bomber
|
|
timerBurningTarCD:Stop(args.destGUID)
|
|
elseif cid == 129369 then--Irontide Raider
|
|
timerSavageTempestCD:Stop(args.destGUID)
|
|
elseif cid == 129371 then--Riptide Shredder
|
|
timerSingSteelCD:Stop(args.destGUID)
|
|
elseif cid == 129879 then--Irontide Cleaver (Trash version)
|
|
timerHeavySlashCD:Stop(args.destGUID)
|
|
elseif cid == 141939 or cid == 138255 or cid == 135263 then--Ashvane Spotter
|
|
timerSightedArtCD:Stop(args.destGUID)
|
|
elseif cid == 128969 then--Ashvane Commander
|
|
timerAzeriteChargeCD:Stop(args.destGUID)
|
|
timerBolsteringShoutCD:Stop(args.destGUID)
|
|
elseif cid == 137516 then--Ashvane Invader
|
|
timerStingingVenomCoatingCD:Stop(args.destGUID)
|
|
elseif cid == 137517 then--Ashvane Destroyer
|
|
timerFerocityCD:Stop(args.destGUID)
|
|
elseif cid == 129366 then--Bilge Rat Buccaneer
|
|
timerBananaRampageCD:Stop(args.destGUID)
|
|
elseif cid == 135241 then--Bilge Rat Pillager
|
|
timerStinkyVomitCD:Stop(args.destGUID)
|
|
elseif cid == 135245 then--Billage Rat Demolisher
|
|
timerCrushingSlamCD:Stop(args.destGUID)
|
|
timerTerrifyingRoarCD:Stop(args.destGUID)
|
|
elseif cid == 129367 then--Bilge Rat Tempest
|
|
timerChoakingWatersCD:Stop(args.destGUID)
|
|
elseif cid == 129369 then--Iron Raider
|
|
timerIronHookCD:Stop(args.destGUID)
|
|
end
|
|
end
|
|
|
|
--Spells not in combat log what so ever, so this relies on unit event off a users target or nameplate unit IDs, then syncing to group
|
|
--In combat log in TWW+, but keeping code around in case we get a classic BfA for some insane reason
|
|
--[[
|
|
function mod:UNIT_SPELLCAST_START(uId, _, spellId)
|
|
if spellId == 272874 then
|
|
local guid = UnitGUID(uId)
|
|
if guid and self:IsValidWarning(guid, uId) then
|
|
self:SendSync("Trample")
|
|
end
|
|
elseif spellId == 272711 then
|
|
local guid = UnitGUID(uId)
|
|
if guid and self:IsValidWarning(guid, uId) then
|
|
self:SendSync("CrushingSlam")
|
|
end
|
|
elseif spellId == 268260 then
|
|
local guid = UnitGUID(uId)
|
|
if guid and self:IsValidWarning(guid, uId) then
|
|
self:SendSync("Broadside")
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:OnSync(msg)
|
|
if msg == "Trample" and self:AntiSpam(4, 10) then
|
|
specWarnTrample:Show()
|
|
specWarnTrample:Play("chargemove")
|
|
elseif msg == "CrushingSlam" and self:AntiSpam(2.5, 2) then
|
|
specWarnCrushingSlam:Show()
|
|
specWarnCrushingSlam:Play("shockwave")
|
|
elseif msg == "Broadside" then
|
|
specWarnBroadside:Show()
|
|
specWarnBroadside:Play("watchstep")
|
|
end
|
|
end
|
|
--]]
|
|
|