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.
658 lines
24 KiB
658 lines
24 KiB
|
5 years ago
|
local mod = DBM:NewMod(2441, "DBM-SanctumOfDomination", nil, 1193)
|
||
|
|
local L = mod:GetLocalizedStrings()
|
||
|
|
|
||
|
|
mod:SetRevision("20210625003647")
|
||
|
|
mod:SetCreatureID(178423)--ID taken from Banshee Form, so should be right
|
||
|
|
mod:SetEncounterID(2435)
|
||
|
|
mod:SetUsedIcons(5, 6, 7, 8)
|
||
|
|
mod:SetHotfixNoticeRev(20210530000000)--2021-05-30
|
||
|
|
mod:SetMinSyncRevision(20210530000000)
|
||
|
|
--mod.respawnTime = 29
|
||
|
|
|
||
|
|
mod:RegisterCombat("combat")
|
||
|
|
|
||
|
|
mod:RegisterEventsInCombat(
|
||
|
|
"SPELL_CAST_START 349419 347726 347609 352663 353418 353417 348094 355540 352271 351075 351179 351353 356023 354011 353969 354068 353952 353935 354147 357102",
|
||
|
|
"SPELL_CAST_SUCCESS 351178",
|
||
|
|
"SPELL_AURA_APPLIED 347504 347807 347670 349458 348064 347607 350857 348146 351109 351117 351451 353929 357882 357886 357720 353935 348064 356986",
|
||
|
|
"SPELL_AURA_APPLIED_DOSE 347807 347607 351672",
|
||
|
|
"SPELL_AURA_REMOVED 347504 347807 351109",
|
||
|
|
"SPELL_AURA_REMOVED_DOSE 347807",
|
||
|
|
"CHAT_MSG_RAID_BOSS_EMOTE"
|
||
|
|
-- "SPELL_PERIODIC_DAMAGE",
|
||
|
|
-- "SPELL_PERIODIC_MISSED",
|
||
|
|
-- "UNIT_DIED"
|
||
|
|
-- "UNIT_SPELLCAST_SUCCEEDED boss1"
|
||
|
|
)
|
||
|
|
|
||
|
|
--TODO, do what with the combo of attacks of windrunner? IE https://ptr.wowhead.com/spell=347928/withering-fire
|
||
|
|
--TODO, infoframe on barbed stacks useful? add more stuff to it like banshees bane in phase 3 and adds/orbs monitors in phase 2?
|
||
|
|
--TODO, do more with Ranger's Heartseeker? Currently just guestiate timer between casts and stack monitor
|
||
|
|
--TODO, determine add warnings/timers for phase 2
|
||
|
|
--TODO, icons for crushing dread? Depends on number of debuffs and number of adds etc
|
||
|
|
--TODO, verify/improve orb auto marking on mythic
|
||
|
|
--TODO, do more with https://ptr.wowhead.com/spell=351939/curse-of-lethargy?
|
||
|
|
--TODO, use shadow dagger timer in phase 1 as well? or any of other windrunner abilities need timers
|
||
|
|
--TODO, add counts to everything that's kept
|
||
|
|
--TODO, chains cast timer for when they land?
|
||
|
|
--[[
|
||
|
|
(ability.id = 349419 or ability.id = 347609 or ability.id = 352663 or ability.id = 353418 or ability.id = 353417 or ability.id = 348094 or ability.id = 355540 or ability.id = 352271 or ability.id = 354011 or ability.id = 353969 or ability.id = 354068 or ability.id = 353952 or ability.id = 354147 or ability.id = 357102 or ability.id = 347726 or ability.id = 353935) and type = "begincast"
|
||
|
|
or (ability.id = 356986 or ability.id = 347504 or ability.id = 350857 or ability.id = 348146) and (type = "begincast" or type = "applydebuff" or type = "applybuff" or type = "removebuff" or type = "removedebuff")
|
||
|
|
or (ability.id = 351075 or ability.id = 351117 or ability.id = 351353 or ability.id = 356023) and type = "begincast"
|
||
|
|
or ability.id = 347704 and type = "applydebuff"
|
||
|
|
--]]
|
||
|
|
|
||
|
|
--General
|
||
|
|
local warnPhase = mod:NewPhaseChangeAnnounce(2, nil, nil, nil, nil, nil, 2)
|
||
|
|
--Stage One: A Cycle of Hatred
|
||
|
|
local warnWindrunnerOver = mod:NewEndAnnounce(347504, 2)
|
||
|
|
local warnShadowDagger = mod:NewTargetNoFilterAnnounce(347670, 2, nil, "Healer")
|
||
|
|
local warnDominationChains = mod:NewTargetAnnounce(349458, 2)--Could be spammy, unknown behavior
|
||
|
|
--local warnVeilofDarkness = mod:NewTargetNoFilterAnnounce(347704, 2)
|
||
|
|
local warnRangersHeartseeker = mod:NewSpellAnnounce(352663, 2, nil, "Tank")
|
||
|
|
local warnBansheesMark = mod:NewStackAnnounce(347607, 2, nil, "Tank|Healer")
|
||
|
|
--Intermission: A Monument to our Suffering
|
||
|
|
local warnRive = mod:NewCountAnnounce(353418, 4)--May default off by default depending on feedback
|
||
|
|
--Stage Two: The Banshee Queen
|
||
|
|
local warnWindsofIcecrown = mod:NewTargetCountAnnounce(356986, 1, nil, nil, nil, nil, nil, nil, true)
|
||
|
|
----Forces of the Maw
|
||
|
|
local warnUnstoppableForce = mod:NewCountAnnounce(351075, 2)--Mawsworn Vanguard
|
||
|
|
local warnLashingStrike = mod:NewTargetNoFilterAnnounce(351179, 3)--Mawforged Souljudge
|
||
|
|
local warnCrushingDread = mod:NewTargetAnnounce(351117, 2)--Mawforged Souljudge
|
||
|
|
local warnSummonDecrepitOrbs = mod:NewCountAnnounce(351353, 2)--Mawforged Summoner
|
||
|
|
local warnCurseofLthargy = mod:NewTargetAnnounce(351451, 2)--Mawforged Summoner
|
||
|
|
--Stage Three: The Freedom of Choice
|
||
|
|
local warnBansheesHeartseeker = mod:NewSpellAnnounce(353969, 2, nil, "Tank")
|
||
|
|
local warnBansheesBane = mod:NewTargetNoFilterAnnounce(353929, 4)
|
||
|
|
local warnBansheesScream = mod:NewTargetNoFilterAnnounce(357720, 3)
|
||
|
|
|
||
|
|
--local specWarnGTFO = mod:NewSpecialWarningGTFO(340324, nil, nil, nil, 1, 8)
|
||
|
|
--Stage One: A Cycle of Hatred
|
||
|
|
local specWarnWindrunner = mod:NewSpecialWarningCount(347504, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnDominationChains = mod:NewSpecialWarningCount(349419, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnVeilofDarkness = mod:NewSpecialWarningDodgeCount(347704, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnWailingArrow = mod:NewSpecialWarningRun(348064, nil, nil, nil, 4, 2)
|
||
|
|
local specWarnWailingArrowTaunt = mod:NewSpecialWarningTaunt(348064, nil, nil, nil, 1, 2)
|
||
|
|
--local specWarnBansheesMark = mod:NewSpecialWarningStack(347607, nil, 3, nil, nil, 1, 2)
|
||
|
|
--local specWarnBansheesMarkTaunt = mod:NewSpecialWarningTaunt(347607, nil, nil, nil, 1, 2)
|
||
|
|
--Intermission: A Monument to our Suffering
|
||
|
|
local specWarnBansheeWail = mod:NewSpecialWarningMoveAway(348094, nil, nil, nil, 2, 2)
|
||
|
|
--Stage Two: The Banshee Queen
|
||
|
|
local specWarnHauntingWave = mod:NewSpecialWarningDodge(352271, nil, nil, nil, 2, 2)
|
||
|
|
local specWarnRuin = mod:NewSpecialWarningInterrupt(355540, nil, nil, nil, 3, 2)
|
||
|
|
----Forces of the Maw
|
||
|
|
local specWarnLashingStrike = mod:NewSpecialWarningYou(351179, nil, nil, nil, 1, 2)--Mawforged Souljudge
|
||
|
|
local yellLashingStrike = mod:NewYell(351179)--Mawforged Souljudge
|
||
|
|
local specWarnCrushingDread = mod:NewSpecialWarningMoveAway(351117, nil, nil, nil, 1, 2)--Mawforged Souljudge
|
||
|
|
local yellCrushingDread = mod:NewYell(351117)--Mawforged Souljudge
|
||
|
|
local specWarnTerrorOrb = mod:NewSpecialWarningInterruptCount(356023, nil, nil, nil, 1, 2, 4)--Mawforged Summoner
|
||
|
|
local specWarnCurseofLethargy = mod:NewSpecialWarningYou(351451, nil, nil, nil, 1, 2)--Mawforged Summoner
|
||
|
|
local specWarnFury = mod:NewSpecialWarningCount(351672, nil, DBM_CORE_L.AUTO_SPEC_WARN_OPTIONS.stack:format(12, 351672), nil, 1, 2)--Mawforged Goliath
|
||
|
|
local specWarnFuryOther = mod:NewSpecialWarningTaunt(351672, nil, nil, nil, 1, 2)--Mawforged Goliath
|
||
|
|
--Stage Three: The Freedom of Choice
|
||
|
|
local specWarnBansheesBane = mod:NewSpecialWarningYou(353929, nil, nil, nil, 1, 2)
|
||
|
|
local specWarnBansheesBaneTaunt = mod:NewSpecialWarningTaunt(353929, nil, nil, nil, 1, 2)--Let the tank drop bane out by swapping for it
|
||
|
|
local specWarnBansheesBaneDispel = mod:NewSpecialWarningDispel(353929, "RemoveMagic", nil, nil, 3, 2)--Dispel alert during Fury
|
||
|
|
local specWarnBansheeScream = mod:NewSpecialWarningYou(357720, nil, nil, nil, 1, 2)
|
||
|
|
local yellBansheeScream = mod:NewYell(357720)
|
||
|
|
local specWarnRaze = mod:NewSpecialWarningRun(354147, nil, nil, nil, 4, 2)
|
||
|
|
|
||
|
|
--General
|
||
|
|
--local berserkTimer = mod:NewBerserkTimer(600)
|
||
|
|
--Stage One: A Cycle of Hatred
|
||
|
|
--mod:AddTimerLine(BOSS)
|
||
|
|
local timerWindrunnerCD = mod:NewCDCountTimer(50.3, 347504, nil, nil, nil, 6, nil, nil, nil, 1, 3)
|
||
|
|
local timerDominationChainsCD = mod:NewCDCountTimer(50.7, 349419, nil, nil, nil, 3)
|
||
|
|
local timerVeilofDarknessCD = mod:NewCDCountTimer(48.8, 347726, nil, nil, nil, 3)
|
||
|
|
local timerWailingArrowCD = mod:NewCDCountTimer(33.9, 347609, nil, "Tank|Healer", nil, 5, nil, DBM_CORE_L.TANK_ICON)
|
||
|
|
--Intermission: A Monument to our Suffering
|
||
|
|
local timerRiveCD = mod:NewCDCountTimer(48.8, 353418, nil, nil, nil, 3)
|
||
|
|
local timerNextPhase = mod:NewPhaseTimer(16.5, 348094, nil, nil, nil, 6)
|
||
|
|
--Stage Two: The Banshee Queen
|
||
|
|
--local timerRuinCD = mod:NewAITimer(23, 355540, nil, nil, nil, 2)--Add Interrupt icon if it's actually interruptable
|
||
|
|
--local timerHauntingWaveCD = mod:NewAITimer(23, 352271, nil, nil, nil, 2)
|
||
|
|
local timerWindsofIcecrown = mod:NewBuffActiveTimer(35, 356986, nil, nil, nil, 5, nil, DBM_CORE_L.DAMAGE_ICON)
|
||
|
|
--Unstoppable Force ~9sec cd
|
||
|
|
----Forces of the Maw
|
||
|
|
|
||
|
|
--Stage Three: The Freedom of Choice
|
||
|
|
local timerShadowDaggerCD = mod:NewCDCountTimer(23, 353935, nil, nil, nil, 3)--Only used in phase 3, in phase 1 it's tied to windrunner
|
||
|
|
local timerBaneArrowsCD = mod:NewCDCountTimer(23, 354011, nil, nil, nil, 3)
|
||
|
|
local timerBansheesFuryCD = mod:NewCDCountTimer(23, 354068, nil, nil, nil, 2)
|
||
|
|
local timerBansheesScreamCD = mod:NewCDCountTimer(23, 353952, nil, nil, nil, 3)
|
||
|
|
local timerRazeCD = mod:NewCDCountTimer(23, 354147, nil, nil, nil, 3, nil, DBM_CORE_L.DEADLY_ICON)
|
||
|
|
|
||
|
|
--mod:AddRangeFrameOption("8")
|
||
|
|
mod:AddInfoFrameOption(347807, true)
|
||
|
|
mod:AddSetIconOption("SetIconOnTerrorOrb", 356023, true, true, {4, 5, 6, 7, 8})--Didn't see any on heroic
|
||
|
|
mod:AddNamePlateOption("NPAuraOnEnflame", 351109)--Mawsworn Hopebreaker
|
||
|
|
|
||
|
|
--P1+ variable
|
||
|
|
mod.vb.winrunnerCount = 0
|
||
|
|
mod.vb.dominationChainsCount = 0
|
||
|
|
mod.vb.veilofDarknessCount = 0
|
||
|
|
mod.vb.wailingArrowCount = 0
|
||
|
|
--Intermission (P1.5) variables
|
||
|
|
mod.vb.riveCount = 0
|
||
|
|
--P2+ variables
|
||
|
|
mod.vb.addIcon = 8
|
||
|
|
mod.vb.icecrownCast = 0
|
||
|
|
mod.vb.hauntingWavecount = 0
|
||
|
|
--P3+ variables
|
||
|
|
mod.vb.baneArrowCount = 0
|
||
|
|
mod.vb.shadowDaggerCount = 0
|
||
|
|
mod.vb.bansheeScreamCount = 0
|
||
|
|
mod.vb.bansheesFuryCount = 0
|
||
|
|
mod.vb.razeCount = 0
|
||
|
|
local BarbedStacks = {}
|
||
|
|
local castsPerGUID = {}
|
||
|
|
local difficultyName = "None"
|
||
|
|
local allTimers = {--Much of table unused, just templated in case earlier difficulties also sequence better
|
||
|
|
["lfr"] = {
|
||
|
|
[1] = {
|
||
|
|
|
||
|
|
},
|
||
|
|
[1.5] = {
|
||
|
|
|
||
|
|
},
|
||
|
|
[2] = {
|
||
|
|
|
||
|
|
},
|
||
|
|
[3] = {
|
||
|
|
--Bane Arrows
|
||
|
|
[354011] = {},
|
||
|
|
--Shadow Dagger
|
||
|
|
[353935] = {},
|
||
|
|
--Banshee Scream
|
||
|
|
[353952] = {},
|
||
|
|
--Wailing Arrow
|
||
|
|
[347609] = {},
|
||
|
|
--Veil of Darkness
|
||
|
|
-- [347726] = {},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
["normal"] = {
|
||
|
|
[1] = {
|
||
|
|
|
||
|
|
},
|
||
|
|
[1.5] = {
|
||
|
|
|
||
|
|
},
|
||
|
|
[2] = {
|
||
|
|
|
||
|
|
},
|
||
|
|
[3] = {
|
||
|
|
--Bane Arrows
|
||
|
|
[354011] = {},
|
||
|
|
--Shadow Dagger
|
||
|
|
[353935] = {},
|
||
|
|
--Banshee Scream
|
||
|
|
[353952] = {},
|
||
|
|
--Wailing Arrow
|
||
|
|
[347609] = {},
|
||
|
|
--Veil of Darkness
|
||
|
|
-- [347726] = {},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
["heroic"] = {
|
||
|
|
[1] = {
|
||
|
|
|
||
|
|
},
|
||
|
|
[1.5] = {
|
||
|
|
|
||
|
|
},
|
||
|
|
[2] = {
|
||
|
|
|
||
|
|
},
|
||
|
|
[3] = {--Initial numbers not verified, justtemplates from wowhead
|
||
|
|
--Bane Arrows
|
||
|
|
[354011] = {19.6, 43.3},
|
||
|
|
--Shadow Dagger
|
||
|
|
[353935] = {22.2, 36.2},
|
||
|
|
--Banshee Scream
|
||
|
|
[353952] = {27.8, 7.5},
|
||
|
|
--Wailing Arrow
|
||
|
|
[347609] = {49, 3, 3},
|
||
|
|
--Veil of Darkness
|
||
|
|
-- [347726] = {46},
|
||
|
|
--Banshees Fury
|
||
|
|
-- [347726] = {65.6},
|
||
|
|
--Raze
|
||
|
|
-- [347726] = {72.6},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
["mythic"] = {
|
||
|
|
[1] = {
|
||
|
|
|
||
|
|
},
|
||
|
|
[2] = {
|
||
|
|
|
||
|
|
},
|
||
|
|
[3] = {
|
||
|
|
--Bane Arrows
|
||
|
|
[354011] = {},
|
||
|
|
--Shadow Dagger
|
||
|
|
[353935] = {},
|
||
|
|
--Banshee Scream
|
||
|
|
[353952] = {},
|
||
|
|
--Wailing Arrow
|
||
|
|
[347609] = {},
|
||
|
|
--Veil of Darkness
|
||
|
|
-- [347726] = {},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
function mod:OnCombatStart(delay)
|
||
|
|
table.wipe(BarbedStacks)
|
||
|
|
table.wipe(castsPerGUID)
|
||
|
|
self:SetStage(1)
|
||
|
|
self.vb.winrunnerCount = 0
|
||
|
|
self.vb.dominationChainsCount = 0
|
||
|
|
self.vb.veilofDarknessCount = 0
|
||
|
|
self.vb.wailingArrowCount = 0
|
||
|
|
self.vb.addIcon = 8
|
||
|
|
if self:IsMythic() then
|
||
|
|
difficultyName = "mythic"
|
||
|
|
else
|
||
|
|
if self:IsHeroic() then
|
||
|
|
difficultyName = "heroic"
|
||
|
|
elseif self:IsNormal() then
|
||
|
|
difficultyName = "normal"
|
||
|
|
else
|
||
|
|
difficultyName = "lfr"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
timerWindrunnerCD:Start(8.4-delay, 1)
|
||
|
|
-- timerShadowDaggerCD:Start(-delay)
|
||
|
|
timerDominationChainsCD:Start(28.3-delay, 1)
|
||
|
|
timerVeilofDarknessCD:Start(46.7-delay, 1)
|
||
|
|
-- berserkTimer:Start(-delay)
|
||
|
|
if self.Options.InfoFrame then
|
||
|
|
DBM.InfoFrame:SetHeader(DBM:GetSpellInfo(347807))
|
||
|
|
DBM.InfoFrame:Show(10, "table", BarbedStacks, 1)
|
||
|
|
end
|
||
|
|
if self.Options.NPAuraOnEnflame then
|
||
|
|
DBM:FireEvent("BossMod_EnableHostileNameplates")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:OnCombatEnd()
|
||
|
|
if self.Options.InfoFrame then
|
||
|
|
DBM.InfoFrame:Hide()
|
||
|
|
end
|
||
|
|
-- if self.Options.RangeFrame then
|
||
|
|
-- DBM.RangeCheck:Hide()
|
||
|
|
-- end
|
||
|
|
if self.Options.NPAuraOnEnflame then
|
||
|
|
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:OnTimerRecovery()
|
||
|
|
if self:IsMythic() then
|
||
|
|
difficultyName = "mythic"
|
||
|
|
elseif self:IsHeroic() then
|
||
|
|
difficultyName = "heroic"
|
||
|
|
elseif self:IsNormal() then
|
||
|
|
difficultyName = "normal"
|
||
|
|
else
|
||
|
|
difficultyName = "lfr"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_CAST_START(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 349419 then
|
||
|
|
self.vb.dominationChainsCount = self.vb.dominationChainsCount + 1
|
||
|
|
specWarnDominationChains:Show(self.vb.dominationChainsCount)
|
||
|
|
specWarnDominationChains:Play("watchstep")
|
||
|
|
timerDominationChainsCD:Start(nil, self.vb.dominationChainsCount+1)
|
||
|
|
-- elseif spellId == 347726 then
|
||
|
|
-- self.vb.veilofDarknessCount = self.vb.veilofDarknessCount + 1
|
||
|
|
-- timerVeilofDarknessCD:Start()
|
||
|
|
elseif spellId == 347609 then
|
||
|
|
self.vb.wailingArrowCount = self.vb.wailingArrowCount + 1
|
||
|
|
local timer = allTimers[difficultyName][self.vb.phase][spellId][self.vb.wailingArrowCount+1]
|
||
|
|
if timer then
|
||
|
|
timerWailingArrowCD:Start(timer, self.vb.wailingArrowCount+1)
|
||
|
|
end
|
||
|
|
elseif spellId == 352663 then
|
||
|
|
warnRangersHeartseeker:Show()
|
||
|
|
elseif (spellId == 353418 or spellId == 353417) then--Rive
|
||
|
|
self.vb.riveCount = self.vb.riveCount + 1
|
||
|
|
warnRive:Show(self.vb.riveCount)
|
||
|
|
elseif spellId == 348094 then
|
||
|
|
specWarnBansheeWail:Show()
|
||
|
|
specWarnBansheeWail:Play("scatter")
|
||
|
|
elseif spellId == 355540 then
|
||
|
|
specWarnRuin:Show()
|
||
|
|
specWarnRuin:Play("kickcast")
|
||
|
|
-- timerRuinCD:Start()
|
||
|
|
elseif spellId == 352271 then
|
||
|
|
self.vb.hauntingWavecount = self.vb.hauntingWavecount + 1
|
||
|
|
specWarnHauntingWave:Show(self.vb.hauntingWavecount)
|
||
|
|
specWarnHauntingWave:Play("watchwave")
|
||
|
|
-- timerHauntingWaveCD:Start()
|
||
|
|
elseif spellId == 351075 then
|
||
|
|
if not castsPerGUID[args.sourceGUID] then
|
||
|
|
castsPerGUID[args.sourceGUID] = 0
|
||
|
|
end
|
||
|
|
castsPerGUID[args.sourceGUID] = castsPerGUID[args.sourceGUID] + 1
|
||
|
|
if self:AntiSpam(3, 1) then--If multiple cast it at same time
|
||
|
|
warnUnstoppableForce:Show(castsPerGUID[args.sourceGUID])
|
||
|
|
end
|
||
|
|
-- elseif spellId == 351179 then
|
||
|
|
-- timerAbsorbingChargeCD:Start(18.3, args.sourceGUID)
|
||
|
|
|
||
|
|
elseif spellId == 351353 then
|
||
|
|
if not castsPerGUID[args.sourceGUID] then
|
||
|
|
castsPerGUID[args.sourceGUID] = 0
|
||
|
|
end
|
||
|
|
castsPerGUID[args.sourceGUID] = castsPerGUID[args.sourceGUID] + 1
|
||
|
|
warnSummonDecrepitOrbs:Show(castsPerGUID[args.sourceGUID])
|
||
|
|
elseif spellId == 356023 then
|
||
|
|
if not castsPerGUID[args.sourceGUID] then
|
||
|
|
castsPerGUID[args.sourceGUID] = 0
|
||
|
|
if self.vb.addIcon < 4 then--Only use up to 5 icons
|
||
|
|
self.vb.addIcon = 8
|
||
|
|
end
|
||
|
|
if self.Options.SetIconOnTerrorOrb then
|
||
|
|
self:ScanForMobs(args.sourceGUID, 2, self.vb.addIcon, 1, 0.2, 12, "SetIconOnTerrorOrb")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
castsPerGUID[args.sourceGUID] = castsPerGUID[args.sourceGUID] + 1
|
||
|
|
local count = castsPerGUID[args.sourceGUID]
|
||
|
|
if self:CheckInterruptFilter(args.sourceGUID, false, false) then
|
||
|
|
specWarnTerrorOrb:Show(args.sourceName, count)
|
||
|
|
if count == 1 then
|
||
|
|
specWarnTerrorOrb:Play("kick1r")
|
||
|
|
elseif count == 2 then
|
||
|
|
specWarnTerrorOrb:Play("kick2r")
|
||
|
|
elseif count == 3 then
|
||
|
|
specWarnTerrorOrb:Play("kick3r")
|
||
|
|
elseif count == 4 then
|
||
|
|
specWarnTerrorOrb:Play("kick4r")
|
||
|
|
elseif count == 5 then
|
||
|
|
specWarnTerrorOrb:Play("kick5r")
|
||
|
|
else
|
||
|
|
specWarnTerrorOrb:Play("kickcast")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif spellId == 354011 then
|
||
|
|
self.vb.baneArrowCount = self.vb.baneArrowCount + 1
|
||
|
|
local timer = allTimers[difficultyName][self.vb.phase][spellId][self.vb.baneArrowCount+1]
|
||
|
|
if timer then
|
||
|
|
timerBaneArrowsCD:Start(timer, self.vb.baneArrowCount+1)
|
||
|
|
end
|
||
|
|
elseif spellId == 353969 then
|
||
|
|
warnBansheesHeartseeker:Show()
|
||
|
|
elseif spellId == 354068 then
|
||
|
|
self.vb.bansheesFuryCount = self.vb.bansheesFuryCount + 1
|
||
|
|
-- timerBansheesFuryCD:Start()
|
||
|
|
for uId in DBM:GetGroupMembers() do
|
||
|
|
if DBM:UnitDebuff(uId, 353929, 357882) then
|
||
|
|
local name = DBM:GetUnitFullName(uId)
|
||
|
|
if self.Options.SpecWarn353929dispel then
|
||
|
|
specWarnBansheesBaneDispel:CombinedShow(0.3, name)
|
||
|
|
specWarnBansheesBaneDispel:ScheduleVoice(0.3, "helpdispel")
|
||
|
|
else
|
||
|
|
warnBansheesBane:CombinedShow(0.3, name)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif spellId == 353952 then
|
||
|
|
self.vb.bansheeScreamCount = self.vb.bansheeScreamCount + 1
|
||
|
|
local timer = allTimers[difficultyName][self.vb.phase][spellId][self.vb.bansheeScreamCount+1]
|
||
|
|
if timer then
|
||
|
|
timerBansheesScreamCD:Start(timer, self.vb.bansheeScreamCount+1)
|
||
|
|
end
|
||
|
|
elseif spellId == 353935 then
|
||
|
|
if self.vb.phase == 3 then
|
||
|
|
self.vb.shadowDaggerCount = self.vb.shadowDaggerCount + 1
|
||
|
|
local timer = allTimers[difficultyName][self.vb.phase][spellId][self.vb.shadowDaggerCount+1]
|
||
|
|
if timer then
|
||
|
|
timerShadowDaggerCD:Start(timer, self.vb.shadowDaggerCount+1)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif spellId == 354147 then
|
||
|
|
self.vb.razeCount = self.vb.razeCount + 1
|
||
|
|
specWarnRaze:Show(self.vb.razeCount)
|
||
|
|
specWarnRaze:Play("justrun")
|
||
|
|
-- timerRazeCD:Start(nil, self.vb.razeCount+1)
|
||
|
|
--TODO, maybe reset cast counts here for each platform, or another specific trigger
|
||
|
|
elseif spellId == 357102 then--Raid Portal: Oribos
|
||
|
|
warnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(3))
|
||
|
|
warnPhase:Play("pthree")
|
||
|
|
self:SetStage(3)
|
||
|
|
self.vb.baneArrowCount = 0
|
||
|
|
self.vb.shadowDaggerCount = 0
|
||
|
|
self.vb.bansheeScreamCount = 0
|
||
|
|
self.vb.bansheesFuryCount = 0
|
||
|
|
self.vb.veilofDarknessCount = 0--Used only once per platform but might as well count it
|
||
|
|
self.vb.wailingArrowCount = 0
|
||
|
|
self.vb.razeCount = 0
|
||
|
|
-- timerRuinCD:Stop()
|
||
|
|
-- timerHauntingWaveCD:Stop()
|
||
|
|
-- timerVeilofDarknessCD:Stop()
|
||
|
|
timerBaneArrowsCD:Start(19.6, 1)
|
||
|
|
timerShadowDaggerCD:Start(22.2, 1)
|
||
|
|
timerBansheesScreamCD:Start(27.8, 1)
|
||
|
|
timerWailingArrowCD:Start(49, 1)
|
||
|
|
timerVeilofDarknessCD:Start(46, 1)
|
||
|
|
timerBansheesFuryCD:Start(65.6, 1)
|
||
|
|
timerRazeCD:Start(72.6, 1)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 351178 then
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnLashingStrike:Show()
|
||
|
|
specWarnLashingStrike:Play("targetyou")
|
||
|
|
yellLashingStrike:Yell()
|
||
|
|
else
|
||
|
|
warnLashingStrike:Show(args.destName)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_AURA_APPLIED(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 347504 then
|
||
|
|
self.vb.winrunnerCount = self.vb.winrunnerCount + 1
|
||
|
|
specWarnWindrunner:Show(self.vb.winrunnerCount)
|
||
|
|
specWarnWindrunner:Play("specialsoon")
|
||
|
|
timerWindrunnerCD:Start(nil, self.vb.winrunnerCount+1)
|
||
|
|
elseif spellId == 347807 then
|
||
|
|
local amount = args.amount or 1
|
||
|
|
BarbedStacks[args.destName] = amount
|
||
|
|
if self.Options.InfoFrame then
|
||
|
|
DBM.InfoFrame:UpdateTable(BarbedStacks)
|
||
|
|
end
|
||
|
|
elseif spellId == 347670 or spellId == 353935 then
|
||
|
|
warnShadowDagger:CombinedShow(0.3, args.destName)
|
||
|
|
elseif spellId == 349458 then
|
||
|
|
warnDominationChains:CombinedShow(0.3, args.destName)
|
||
|
|
elseif spellId == 348064 then
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnWailingArrow:Show()
|
||
|
|
specWarnWailingArrow:Play("justrun")
|
||
|
|
else
|
||
|
|
specWarnWailingArrowTaunt:Show(args.destName)
|
||
|
|
specWarnWailingArrowTaunt:Play("tauntboss")
|
||
|
|
end
|
||
|
|
elseif spellId == 347607 then
|
||
|
|
local amount = args.amount or 1
|
||
|
|
-- if amount >= 3 then
|
||
|
|
-- if args:IsPlayer() then
|
||
|
|
-- specWarnBansheesMark:Show(amount)
|
||
|
|
-- specWarnBansheesMark:Play("stackhigh")
|
||
|
|
-- else
|
||
|
|
-- if not UnitIsDeadOrGhost("player") and not DBM:UnitDebuff("player", spellId) then
|
||
|
|
-- specWarnBansheesMarkTaunt:Show(args.destName)
|
||
|
|
-- specWarnBansheesMarkTaunt:Play("tauntboss")
|
||
|
|
-- else
|
||
|
|
-- warnBansheesMark:Show(args.destName, amount)
|
||
|
|
-- end
|
||
|
|
-- end
|
||
|
|
-- else
|
||
|
|
warnBansheesMark:Show(args.destName, amount)
|
||
|
|
-- end
|
||
|
|
elseif spellId == 350857 and self.vb.phase == 1 then
|
||
|
|
warnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(1.5))
|
||
|
|
warnPhase:Play("phasechange")
|
||
|
|
self:SetStage(1.5)--Intermission to phase 2
|
||
|
|
self.vb.dominationChainsCount = 0
|
||
|
|
self.vb.riveCount = 0
|
||
|
|
timerWindrunnerCD:Stop()
|
||
|
|
timerDominationChainsCD:Stop()
|
||
|
|
timerVeilofDarknessCD:Stop()
|
||
|
|
timerDominationChainsCD:Start(1.5, 1)--Practically right away
|
||
|
|
timerRiveCD:Start(11.2)--Init timer only, for when the spam begins
|
||
|
|
timerNextPhase:Start(61)
|
||
|
|
elseif spellId == 348146 and self.vb.phase < 2 then
|
||
|
|
warnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(2))
|
||
|
|
warnPhase:Play("ptwo")
|
||
|
|
self:SetStage(2)
|
||
|
|
self.vb.veilofDarknessCount = 0
|
||
|
|
self.vb.icecrownCast = 0
|
||
|
|
self.vb.hauntingWavecount = 0
|
||
|
|
timerDominationChainsCD:Stop()
|
||
|
|
timerNextPhase:Stop()
|
||
|
|
--Phase 2 timers a waste of time at this point since it was so buggy
|
||
|
|
-- timerRuinCD:Start(63.5)
|
||
|
|
-- timerHauntingWaveCD:Start(33.1)
|
||
|
|
-- timerVeilofDarknessCD:Start(3, 1)--Not in combat log in phase 2 and beyond so unless players fuck up mechanic can't get timer for it
|
||
|
|
elseif spellId == 351109 then
|
||
|
|
if self.Options.NPAuraOnEnflame then
|
||
|
|
DBM.Nameplate:Show(true, args.destGUID, spellId)
|
||
|
|
end
|
||
|
|
elseif spellId == 351117 or spellId == 357886 then
|
||
|
|
warnCrushingDread:CombinedShow(0.3, args.destName)
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnCrushingDread:Show()
|
||
|
|
specWarnCrushingDread:Play("runout")
|
||
|
|
yellCrushingDread:Yell()
|
||
|
|
end
|
||
|
|
elseif spellId == 351451 then
|
||
|
|
warnCurseofLthargy:combinedShow(0.3, args.destName)
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnCurseofLethargy:Show()
|
||
|
|
specWarnCurseofLethargy:Play("targetyou")
|
||
|
|
end
|
||
|
|
elseif spellId == 351672 then
|
||
|
|
local amount = args.amount or 1
|
||
|
|
if amount >= 12 and self:AntiSpam(4, 2) then
|
||
|
|
if self:IsTanking("player", "boss1", nil, true) then
|
||
|
|
specWarnFury:Show(amount)
|
||
|
|
specWarnFury:Play("changemt")
|
||
|
|
else
|
||
|
|
specWarnFuryOther:Show(args.destName)
|
||
|
|
specWarnFuryOther:Play("tauntboss")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif spellId == 353929 or spellId == 357882 then
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnBansheesBane:Show()
|
||
|
|
specWarnBansheesBane:Play("targetyou")
|
||
|
|
else
|
||
|
|
local uId = DBM:GetRaidUnitId(args.destName)
|
||
|
|
if self:IsTanking(uId) then
|
||
|
|
specWarnBansheesBaneTaunt:Show(args.destName)
|
||
|
|
specWarnBansheesBaneTaunt:Play("tauntboss")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif spellId == 357720 then
|
||
|
|
warnBansheesScream:CombinedShow(0.3, args.destName)
|
||
|
|
if args:IsPlayer() then
|
||
|
|
specWarnBansheeScream:Show()
|
||
|
|
specWarnBansheeScream:Play("scatter")
|
||
|
|
yellBansheeScream:Yell()
|
||
|
|
end
|
||
|
|
elseif spellId == 356986 then
|
||
|
|
self.vb.icecrownCast = self.vb.icecrownCast + 1
|
||
|
|
warnWindsofIcecrown:Show(self.vb.icecrownCast, args.destName)
|
||
|
|
timerWindsofIcecrown:Start()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
||
|
|
|
||
|
|
function mod:SPELL_AURA_REMOVED(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 347504 then
|
||
|
|
warnWindrunnerOver:Show()
|
||
|
|
elseif spellId == 347807 then
|
||
|
|
BarbedStacks[args.destName] = nil
|
||
|
|
if self.Options.InfoFrame then
|
||
|
|
DBM.InfoFrame:UpdateTable(BarbedStacks)
|
||
|
|
end
|
||
|
|
elseif spellId == 351109 then
|
||
|
|
if self.Options.NPAuraOnEnflame then
|
||
|
|
DBM.Nameplate:Hide(true, args.destGUID, spellId)
|
||
|
|
end
|
||
|
|
elseif spellId == 356986 then
|
||
|
|
timerWindsofIcecrown:Stop()
|
||
|
|
-- timerHauntingWaveCD:Start(15.6)
|
||
|
|
-- timerRuinCD:start(68.8)
|
||
|
|
-- elseif spellId == 348146 then
|
||
|
|
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_AURA_REMOVED_DOSE(args)
|
||
|
|
local spellId = args.spellId
|
||
|
|
if spellId == 347807 then
|
||
|
|
BarbedStacks[args.destName] = args.amount or 1
|
||
|
|
if self.Options.InfoFrame then
|
||
|
|
DBM.InfoFrame:UpdateTable(BarbedStacks)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--"<55.31 21:07:27> [CHAT_MSG_RAID_BOSS_EMOTE] |TInterface\\Icons\\Ability_Argus_DeathFog.blp:20|t %s begins to cast |cFFFF0000|Hspell:347704|h[Veil of Darkness]|h|r!#Sylvanas Windrunner#####0#0##0#30#nil#0#false#false#false#false", -- [1092]
|
||
|
|
--"<57.93 21:07:29> [CLEU] SPELL_CAST_START#Vehicle-0-2083-2450-4126-175732-00002FED6E#Sylvanas Windrunner##nil#347726#Veil of Darkness#nil#nil", -- [1151]
|
||
|
|
function mod:CHAT_MSG_RAID_BOSS_EMOTE(msg)
|
||
|
|
if msg:find("spell:347704") then--Faster than Combat log by 2.5 seconds in phase 1 and doesn't exist in combat log at all in phase 3 because reasons
|
||
|
|
self.vb.veilofDarknessCount = self.vb.veilofDarknessCount + 1
|
||
|
|
specWarnVeilofDarkness:Show(self.vb.veilofDarknessCount)
|
||
|
|
specWarnVeilofDarkness:Play("watchstep")
|
||
|
|
--Do nothing in phase 2 right now
|
||
|
|
--Phase 2 is a clusterfuck
|
||
|
|
--Phase 3 it's only cast once per platform so doesn't need timer start here either
|
||
|
|
if self.vb.phase == 1 then
|
||
|
|
timerVeilofDarknessCD:Start(48.8, self.vb.wailingArrowCount+1)
|
||
|
|
-- elseif self.vb.phase == 3 then
|
||
|
|
-- local timer = allTimers[difficultyName][self.vb.phase][347726][self.vb.veilofDarknessCount+1]
|
||
|
|
-- if timer then
|
||
|
|
-- timerVeilofDarknessCD:Start(timer, self.vb.wailingArrowCount+1)
|
||
|
|
-- end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--[[
|
||
|
|
|
||
|
|
function mod:UNIT_DIED(args)
|
||
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
||
|
|
if cid == 177289 then
|
||
|
|
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
|
||
|
|
if spellId == 340324 and destGUID == UnitGUID("player") and not playerDebuff and self:AntiSpam(2, 3) then
|
||
|
|
specWarnGTFO:Show(spellName)
|
||
|
|
specWarnGTFO:Play("watchfeet")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
|
||
|
|
|
||
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
|
||
|
|
if spellId == 342074 then
|
||
|
|
|
||
|
|
end
|
||
|
|
end
|
||
|
|
--]]
|