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.
286 lines
15 KiB
286 lines
15 KiB
|
4 years ago
|
local mod = DBM:NewMod("d1963", "DBM-Challenges", 1)
|
||
|
|
local L = mod:GetLocalizedStrings()
|
||
|
|
|
||
|
|
mod:SetRevision("20210907150109")
|
||
|
|
|
||
|
|
mod:RegisterCombat("scenario", 2162)--1911-1912 are outdoor areas
|
||
|
|
mod.noStatistics = true
|
||
|
|
|
||
|
|
mod:RegisterEventsInCombat(
|
||
|
|
"SPELL_CAST_START 288210 292903 295985 296748 295001 294362 304075 296523 270248 270264 270348 263085 215710 294526 294533 298844 297018 295942 294165 330118 258935 308026 335528 277040 329608 330438 330471 294401 294517 296839 297020 242391 330573 332165 258938 329422 329423 329930 329908 329909 81008 351931 353769 353573 354490 351090",
|
||
|
|
"SPELL_AURA_APPLIED 304093 277040",
|
||
|
|
"SPELL_AURA_APPLIED_DOSE 303678",
|
||
|
|
"SPELL_AURA_REMOVED 277040",
|
||
|
|
"SPELL_PERIODIC_DAMAGE 294607",
|
||
|
|
"SPELL_PERIODIC_MISSED 294607",
|
||
|
|
"UNIT_DIED"
|
||
|
|
)
|
||
|
|
|
||
|
|
--TODO, verifying howling souls spellId, user submitted and unverified from logs. SpellId given is used in eye of azshara. Can use torghast reusuing it though.
|
||
|
|
--TODO https://shadowlands.wowhead.com/spell=303678/bone-shrapnel? not sure what i can do about it in a mod though, it's instant cast on death. warn when they are getting low if melee?
|
||
|
|
--TODO https://shadowlands.wowhead.com/spell=299150/unnatural-power? boss buff stacks, basic DPS check
|
||
|
|
--TODO, alert when a deadsoul scavenger is nearby?
|
||
|
|
--TODO, 352215 cries of tormented fear interruptable?
|
||
|
|
--TODO, right event for https://www.wowhead.com/spell=354493/soul-breaker#used-by-npc
|
||
|
|
--TODO, is https://www.wowhead.com/spell=351621/impaling-spikes#guides the one with bone spikes coming out of ground that do massive damage? I need to get right spell for that and add a dodge/interrrupt to it
|
||
|
|
local warnMightySlam = mod:NewCastAnnounce(296748, 3)--Cast time to short to really dodge, this is just alert to at least mentally prepare for damage spike
|
||
|
|
|
||
|
|
--The Maw (WIP, current combat handling doesn't permit this yet)
|
||
|
|
--local specWarnMagmaWave = mod:NewSpecialWarningDodge(345454, nil, nil, nil, 2, 2)--SPELL_CAST_START
|
||
|
|
--Torghast
|
||
|
|
local specWarnHowlingSouls = mod:NewSpecialWarningSpell(215710, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnMassiveStrike = mod:NewSpecialWarningDodge(292903, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnMeteor = mod:NewSpecialWarningDodge(270264, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnRatTrap = mod:NewSpecialWarningDodge(295942, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnFanningtheFlames = mod:NewSpecialWarningDodge(308026, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnCrushingSlam = mod:NewSpecialWarningDodge(329908, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnProphecyOfDeath = mod:NewSpecialWarningDodge(330471, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnDiscordantBarrage = mod:NewSpecialWarningDodge(294401, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnBindSouls = mod:NewSpecialWarningDodge(297020, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnInferno = mod:NewSpecialWarningDodge(335528, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnCarrionSwarm = mod:NewSpecialWarningDodge(353573, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnTorturingSwipe = mod:NewSpecialWarningDodge(354490, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnQuake = mod:NewSpecialWarningJump(81008, nil, nil, nil, 2, 2)
|
||
|
|
|
||
|
|
local specWarnGroundCrush = mod:NewSpecialWarningRun(295985, nil, nil, nil, 4, 2)
|
||
|
|
--local specWarnMightySlam = mod:NewSpecialWarningRun(296748, nil, nil, nil, 4, 2)
|
||
|
|
local specWarnWhirlwind = mod:NewSpecialWarningRun(295001, nil, nil, nil, 4, 2)
|
||
|
|
local specWarnSoulblastNova = mod:NewSpecialWarningRun(294533, nil, nil, nil, 4, 2)
|
||
|
|
local specWarnCrushingStomp = mod:NewSpecialWarningRun(329909, nil, nil, nil, 4, 2)
|
||
|
|
local specWarnPainBringer = mod:NewSpecialWarningRun(351931, nil, nil, nil, 4, 2)
|
||
|
|
local specWarnDeafeningHowl = mod:NewSpecialWarningCast(296523, "SpellCaster", nil, nil, 1, 2)
|
||
|
|
local specWarnBoneShrapnel = mod:NewSpecialWarningStack(303678, nil, 4, nil, nil, 1, 6)
|
||
|
|
local specWarnMassCripple = mod:NewSpecialWarningDispel(304093, "RemoveMagic", nil, nil, 1, 2)
|
||
|
|
local specWarnCurseofFrailtyDispel = mod:NewSpecialWarningDispel(294526, "RemoveCurse", nil, nil, 1, 2)
|
||
|
|
--local yellScorchedFeet = mod:NewYell(315385)
|
||
|
|
local specWarnNecroticBolt = mod:NewSpecialWarningInterrupt(288210, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnShadowBoltVolley = mod:NewSpecialWarningInterrupt(294362, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnBindofFallen = mod:NewSpecialWarningInterrupt(304075, false, nil, 2, 1, 2)
|
||
|
|
local specWarnConflagrate = mod:NewSpecialWarningInterrupt(270248, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnFireballVolley = mod:NewSpecialWarningInterrupt(270348, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnTerrifyingRoar = mod:NewSpecialWarningInterrupt(263085, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnCurseofFrailty = mod:NewSpecialWarningInterrupt(294526, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnFearsomeHowl = mod:NewSpecialWarningInterrupt(298844, "HasInterrupt", nil, 2, 1, 2)
|
||
|
|
local specWarnFearsomeShriek = mod:NewSpecialWarningInterrupt(332165, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnTerrifyingScreech = mod:NewSpecialWarningInterrupt(329930, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnPhasingRoar = mod:NewSpecialWarningInterrupt(294517, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnDeathBlast = mod:NewSpecialWarningInterrupt(296839, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnAccursedStrength = mod:NewSpecialWarningInterrupt(294165, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnWitheringRoar = mod:NewSpecialWarningInterrupt(330118, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnInnerFlames = mod:NewSpecialWarningInterrupt(258935, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnSoulofMist = mod:NewSpecialWarningInterrupt(277040, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnTerror = mod:NewSpecialWarningInterrupt(242391, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnBountyOfTheForest = mod:NewSpecialWarningInterrupt(330573, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnShadowboltVolley = mod:NewSpecialWarningInterrupt(353769, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnPersecute = mod:NewSpecialWarningInterrupt(351090, "HasInterrupt", nil, nil, 1, 2)
|
||
|
|
local specWarnSoulofMistDispel = mod:NewSpecialWarningDispel(277040, "MagicDispeller", nil, nil, 1, 2)
|
||
|
|
local specWarnGTFO = mod:NewSpecialWarningGTFO(303594, nil, nil, nil, 1, 8)
|
||
|
|
|
||
|
|
local timerGroundCrushCD = mod:NewNextTimer(23.1, 295985, nil, nil, nil, 3)
|
||
|
|
|
||
|
|
mod:AddNamePlateOption("NPAuraOnSoulofMist", 277040)
|
||
|
|
|
||
|
|
--Antispam IDs for this mod: 1 run away, 2 dodge, 3 dispel, 4 incoming damage, 5 you/role, 6 GTFO, 7 misc
|
||
|
|
local warnedGUIDs = {}
|
||
|
|
|
||
|
|
--[[
|
||
|
|
function mod:DefiledGroundTarget(targetname, uId)
|
||
|
|
if not targetname then return end
|
||
|
|
if targetname == UnitName("player") then
|
||
|
|
yellDefiledGround:Yell()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
--]]
|
||
|
|
|
||
|
|
function mod:OnCombatStart(delay)
|
||
|
|
table.wipe(warnedGUIDs)
|
||
|
|
if self.Options.NPAuraOnSoulofMist then
|
||
|
|
DBM:FireEvent("BossMod_EnableHostileNameplates")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:OnCombatEnd()
|
||
|
|
table.wipe(warnedGUIDs)
|
||
|
|
if self.Options.NPAuraOnSoulofMist then
|
||
|
|
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)--isGUID, unit, spellId, texture, force, isHostile, isFriendly
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_CAST_START(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if not self:IsValidWarning(args.sourceGUID, nil, true) then return end--Filter all casts done by mobs in combat with npcs/other mobs.
|
||
|
|
if spellId == 292903 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnMassiveStrike:Show()
|
||
|
|
specWarnMassiveStrike:Play("shockwave")
|
||
|
|
elseif spellId == 308026 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnFanningtheFlames:Show()
|
||
|
|
specWarnFanningtheFlames:Play("shockwave")
|
||
|
|
elseif spellId == 329908 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnCrushingSlam:Show()
|
||
|
|
specWarnCrushingSlam:Play("shockwave")
|
||
|
|
elseif spellId == 353573 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnCarrionSwarm:Show()
|
||
|
|
specWarnCarrionSwarm:Play("shockwave")
|
||
|
|
elseif spellId == 354490 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnTorturingSwipe:Show()
|
||
|
|
specWarnTorturingSwipe:Play("shockwave")
|
||
|
|
elseif spellId == 215710 and self:AntiSpam(4, 4) then
|
||
|
|
specWarnHowlingSouls:Show()
|
||
|
|
specWarnHowlingSouls:Play("aesoon")
|
||
|
|
elseif spellId == 270264 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnMeteor:Show()
|
||
|
|
specWarnMeteor:Play("watchstep")
|
||
|
|
elseif spellId == 295942 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnRatTrap:Show()
|
||
|
|
specWarnRatTrap:Play("watchstep")
|
||
|
|
elseif spellId == 330471 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnProphecyOfDeath:Show()
|
||
|
|
specWarnProphecyOfDeath:Play("watchstep")
|
||
|
|
elseif spellId == 294401 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnDiscordantBarrage:Show()
|
||
|
|
specWarnDiscordantBarrage:Play("watchstep")
|
||
|
|
elseif spellId == 297020 and self:AntiSpam(3, 2) then
|
||
|
|
specWarnBindSouls:Show()
|
||
|
|
specWarnBindSouls:Play("watchstep")
|
||
|
|
elseif spellId == 335528 and self:AntiSpam(3, 7) then
|
||
|
|
specWarnInferno:Show()
|
||
|
|
specWarnInferno:Play("watchstep")
|
||
|
|
elseif spellId == 81008 and self:AntiSpam(3, 7) then
|
||
|
|
specWarnQuake:Schedule(0.75)
|
||
|
|
specWarnQuake:ScheduleVoice(0.75, "jumpnow")
|
||
|
|
elseif spellId == 295985 then
|
||
|
|
if self:AntiSpam(4, 1) then
|
||
|
|
specWarnGroundCrush:Show()
|
||
|
|
specWarnGroundCrush:Play("justrun")
|
||
|
|
end
|
||
|
|
timerGroundCrushCD:Start(nil, args.sourceGUID)
|
||
|
|
elseif spellId == 296748 and self:AntiSpam(4, 7) then
|
||
|
|
warnMightySlam:Show()
|
||
|
|
elseif spellId == 295001 and self:AntiSpam(4, 1) then
|
||
|
|
specWarnWhirlwind:Show()
|
||
|
|
specWarnWhirlwind:Play("justrun")
|
||
|
|
elseif spellId == 294533 and self:AntiSpam(4, 1) then
|
||
|
|
specWarnSoulblastNova:Show()
|
||
|
|
specWarnSoulblastNova:Play("justrun")
|
||
|
|
elseif spellId == 329909 and self:AntiSpam(4, 1) then
|
||
|
|
specWarnCrushingStomp:Show()
|
||
|
|
specWarnCrushingStomp:Play("justrun")
|
||
|
|
elseif spellId == 351931 and self:AntiSpam(4, 1) then
|
||
|
|
specWarnPainBringer:Show()
|
||
|
|
specWarnPainBringer:Play("justrun")
|
||
|
|
elseif (spellId == 296523 or spellId == 318995) and self:AntiSpam(4, 5) then
|
||
|
|
specWarnDeafeningHowl:Show()
|
||
|
|
specWarnDeafeningHowl:Play("stopcast")
|
||
|
|
elseif spellId == 288210 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnNecroticBolt:Show(args.sourceName)
|
||
|
|
specWarnNecroticBolt:Play("kickcast")
|
||
|
|
elseif spellId == 294362 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnShadowBoltVolley:Show(args.sourceName)
|
||
|
|
specWarnShadowBoltVolley:Play("kickcast")
|
||
|
|
elseif spellId == 304075 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnBindofFallen:Show(args.sourceName)
|
||
|
|
specWarnBindofFallen:Play("kickcast")
|
||
|
|
elseif spellId == 270248 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnConflagrate:Show(args.sourceName)
|
||
|
|
specWarnConflagrate:Play("kickcast")
|
||
|
|
elseif spellId == 270348 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnFireballVolley:Show(args.sourceName)
|
||
|
|
specWarnFireballVolley:Play("kickcast")
|
||
|
|
elseif (spellId == 329608 or spellId == 263085) and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnTerrifyingRoar:Show(args.sourceName)
|
||
|
|
specWarnTerrifyingRoar:Play("kickcast")
|
||
|
|
elseif spellId == 294526 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnCurseofFrailty:Show(args.sourceName)
|
||
|
|
specWarnCurseofFrailty:Play("kickcast")
|
||
|
|
elseif spellId == 294165 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnAccursedStrength:Show(args.sourceName)
|
||
|
|
specWarnAccursedStrength:Play("kickcast")
|
||
|
|
elseif spellId == 277040 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnSoulofMist:Show(args.sourceName)
|
||
|
|
specWarnSoulofMist:Play("kickcast")
|
||
|
|
elseif spellId == 330118 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnWitheringRoar:Show(args.sourceName)
|
||
|
|
specWarnWitheringRoar:Play("kickcast")
|
||
|
|
elseif (spellId == 258935 or spellId == 258938 or spellId == 329422 or spellId == 329423) and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnInnerFlames:Show(args.sourceName)
|
||
|
|
specWarnInnerFlames:Play("kickcast")
|
||
|
|
elseif (spellId == 297018 or spellId == 298844 or spellId == 330438) and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnFearsomeHowl:Show(args.sourceName)
|
||
|
|
specWarnFearsomeHowl:Play("kickcast")
|
||
|
|
elseif spellId == 298844 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnPhasingRoar:Show(args.sourceName)
|
||
|
|
specWarnPhasingRoar:Play("kickcast")
|
||
|
|
elseif spellId == 296839 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnDeathBlast:Show(args.sourceName)
|
||
|
|
specWarnDeathBlast:Play("kickcast")
|
||
|
|
elseif spellId == 242391 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnTerror:Show(args.sourceName)
|
||
|
|
specWarnTerror:Play("kickcast")
|
||
|
|
elseif spellId == 332165 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnFearsomeShriek:Show(args.sourceName)
|
||
|
|
specWarnFearsomeShriek:Play("kickcast")
|
||
|
|
elseif spellId == 329930 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnTerrifyingScreech:Show(args.sourceName)
|
||
|
|
specWarnTerrifyingScreech:Play("kickcast")
|
||
|
|
elseif spellId == 330573 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnBountyOfTheForest:Show(args.sourceName)
|
||
|
|
specWarnBountyOfTheForest:Play("kickcast")
|
||
|
|
elseif spellId == 353769 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnShadowboltVolley:Show(args.sourceName)
|
||
|
|
specWarnShadowboltVolley:Play("kickcast")
|
||
|
|
elseif spellId == 351090 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
||
|
|
specWarnPersecute:Show(args.sourceName)
|
||
|
|
specWarnPersecute:Play("kickcast")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_AURA_APPLIED(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 303678 and args:IsPlayer() then
|
||
|
|
local amount = args.amount or 1
|
||
|
|
if amount >= 4 and self:AntiSpam(3, 5) then
|
||
|
|
specWarnBoneShrapnel:Show(amount)
|
||
|
|
specWarnBoneShrapnel:Play("stackhigh")
|
||
|
|
end
|
||
|
|
elseif spellId == 304093 and self:IsValidWarning(args.destGUID) and args:IsDestTypePlayer() and self:CheckDispelFilter() then
|
||
|
|
specWarnMassCripple:CombinedShow(0.5, args.destName)
|
||
|
|
specWarnMassCripple:ScheduleVoice(0.5, "helpdispel")
|
||
|
|
elseif spellId == 294526 and self:IsValidWarning(args.destGUID) and args:IsDestTypePlayer() and self:CheckDispelFilter() then
|
||
|
|
specWarnCurseofFrailtyDispel:CombinedShow(0.5, args.destName)
|
||
|
|
specWarnCurseofFrailtyDispel:ScheduleVoice(0.5, "helpdispel")
|
||
|
|
elseif spellId == 277040 then
|
||
|
|
if self:IsValidWarning(args.destGUID) and args:IsDestTypeHostile() and self:AntiSpam(3, 5) then
|
||
|
|
specWarnSoulofMistDispel:Show(args.destName)
|
||
|
|
specWarnSoulofMistDispel:Play("helpdispel")
|
||
|
|
end
|
||
|
|
if self.Options.NPAuraOnSoulofMist then
|
||
|
|
DBM.Nameplate:Show(true, args.sourceGUID, spellId, nil, 9)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
||
|
|
|
||
|
|
function mod:SPELL_AURA_REMOVED(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 277040 then
|
||
|
|
if self.Options.NPAuraOnSoulofMist then
|
||
|
|
DBM.Nameplate:Hide(true, args.sourceGUID, spellId)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
|
||
|
|
if spellId == 294607 and destGUID == UnitGUID("player") and self:AntiSpam(2, 6) then -- Death Pool
|
||
|
|
specWarnGTFO:Show(spellName)
|
||
|
|
specWarnGTFO:Play("watchfeet")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
|
||
|
|
|
||
|
|
function mod:UNIT_DIED(args)
|
||
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
||
|
|
if cid == 151331 or cid == 159755 or cid == 175234 then
|
||
|
|
timerGroundCrushCD:Stop(args.destGUID)
|
||
|
|
end
|
||
|
|
end
|