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.
361 lines
13 KiB
361 lines
13 KiB
local mod = DBM:NewMod(2443, "DBM-SanctumOfDomination", nil, 1193)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20210625004028")
|
|
mod:SetCreatureID(176523)
|
|
mod:SetEncounterID(2430)
|
|
mod:SetUsedIcons(1, 2, 3, 4, 5, 6)
|
|
mod:SetHotfixNoticeRev(20210624000000)--2021-06-24
|
|
mod:SetMinSyncRevision(20210513000000)
|
|
--mod.respawnTime = 29
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_CAST_START 357735",
|
|
"SPELL_CAST_SUCCESS 348508 355568 355778 352052 348456 355504 355534",
|
|
"SPELL_AURA_APPLIED 348508 355568 355778 355786 348456 355505 355525",
|
|
-- "SPELL_AURA_APPLIED_DOSE",
|
|
"SPELL_AURA_REMOVED 348508 355568 355778 355786 348456 355505 355525",
|
|
-- "SPELL_PERIODIC_DAMAGE",
|
|
-- "SPELL_PERIODIC_MISSED",
|
|
"UNIT_DIED",
|
|
"UNIT_SPELLCAST_SUCCEEDED boss1"
|
|
)
|
|
|
|
--TODO, verify infoframe usefulness
|
|
--TODO,
|
|
--https://ptr.wowhead.com/spells/uncategorized/name:spike?filter=21;2;90100
|
|
--[[
|
|
ability.id = 357735 and type = "begincast"
|
|
or (ability.id = 348508 or ability.id = 355568 or ability.id = 355778 or ability.id = 352052 or ability.id = 348456 or ability.id = 355504 or ability.id = 355534) and type = "cast"
|
|
or ability.id = 355525
|
|
or ability.id = 355505 and type = "applydebuff"
|
|
or (source.type = "NPC" and source.firstSeen = timestamp) or (target.type = "NPC" and target.firstSeen = timestamp)
|
|
--]]
|
|
local warnShadowsteelChains = mod:NewTargetNoFilterAnnounce(355505, 2)
|
|
local warnFlameclaspTrap = mod:NewTargetNoFilterAnnounce(348456, 2)
|
|
|
|
local specWarnReverberatingHammer = mod:NewSpecialWarningMoveAway(348508, nil, nil, nil, 1, 2)
|
|
local yellReverberatingHammer = mod:NewShortYell(348508)
|
|
local yellReverberatingHammerFades = mod:NewShortFadesYell(348508)
|
|
local specWarnReverberatingHammerTaunt = mod:NewSpecialWarningTaunt(348508, nil, nil, nil, 1, 2)
|
|
local specWarnCruciformAxe = mod:NewSpecialWarningMoveAway(355568, nil, nil, nil, 1, 2)
|
|
local yellCruciformAxe = mod:NewShortYell(355568)
|
|
local yellCruciformAxeFades = mod:NewShortFadesYell(355568)
|
|
local specWarnCruciformAxeTaunt = mod:NewSpecialWarningTaunt(355568, nil, nil, nil, 1, 2)--This might never target tanks, remove if it doesn't
|
|
local specWarnDualbladeScythe = mod:NewSpecialWarningMoveAway(355778, nil, nil, nil, 1, 2)
|
|
local yellDualbladeScythe = mod:NewShortYell(355778)
|
|
local yellDualbladeScytheFades = mod:NewShortFadesYell(355778)
|
|
local specWarnDualbladeScytheTaunt = mod:NewSpecialWarningTaunt(355778, nil, nil, nil, 1, 2)--This might never target tanks, remove if it doesn't
|
|
local specWarnFlameclaspTrap = mod:NewSpecialWarningMoveAway(348456, nil, nil, nil, 1, 2)
|
|
local yellFlameclaspTrap = mod:NewShortYell(348456)
|
|
local yellFlameclaspTrapFades = mod:NewShortFadesYell(348456)
|
|
local specWarnShadowsteelChains = mod:NewSpecialWarningYouPos(355505, nil, nil, nil, 1, 2)
|
|
local yellShadowsteelChains = mod:NewShortPosYell(355505)
|
|
local yellShadowsteelChainsFades = mod:NewIconFadesYell(355505)
|
|
--local specWarnExsanguinatingBite = mod:NewSpecialWarningDefensive(328857, nil, nil, nil, 1, 2)
|
|
--local specWarnGTFO = mod:NewSpecialWarningGTFO(340324, nil, nil, nil, 1, 8)
|
|
|
|
--mod:AddTimerLine(BOSS)
|
|
local timerReverberatingHammerCD = mod:NewCDTimer(32.8, 348508, nil, nil, nil, 5, nil, DBM_CORE_L.TANK_ICON)
|
|
local timerCruciformAxeCD = mod:NewCDTimer(17, 355568, nil, nil, nil, 3)
|
|
local timerDualbladeScytheCD = mod:NewCDTimer(32.8, 355778, nil, nil, nil, 3)
|
|
local timerSpikedBallsCD = mod:NewCDTimer(62.1, 352052, nil, nil, nil, 3)
|
|
local timerFlameclaspTrapCD = mod:NewCDTimer(40.2, 348456, nil, nil, nil, 3, nil, DBM_CORE_L.HEROIC_ICON)
|
|
local timerShadowsteelChainsCD = mod:NewCDTimer(30.1, 355504, nil, nil, nil, 3)
|
|
local timerForgeWeapon = mod:NewCastTimer(48, 355525, nil, nil, nil, 6)
|
|
|
|
--local berserkTimer = mod:NewBerserkTimer(600)
|
|
|
|
--mod:AddRangeFrameOption("8")
|
|
mod:AddInfoFrameOption(355786, true)
|
|
mod:AddSetIconOption("SetIconOnChains", 355505, true, false, {1, 2, 3})
|
|
mod:AddNamePlateOption("NPAuraOnFinalScream", 357735)
|
|
|
|
mod.vb.ChainsIcon = 1
|
|
|
|
local debuffedPlayers = {}
|
|
|
|
local updateInfoFrame
|
|
do
|
|
local twipe, tsort, mfloor = table.wipe, table.sort, math.floor
|
|
local lines = {}
|
|
local tempLines = {}
|
|
local tempLinesSorted = {}
|
|
local sortedLines = {}
|
|
local function sortFuncDesc(a, b) return tempLines[a] > tempLines[b] end
|
|
local function addLine(key, value)
|
|
-- sort by insertion order
|
|
lines[key] = value
|
|
sortedLines[#sortedLines + 1] = key
|
|
end
|
|
updateInfoFrame = function()
|
|
twipe(lines)
|
|
twipe(tempLines)
|
|
twipe(tempLinesSorted)
|
|
twipe(sortedLines)
|
|
--Boss Powers first (Change if weapons or other parts don't have power)
|
|
for i = 1, 5 do
|
|
local uId = "boss"..i
|
|
--Primary Power
|
|
local currentPower, maxPower = UnitPower(uId), UnitPowerMax(uId)
|
|
if maxPower and maxPower ~= 0 then
|
|
local adjustedPower = currentPower / maxPower * 100
|
|
if adjustedPower >= 1 and adjustedPower ~= 100 then--Filter 100 power, to basically eliminate cced Adds
|
|
addLine(UnitName(uId), currentPower)
|
|
end
|
|
end
|
|
end
|
|
addLine(" ", " ")--Insert a blank entry to split the two debuffs
|
|
--Debuffed players (UGLY code)
|
|
if #debuffedPlayers > 0 then
|
|
for i=1, #debuffedPlayers do
|
|
local name = debuffedPlayers[i]
|
|
local uId = DBM:GetRaidUnitId(name)
|
|
local spellName, _, _, _, _, expires = DBM:UnitDebuff(uId, 355786)
|
|
if expires then
|
|
local unitName = DBM:GetUnitFullName(uId)
|
|
local debuffTime = expires - GetTime()
|
|
tempLines[unitName] = mfloor(debuffTime)
|
|
tempLinesSorted[#tempLinesSorted + 1] = unitName
|
|
end
|
|
end
|
|
--Sort debuffs by longeset remaining then inject into regular table
|
|
tsort(tempLinesSorted, sortFuncDesc)
|
|
for _, name in ipairs(tempLinesSorted) do
|
|
addLine(name, tempLines[name])
|
|
end
|
|
end
|
|
return lines, sortedLines
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatStart(delay)
|
|
self:SetStage(1)
|
|
self.vb.ChainsIcon = 1
|
|
table.wipe(debuffedPlayers)
|
|
timerShadowsteelChainsCD:Start(8.1-delay)
|
|
if self:IsMythic() then
|
|
timerCruciformAxeCD:Start(15-delay)--Axe instead of hammer
|
|
timerSpikedBallsCD:Start(26.4-delay)
|
|
timerFlameclaspTrapCD:Start(42.2-delay)
|
|
else
|
|
timerReverberatingHammerCD:Start(16-delay)
|
|
timerSpikedBallsCD:Start(32.2-delay)
|
|
if self:IsHeroic() then
|
|
timerFlameclaspTrapCD:Start(48.2-delay)
|
|
end
|
|
end
|
|
-- berserkTimer:Start(-delay)
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:SetHeader(DBM:GetSpellInfo(355786))
|
|
DBM.InfoFrame:Show(20, "function", updateInfoFrame, false, false)
|
|
end
|
|
if self.Options.NPAuraOnFinalScream 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.NPAuraOnFinalScream then
|
|
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 357735 then
|
|
if self.Options.NPAuraOnFinalScream then
|
|
DBM.Nameplate:Show(true, args.sourceGUID, spellId, nil, 5)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
local spellId = args.spellId
|
|
if spellId == 348508 then
|
|
timerReverberatingHammerCD:Start()
|
|
elseif spellId == 355568 then
|
|
timerCruciformAxeCD:Start()
|
|
elseif spellId == 355778 then
|
|
timerDualbladeScytheCD:Start()
|
|
elseif spellId == 352052 then
|
|
DBM:AddMsg("Spiked Balls added to combat log, please report to DBM author")
|
|
elseif spellId == 348456 then
|
|
timerFlameclaspTrapCD:Start(self:IsMythic() and 48.2 or 40.2)--Might just need more data
|
|
elseif spellId == 355504 then
|
|
DBM:AddMsg("Shadowsteel Chains added to combat log, please report to DBM author")
|
|
elseif spellId == 355534 then--Shadowsteel Ember
|
|
timerReverberatingHammerCD:Stop()
|
|
timerCruciformAxeCD:Stop()
|
|
timerDualbladeScytheCD:Stop()
|
|
timerSpikedBallsCD:Stop()
|
|
timerFlameclaspTrapCD:Stop()
|
|
timerShadowsteelChainsCD:Stop()
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 355505 then
|
|
local icon = self.vb.ChainsIcon
|
|
if self.Options.SetIconOnChains then
|
|
self:SetIcon(args.destName, icon)
|
|
end
|
|
if args:IsPlayer() then
|
|
specWarnShadowsteelChains:Show(self:IconNumToTexture(icon))
|
|
specWarnShadowsteelChains:Play("mm"..icon)
|
|
yellShadowsteelChains:Yell(icon, icon)
|
|
yellShadowsteelChainsFades:Countdown(spellId, nil, icon)
|
|
end
|
|
warnShadowsteelChains:CombinedShow(0.5, args.destName)
|
|
self.vb.ChainsIcon = self.vb.ChainsIcon + 1
|
|
elseif spellId == 355786 then
|
|
if not tContains(debuffedPlayers, args.destName) then
|
|
table.insert(debuffedPlayers, args.destName)
|
|
end
|
|
elseif spellId == 355525 then
|
|
timerForgeWeapon:Start()
|
|
elseif spellId == 348508 then
|
|
if args:IsPlayer() then
|
|
specWarnReverberatingHammer:Show()
|
|
specWarnReverberatingHammer:Play("runout")
|
|
yellReverberatingHammer:Yell()
|
|
yellReverberatingHammerFades:Countdown(spellId)
|
|
else
|
|
specWarnReverberatingHammerTaunt:Show(args.destName)
|
|
specWarnReverberatingHammerTaunt:Play("tauntboss")
|
|
end
|
|
elseif spellId == 355568 then
|
|
if args:IsPlayer() then
|
|
specWarnCruciformAxe:Show()
|
|
specWarnCruciformAxe:Play("runout")
|
|
yellCruciformAxe:Yell()
|
|
yellCruciformAxeFades:Countdown(spellId)
|
|
else
|
|
specWarnCruciformAxeTaunt:Show(args.destName)
|
|
specWarnCruciformAxeTaunt:Play("tauntboss")
|
|
end
|
|
elseif spellId == 355778 then
|
|
if args:IsPlayer() then
|
|
specWarnDualbladeScythe:Show()
|
|
specWarnDualbladeScythe:Play("runout")
|
|
yellDualbladeScythe:Yell()
|
|
yellDualbladeScytheFades:Countdown(spellId)
|
|
else
|
|
specWarnDualbladeScytheTaunt:Show(args.destName)
|
|
specWarnDualbladeScytheTaunt:Play("tauntboss")
|
|
end
|
|
elseif spellId == 348456 then
|
|
if args:IsPlayer() then
|
|
specWarnFlameclaspTrap:Show()
|
|
specWarnFlameclaspTrap:Play("runout")
|
|
yellFlameclaspTrap:Yell()
|
|
yellFlameclaspTrapFades:Countdown(spellId)
|
|
end
|
|
end
|
|
end
|
|
--mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 348508 then
|
|
if args:IsPlayer() then
|
|
yellReverberatingHammerFades:Cancel()
|
|
end
|
|
elseif spellId == 355568 then
|
|
if args:IsPlayer() then
|
|
yellCruciformAxeFades:Cancel()
|
|
end
|
|
elseif spellId == 355778 then
|
|
if args:IsPlayer() then
|
|
yellDualbladeScytheFades:Cancel()
|
|
end
|
|
elseif spellId == 355786 then
|
|
tDeleteItem(debuffedPlayers, args.destName)
|
|
elseif spellId == 348456 then
|
|
if args:IsPlayer() then
|
|
yellFlameclaspTrapFades:Cancel()
|
|
end
|
|
elseif spellId == 355525 then--Forge Weapon ending, boss returning
|
|
timerForgeWeapon:Stop()
|
|
self:SetStage(0)
|
|
if self.vb.phase == 2 then
|
|
if self:IsMythic() then
|
|
timerShadowsteelChainsCD:Start(15)
|
|
timerReverberatingHammerCD:Start(23.6)--Hammer on mythic
|
|
timerSpikedBallsCD:Start(7)
|
|
timerFlameclaspTrapCD:Start(52.8)
|
|
else
|
|
timerShadowsteelChainsCD:Start(15)
|
|
timerCruciformAxeCD:Start(24)--Axe on heroic (and others?)
|
|
timerSpikedBallsCD:Start(40)
|
|
if self:IsHeroic() then
|
|
timerFlameclaspTrapCD:Start(55.8)
|
|
end
|
|
end
|
|
else--phase 3
|
|
if self:IsMythic() then
|
|
timerShadowsteelChainsCD:Start(15)
|
|
timerDualbladeScytheCD:Start(24)
|
|
timerSpikedBallsCD:Start(7)
|
|
timerFlameclaspTrapCD:Start(52)
|
|
else
|
|
timerShadowsteelChainsCD:Start(15)
|
|
timerDualbladeScytheCD:Start(24)
|
|
timerSpikedBallsCD:Start(40)
|
|
if self:IsHeroic() then
|
|
timerFlameclaspTrapCD:Start(55.8)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 179847 then--Shadowsteel Ember
|
|
if self.Options.NPAuraOnFinalScream then
|
|
DBM.Nameplate:Hide(true, args.destGUID, 357735)
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
|
|
if spellId == 340324 and destGUID == UnitGUID("player") and not playerDebuff and self:AntiSpam(2, 2) then
|
|
specWarnGTFO:Show(spellName)
|
|
specWarnGTFO:Play("watchfeet")
|
|
end
|
|
end
|
|
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
|
|
--]]
|
|
|
|
--Faster than combat log or not in combat log events
|
|
--"<67.84 22:36:16> [UNIT_SPELLCAST_SUCCEEDED] Painsmith Raznal(Andybruwu) -[DNT] Upstairs- [[boss1:Cast-3-2012-2450-9254-355555-003A1D8DC1:355555]]", -- [1092]
|
|
--"<70.30 22:36:19> [CLEU] SPELL_AURA_APPLIED#Creature-0-2012-2450-9254-176523-00001D8D02#Painsmith Raznal#Creature-0-2012-2450-9254-176523-00001D8D02#Painsmith Raznal#355525#Forge Weapon#BUFF#nil", -- [1138]
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
|
|
if spellId == 352052 then--Spiked Balls
|
|
timerSpikedBallsCD:Start(self:IsMythic() and 48.7 or 62.1)--Can be delayed by other casts?
|
|
--TODO, more stage 2 mythic data, first one is 57.2 consistently, but what about rest?
|
|
elseif spellId == 355504 then--Shadowsteel Chains
|
|
self.vb.ChainsIcon = 1
|
|
timerShadowsteelChainsCD:Start()
|
|
elseif spellId == 355555 then--Upstairs (Boss leaving, faster to stop timers than Forge Weapon which happens 2 sec later)
|
|
timerReverberatingHammerCD:Stop()
|
|
timerCruciformAxeCD:Stop()
|
|
timerDualbladeScytheCD:Stop()
|
|
timerSpikedBallsCD:Stop()
|
|
timerFlameclaspTrapCD:Stop()
|
|
timerShadowsteelChainsCD:Stop()
|
|
-- elseif spellId == 356416 then--Weapon Picker (global picker)
|
|
|
|
end
|
|
end
|
|
|