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

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