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.
670 lines
28 KiB
670 lines
28 KiB
local mod = DBM:NewMod(1984, "DBM-AntorusBurningThrone", nil, 946)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20220908201401")
|
|
mod:SetCreatureID(121975)
|
|
mod:SetEncounterID(2063)
|
|
mod:SetUsedIcons(1, 2, 3, 4, 5)
|
|
mod:SetHotfixNoticeRev(16964)
|
|
mod.respawnTime = 25
|
|
|
|
mod:RegisterCombat("combat")
|
|
|
|
mod:RegisterEventsInCombat(
|
|
"SPELL_CAST_START 244693 245458 245463 245301 255058 255061 255059",
|
|
"SPELL_CAST_SUCCESS 247079 244033",
|
|
"SPELL_AURA_APPLIED 245990 245994 244894 244903 247091 254452",
|
|
"SPELL_AURA_APPLIED_DOSE 245990",
|
|
"SPELL_AURA_REMOVED 244894 244903 247091 254452",
|
|
"UNIT_DIED",
|
|
"UNIT_SPELLCAST_SUCCEEDED boss1"
|
|
)
|
|
|
|
--[[
|
|
(ability.id = 244693 or ability.id = 245458 or ability.id = 245463 or ability.id = 245301 or ability.id = 255058 or ability.id = 255061 or ability.id = 255059) and type = "begincast"
|
|
or ability.id = 244894 and (type = "applybuff" or type = "removebuff")
|
|
or (ability.id = 245994 or ability.id = 254452) and type = "applydebuff"
|
|
--]]
|
|
local warnPhase = mod:NewPhaseChangeAnnounce(2, nil, nil, nil, nil, nil, 2)
|
|
|
|
local berserkTimer = mod:NewBerserkTimer(600)
|
|
--Stage One: Wrath of Aggramar
|
|
local warnTaeshalachReach = mod:NewStackAnnounce(245990, 2, nil, "Tank")
|
|
local warnScorchingBlaze = mod:NewTargetAnnounce(245994, 2)
|
|
local warnRavenousBlaze = mod:NewTargetAnnounce(254452, 2)
|
|
local warnRavenousBlazeCount = mod:NewCountAnnounce(254452, 4)
|
|
local warnTaeshalachTech = mod:NewCountAnnounce(244688, 3)
|
|
|
|
local specWarnTaeshalachReach = mod:NewSpecialWarningStack(245990, nil, 8, nil, nil, 1, 6)
|
|
local specWarnTaeshalachReachOther = mod:NewSpecialWarningTaunt(245990, nil, nil, nil, 1, 2)
|
|
local specWarnScorchingBlaze = mod:NewSpecialWarningMoveAway(245994, nil, nil, nil, 1, 2)
|
|
local yellScorchingBlaze = mod:NewYell(245994)
|
|
local specWarnRavenousBlaze = mod:NewSpecialWarningMoveAway(254452, nil, nil, nil, 1, 2)
|
|
local yellRavenousBlaze = mod:NewPosYell(254452, DBM_CORE_L.AUTO_YELL_CUSTOM_POSITION)
|
|
local specWarnWakeofFlame = mod:NewSpecialWarningDodge(244693, nil, nil, nil, 2, 2)
|
|
local yellWakeofFlame = mod:NewYell(244693)
|
|
local specWarnFoeBreakerTaunt = mod:NewSpecialWarningTaunt(245458, nil, nil, nil, 3, 2)
|
|
local specWarnFoeBreakerDefensive = mod:NewSpecialWarningDefensive(245458, nil, nil, nil, 3, 2)
|
|
local specWarnFlameRend = mod:NewSpecialWarningCount(245463, nil, nil, nil, 1, 2)
|
|
local specWarnFlameRendTaunt = mod:NewSpecialWarningTaunt(245463, nil, nil, nil, 1, 2)
|
|
local specWarnSearingTempest = mod:NewSpecialWarningRun(245301, nil, nil, nil, 4, 2)
|
|
|
|
local timerTaeshalachTechCD = mod:NewNextCountTimer(61, 244688, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON, nil, 1, 4)
|
|
local timerFoeBreakerCD = mod:NewNextCountTimer(6.1, 245458, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
|
|
local timerFlameRendCD = mod:NewNextCountTimer(6.1, 245463, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
|
|
local timerTempestCD = mod:NewNextTimer(6.1, 245301, nil, nil, nil, 2, nil, DBM_COMMON_L.DEADLY_ICON)
|
|
local timerScorchingBlazeCD = mod:NewCDTimer(6.5, 245994, nil, nil, nil, 3)--6.5-8
|
|
local timerRavenousBlazeCD = mod:NewCDTimer(22.2, 254452, nil, nil, nil, 3, nil, DBM_COMMON_L.HEROIC_ICON)
|
|
local timerWakeofFlameCD = mod:NewCDTimer(24.3, 244693, nil, nil, nil, 3, nil, nil, nil, not mod:IsTank() and 3, 4)
|
|
|
|
mod:AddSetIconOption("SetIconOnBlaze2", 254452, false)--Both off by default, both conflit with one another
|
|
mod:AddInfoFrameOption(244688, true)
|
|
mod:AddRangeFrameOption("6", nil, "Ranged")
|
|
mod:AddBoolOption("ignoreThreeTank", true)
|
|
--Stage Two: Champion of Sargeras
|
|
local specWarnFlare = mod:NewSpecialWarningDodge(245983, "-Melee", nil, 2, 2, 2)
|
|
|
|
local timerFlareCD = mod:NewCDTimer(15, 245983, nil, "-Melee", 2, 3, nil, nil, nil, 2, 4)
|
|
|
|
mod:AddSetIconOption("SetIconOnAdds", 244903, false, true)--Both off by default, both conflit with one another
|
|
mod:AddNamePlateOption("NPAuraOnPresence", 244903)
|
|
mod:AddBoolOption("skipMarked", true)
|
|
|
|
mod.vb.phase = 1
|
|
mod.vb.techCount = 0
|
|
mod.vb.foeCount = 0
|
|
mod.vb.rendCount = 0
|
|
mod.vb.wakeOfFlameCount = 0
|
|
mod.vb.blazeIcon = 1
|
|
mod.vb.techActive = false
|
|
mod.vb.firstCombo = nil
|
|
mod.vb.secondCombo = nil
|
|
mod.vb.comboCount = 0
|
|
--mod.vb.incompleteCombo = false
|
|
local comboDebug = {}
|
|
local comboDebugCounter = 0
|
|
local unitTracked = {}
|
|
|
|
--local comboUsed = {
|
|
-- [1] = false,--L.Foe, L.Tempest, L.Rend, L.Foe, L.Rend
|
|
-- [2] = false,--L.Foe, L.Rend, L.Tempest, L.Foe, L.Rend
|
|
-- [3] = false,--L.Rend, L.Tempest, L.Foe, L.Foe, L.Rend
|
|
-- [4] = false--L.Rend, L.Foe, L.Foe, L.Tempest, L.Rend
|
|
--}
|
|
|
|
local updateInfoFrame
|
|
do
|
|
local lines = {}
|
|
local sortedLines = {}
|
|
local function addLine(key, value)
|
|
-- sort by insertion order
|
|
lines[key] = value
|
|
sortedLines[#sortedLines + 1] = key
|
|
end
|
|
updateInfoFrame = function()
|
|
table.wipe(lines)
|
|
table.wipe(sortedLines)
|
|
if mod:IsMythic() then
|
|
if mod.vb.comboCount == 0 then
|
|
--Filler
|
|
elseif mod.vb.comboCount == 1 and mod.vb.firstCombo then
|
|
if mod.vb.firstCombo == "Foe" then--L.Foe, L.Tempest, L.Rend, L.Foe, L.Rend or L.Foe, L.Rend, L.Tempest, L.Foe, L.Rend
|
|
addLine(L.Current, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe)
|
|
--[[if comboUsed[1] then--It's L.Foe, L.Rend, L.Tempest, L.Foe, L.Rend (combo 2) for sure
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend)
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
elseif comboUsed[2] then--It's L.Foe, L.Tempest, L.Rend, L.Foe, L.Rend (Combo 1) for sure
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend)--]]
|
|
--else--Could be either one
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."/"..DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."/"..DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
--end
|
|
addLine(mod.vb.comboCount+3, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
elseif mod.vb.firstCombo == "Rend" then----L.Rend, L.Tempest, L.Foe, L.Foe, L.Rend or L.Rend, L.Foe, L.Foe, L.Tempest, L.Rend
|
|
addLine(L.Current, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend)
|
|
--[[if comboUsed[3] then--It's L.Rend, L.Foe, L.Foe, L.Tempest, L.Rend (combo 4) for sure
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe)
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
addLine(mod.vb.comboCount+3, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
elseif comboUsed[4] then--It's L.Rend, L.Tempest, L.Foe, L.Foe, L.Rend (combo 3) for sure
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe)
|
|
addLine(mod.vb.comboCount+3, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")--]]
|
|
--else
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."/"..DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."/"..DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
addLine(mod.vb.comboCount+3, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)/"..DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
--end
|
|
end
|
|
addLine(mod.vb.comboCount+4, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
elseif mod.vb.comboCount == 2 and mod.vb.secondCombo then
|
|
if mod.vb.secondCombo == "Tempest" then
|
|
addLine(L.Current, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
if mod.vb.firstCombo == "Foe" then--L.Foe, L.Tempest, L.Rend, L.Foe, L.Rend
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend)
|
|
--comboUsed[1] = true
|
|
comboDebugCounter = comboDebugCounter + 1
|
|
comboDebug[comboDebugCounter] = L.Foe..", "..L.Tempest..", "..L.Rend..", "..L.Foe..", "..L.Rend
|
|
elseif mod.vb.firstCombo == "Rend" then--L.Rend, L.Tempest, L.Foe, L.Foe, L.Rend
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe)
|
|
--comboUsed[3] = true
|
|
comboDebugCounter = comboDebugCounter + 1
|
|
comboDebug[comboDebugCounter] = L.Rend..", "..L.Tempest..", "..L.Foe..", "..L.Foe..", "..L.Rend
|
|
end
|
|
--Same in both combos
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
elseif mod.vb.secondCombo == "Foe" then--L.Rend, L.Foe, L.Foe, L.Tempest, L.Rend
|
|
addLine(L.Current, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe)
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
--comboUsed[4] = true
|
|
comboDebugCounter = comboDebugCounter + 1
|
|
comboDebug[comboDebugCounter] = L.Rend..", "..L.Foe..", "..L.Foe..", "..L.Tempest..", "..L.Rend
|
|
elseif mod.vb.secondCombo == "Rend" then--L.Foe, L.Rend, L.Tempest, L.Foe, L.Rend
|
|
addLine(L.Current, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend)
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
--comboUsed[2] = true
|
|
comboDebugCounter = comboDebugCounter + 1
|
|
comboDebug[comboDebugCounter] = L.Foe..", "..L.Rend..", "..L.Tempest..", "..L.Foe..", "..L.Rend
|
|
end
|
|
--Rend always last
|
|
addLine(mod.vb.comboCount+3, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
elseif mod.vb.comboCount == 3 and mod.vb.secondCombo then
|
|
if mod.vb.secondCombo == "Tempest" then
|
|
if mod.vb.firstCombo == "Foe" then--L.Foe, L.Tempest, L.Rend, L.Foe, L.Rend
|
|
addLine(L.Current, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend)
|
|
else--L.Rend, L.Tempest, L.Foe, L.Foe, L.Rend
|
|
addLine(L.Current, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe)
|
|
end
|
|
--Same in both combos
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
elseif mod.vb.secondCombo == "Foe" then--L.Rend, L.Foe, L.Foe, L.Tempest, L.Rend
|
|
addLine(L.Current, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
elseif mod.vb.secondCombo == "Rend" then--L.Foe, L.Rend, L.Tempest, L.Foe, L.Rend
|
|
addLine(L.Current, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
end
|
|
elseif mod.vb.comboCount == 4 then
|
|
if mod.vb.secondCombo == "Tempest" then
|
|
--Same in both combos
|
|
addLine(L.Current, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
elseif mod.vb.secondCombo == "Foe" then--L.Rend, L.Foe, L.Foe, L.Tempest, L.Rend
|
|
addLine(L.Current, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
elseif mod.vb.secondCombo == "Rend" then--L.Foe, L.Rend, L.Tempest, L.Foe, L.Rend
|
|
addLine(L.Current, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
end
|
|
--rend always last
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
else
|
|
addLine(L.Current, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
end
|
|
else--Not Mythic
|
|
if mod:IsLFR() then
|
|
if mod.vb.comboCount == 0 then
|
|
--Filler
|
|
elseif mod.vb.comboCount == 1 then
|
|
addLine(L.Current, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(1)")
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(3)")
|
|
addLine(mod.vb.comboCount+3, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(4)")
|
|
addLine(mod.vb.comboCount+4, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
elseif mod.vb.comboCount == 2 then
|
|
addLine(L.Current, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(3)")
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(4)")
|
|
addLine(mod.vb.comboCount+3, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
elseif mod.vb.comboCount == 3 then
|
|
addLine(L.Current, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(3)")
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(4)")
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
elseif mod.vb.comboCount == 4 then
|
|
addLine(L.Current, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(4)")
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
else
|
|
addLine(L.Current, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
end
|
|
else
|
|
if mod.vb.comboCount == 0 then
|
|
--Filler
|
|
elseif mod.vb.comboCount == 1 then
|
|
addLine(L.Current, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(1)")
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend)
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
addLine(mod.vb.comboCount+3, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
addLine(mod.vb.comboCount+4, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
elseif mod.vb.comboCount == 2 then
|
|
addLine(L.Current, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend)
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
addLine(mod.vb.comboCount+3, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
elseif mod.vb.comboCount == 3 then
|
|
addLine(L.Current, DBM_COMMON_L.TANK_ICON_SMALL..L.Foe.."(2)")
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
addLine(mod.vb.comboCount+2, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
elseif mod.vb.comboCount == 4 then
|
|
addLine(L.Current, DBM_COMMON_L.IMPORTANT_ICON_SMALL..L.Rend.."(2)")
|
|
addLine(mod.vb.comboCount+1, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
else
|
|
addLine(L.Current, DBM_COMMON_L.DEADLY_ICON_SMALL..L.Tempest)
|
|
end
|
|
end
|
|
end
|
|
return lines, sortedLines
|
|
end
|
|
end
|
|
|
|
function mod:WakeTarget(targetname, uId)
|
|
if not targetname then return end
|
|
if targetname == UnitName("player") then
|
|
yellWakeofFlame:Yell()
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatStart(delay)
|
|
self.vb.phase = 1
|
|
self.vb.techCount = 0
|
|
self.vb.foeCount = 0
|
|
self.vb.rendCount = 0
|
|
self.vb.wakeOfFlameCount = 0
|
|
self.vb.blazeIcon = 1
|
|
self.vb.techActive = false
|
|
--self.vb.incompleteCombo = false
|
|
table.wipe(unitTracked)
|
|
if self:IsMythic() then
|
|
--comboUsed[1] = false
|
|
--comboUsed[2] = false
|
|
--comboUsed[3] = false
|
|
--comboUsed[4] = false
|
|
timerRavenousBlazeCD:Start(4-delay)
|
|
timerWakeofFlameCD:Start(10.7-delay)--Health based?
|
|
timerTaeshalachTechCD:Start(14.3-delay, 1)--Health based?
|
|
berserkTimer:Start(540-delay)
|
|
table.wipe(comboDebug)
|
|
comboDebugCounter = 0
|
|
else
|
|
timerScorchingBlazeCD:Start(4.8-delay)
|
|
timerWakeofFlameCD:Start(5.1-delay)
|
|
timerTaeshalachTechCD:Start(35-delay, 1)
|
|
end
|
|
--Everyone should lose spread except tanks which should stay stacked. Maybe melee are safe too?
|
|
if self.Options.RangeFrame and not self:IsTank() then
|
|
DBM.RangeCheck:Show(6)
|
|
end
|
|
if self.Options.NPAuraOnPresence then
|
|
DBM:FireEvent("BossMod_EnableHostileNameplates")
|
|
self:RegisterOnUpdateHandler(function(self)
|
|
for i = 1, 40 do
|
|
local UnitID = "nameplate"..i
|
|
local GUID = UnitGUID(UnitID)
|
|
local cid = self:GetCIDFromGUID(GUID)
|
|
if cid == 122532 then
|
|
local unitPower = UnitPower(UnitID)
|
|
if not unitTracked[GUID] then unitTracked[GUID] = "None" end
|
|
if (unitPower < 35) then
|
|
if unitTracked[GUID] ~= "Green" then
|
|
unitTracked[GUID] = "Green"
|
|
DBM.Nameplate:Show(true, GUID, 244912, 463281)
|
|
end
|
|
elseif (unitPower < 70) then
|
|
if unitTracked[GUID] ~= "Yellow" then
|
|
unitTracked[GUID] = "Yellow"
|
|
DBM.Nameplate:Hide(true, GUID, 244912, 463281)
|
|
DBM.Nameplate:Show(true, GUID, 244912, 460954)
|
|
end
|
|
elseif (unitPower < 90) then
|
|
if unitTracked[GUID] ~= "Red" then
|
|
unitTracked[GUID] = "Red"
|
|
DBM.Nameplate:Hide(true, GUID, 244912, 460954)
|
|
DBM.Nameplate:Show(true, GUID, 244912, 463282)
|
|
end
|
|
elseif (unitPower < 100) then
|
|
if unitTracked[GUID] ~= "Critical" then
|
|
unitTracked[GUID] = "Critical"
|
|
DBM.Nameplate:Hide(true, GUID, 244912, 463282)
|
|
DBM.Nameplate:Show(true, GUID, 244912, 1029718)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end, 1)
|
|
end
|
|
end
|
|
|
|
function mod:OnCombatEnd()
|
|
if self.Options.RangeFrame then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Hide()
|
|
end
|
|
if self.Options.NPAuraOnPresence then
|
|
DBM.Nameplate:Hide(true, nil, nil, nil, true, true)
|
|
end
|
|
if DBM.Options.DebugMode then
|
|
for i, v in ipairs(comboDebug) do
|
|
DBM:AddMsg(v)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 244693 and self:AntiSpam(4, 1) then--Antispam because boss recasts itif target dies while casting
|
|
self.vb.wakeOfFlameCount = self.vb.wakeOfFlameCount + 1
|
|
specWarnWakeofFlame:Show()
|
|
specWarnWakeofFlame:Play("watchwave")
|
|
local techTimer = timerTaeshalachTechCD:GetRemaining(self.vb.techCount+1)
|
|
if techTimer == 0 or techTimer > 24 then
|
|
timerWakeofFlameCD:Start()
|
|
end
|
|
self:BossTargetScanner(args.sourceGUID, "WakeTarget", 0.1, 12, true, nil, nil, nil, true)
|
|
elseif spellId == 245458 or spellId == 255059 then
|
|
self.vb.comboCount = self.vb.comboCount + 1
|
|
if self:IsMythic() then
|
|
if not self.vb.firstCombo then
|
|
self.vb.firstCombo = "Foe"
|
|
elseif not self.vb.secondCombo then
|
|
self.vb.secondCombo = "Foe"
|
|
end
|
|
end
|
|
self.vb.foeCount = self.vb.foeCount + 1
|
|
if self:IsTank() then
|
|
if self:IsTanking("player", "boss1", nil, true) then
|
|
specWarnFoeBreakerDefensive:Show()
|
|
specWarnFoeBreakerDefensive:Play("defensive")
|
|
elseif (self.vb.foeCount == 2) and not DBM:UnitDebuff("player", 245458, 255059) then
|
|
if self.Options.ignoreThreeTank and self:GetNumAliveTanks() >= 3 then return end
|
|
if self:AntiSpam(2, 6) then--Second cast and you didn't take first and didn't get a flame rend taunt warning in last 2 seconds
|
|
specWarnFoeBreakerTaunt:Show(BOSS)
|
|
specWarnFoeBreakerTaunt:Play("tauntboss")
|
|
end
|
|
end
|
|
end
|
|
if self.vb.foeCount == 1 and not self:IsMythic() then
|
|
if self:IsEasy() then
|
|
timerFoeBreakerCD:Start(10, 2)
|
|
else
|
|
timerFoeBreakerCD:Start(7.5, 2)
|
|
end
|
|
end
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Update()
|
|
end
|
|
elseif spellId == 245463 or spellId == 255058 then
|
|
self.vb.comboCount = self.vb.comboCount + 1
|
|
if self:IsMythic() then
|
|
if not self.vb.firstCombo then
|
|
self.vb.firstCombo = "Rend"
|
|
elseif not self.vb.secondCombo then
|
|
self.vb.secondCombo = "Rend"
|
|
end
|
|
end
|
|
self.vb.rendCount = self.vb.rendCount + 1
|
|
specWarnFlameRend:Show(self.vb.rendCount)
|
|
if spellId == 255058 then--Empowered/Mythic Version
|
|
if self.vb.rendCount == 1 then
|
|
specWarnFlameRend:Play("shareone")
|
|
else
|
|
specWarnFlameRend:Play("sharetwo")
|
|
end
|
|
else
|
|
specWarnFlameRend:Play("gathershare")
|
|
end
|
|
if self.vb.rendCount == 1 and not self:IsMythic() and not self:IsLFR() then
|
|
if self:IsNormal() then
|
|
timerFlameRendCD:Start(10, 2)
|
|
else
|
|
timerFlameRendCD:Start(7.5, 2)
|
|
end
|
|
end
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Update()
|
|
end
|
|
elseif spellId == 245301 or spellId == 255061 then
|
|
self.vb.comboCount = self.vb.comboCount + 1
|
|
if self:IsMythic() then
|
|
if not self.vb.secondCombo then
|
|
self.vb.secondCombo = "Tempest"
|
|
end
|
|
end
|
|
specWarnSearingTempest:Show()
|
|
specWarnSearingTempest:Play("runout")
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Update()
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
local spellId = args.spellId
|
|
if spellId == 247079 or spellId == 244033 then--Special cast Ids that show the primary target of the flame rend, not all the people hit by it
|
|
if self.Options.ignoreThreeTank and self:GetNumAliveTanks() >= 3 then return end
|
|
local uId = DBM:GetRaidUnitId(args.destName)
|
|
if self:IsTanking(uId) then--For good measure, filter non tanks on wipes or LFR trolls
|
|
if not args:IsPlayer() and (self:IsMythic() and self.vb.rendCount == 2 or not DBM:UnitDebuff("player", 245458, 255059)) then
|
|
--Will warn if Rend count 2 and mythic, combo has ended and tank that didn't get hit should taunt boss to keep him still
|
|
--Will warn if Flame did not hit you and you do NOT have foebreaker debuff yet, should taunt to keep boss from moving, you're the next foe soaker in this case.
|
|
--Will NOT warn if Using 3+ tank strat and 3 tank filter enabled. If using 3+ tank strat, none of the two above can be safely assumed who should taunt boss, so we do nothing
|
|
if self:AntiSpam(2, 6) then--Antispam to prevent double taunt warnings with foebreaker code that warns you to taunt on cast start if other tank has debuff
|
|
specWarnFlameRendTaunt:Show(args.destName)
|
|
specWarnFlameRendTaunt:Play("tauntboss")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 245990 then
|
|
local uId = DBM:GetRaidUnitId(args.destName)
|
|
if self:IsTanking(uId) then
|
|
local amount = args.amount or 1
|
|
if amount >= 8 and self:AntiSpam(3, 2) then--Lasts 12 seconds, asuming 1.5sec swing timer makes 8 stack swap
|
|
if args:IsPlayer() then--At this point the other tank SHOULD be clear.
|
|
specWarnTaeshalachReach:Show(amount)
|
|
specWarnTaeshalachReach:Play("stackhigh")
|
|
else--Taunt as soon as stacks are clear, regardless of stack count.
|
|
local techTimer = timerTaeshalachTechCD:GetRemaining(self.vb.techCount+1)
|
|
if not UnitIsDeadOrGhost("player") and not DBM:UnitDebuff("player", args.spellName) and (techTimer == 0 or techTimer >= 4) then
|
|
specWarnTaeshalachReachOther:Show(args.destName)
|
|
specWarnTaeshalachReachOther:Play("tauntboss")
|
|
else
|
|
warnTaeshalachReach:Show(args.destName, amount)
|
|
end
|
|
end
|
|
else
|
|
if amount % 4 == 0 then
|
|
warnTaeshalachReach:Show(args.destName, amount)
|
|
end
|
|
end
|
|
end
|
|
elseif spellId == 245994 then
|
|
warnScorchingBlaze:CombinedShow(0.3, args.destName)
|
|
if args:IsPlayer() then
|
|
specWarnScorchingBlaze:Show()
|
|
specWarnScorchingBlaze:Play("scatter")
|
|
yellScorchingBlaze:Yell()
|
|
end
|
|
elseif spellId == 254452 then
|
|
warnRavenousBlaze:CombinedShow(0.3, args.destName)
|
|
local icon = self.vb.blazeIcon
|
|
if args:IsPlayer() then
|
|
specWarnRavenousBlaze:Show(self:IconNumToTexture(icon))
|
|
specWarnRavenousBlaze:Play("scatter")
|
|
yellRavenousBlaze:Yell(icon, args.spellName, icon)
|
|
warnRavenousBlazeCount:Schedule(2, 5)
|
|
warnRavenousBlazeCount:Schedule(4, 10)
|
|
warnRavenousBlazeCount:Schedule(6, 15)
|
|
warnRavenousBlazeCount:Schedule(8, 20)
|
|
end
|
|
if self.Options.SetIconOnBlaze2 then
|
|
self:SetIcon(args.destName, icon)
|
|
end
|
|
self.vb.blazeIcon = self.vb.blazeIcon + 1
|
|
elseif spellId == 244894 then--Corrupt Aegis
|
|
if self.vb.comboCount > 0 and self.vb.comboCount < 5 then
|
|
--self.vb.incompleteCombo = true
|
|
comboDebugCounter = comboDebugCounter + 1
|
|
comboDebug[comboDebugCounter] = "Phase changed aborted a combo before it finished"
|
|
end
|
|
warnPhase:Play("phasechange")
|
|
self.vb.wakeOfFlameCount = 0
|
|
self.vb.techActive = false
|
|
timerScorchingBlazeCD:Stop()
|
|
timerRavenousBlazeCD:Stop()
|
|
timerWakeofFlameCD:Stop()
|
|
timerFlareCD:Stop()
|
|
timerTaeshalachTechCD:Stop()
|
|
timerFoeBreakerCD:Stop()
|
|
timerFlameRendCD:Stop()
|
|
timerTempestCD:Stop()
|
|
if self.Options.SetIconOnAdds then
|
|
self:ScheduleMethod(2, "ScanForMobs", 122532, 1, 1, 5, nil, 12, "SetIconOnAdds", nil, self.Options.skipMarked)
|
|
end
|
|
if self.Options.RangeFrame and not self:IsTank() then
|
|
DBM.RangeCheck:Hide()
|
|
end
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Hide()
|
|
end
|
|
elseif spellId == 244903 or spellId == 247091 then--Purification/Catalyzed
|
|
if self.Options.NPAuraOnPresence then
|
|
DBM.Nameplate:Show(true, args.destGUID, 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 == 244894 then--Corrupt Aegis
|
|
self.vb.phase = self.vb.phase + 1
|
|
comboDebugCounter = comboDebugCounter + 1
|
|
comboDebug[comboDebugCounter] = "Phase: "..self.vb.phase
|
|
self.vb.wakeOfFlameCount = 0
|
|
self.vb.comboCount = 0
|
|
self.vb.firstCombo = nil
|
|
self.vb.secondCombo = nil
|
|
self.vb.foeCount = 0
|
|
self.vb.rendCount = 0
|
|
--timerScorchingBlazeCD:Start(3)--Unknown
|
|
timerTaeshalachTechCD:Start(37, self.vb.techCount+1)
|
|
if self:IsMythic() then
|
|
timerRavenousBlazeCD:Start(23)
|
|
else
|
|
timerScorchingBlazeCD:Start(5.9)
|
|
end
|
|
warnPhase:Show(DBM_CORE_L.AUTO_ANNOUNCE_TEXTS.stage:format(self.vb.phase))
|
|
if self.vb.phase == 2 then
|
|
warnPhase:Play("ptwo")
|
|
timerFlareCD:Start(self:IsMythic() and 8 or 10)
|
|
elseif self.vb.phase == 3 then
|
|
warnPhase:Play("pthree")
|
|
timerFlareCD:Start(self:IsMythic() and 8 or 10)
|
|
end
|
|
if self.Options.RangeFrame and not self:IsTank() then
|
|
DBM.RangeCheck:Show(6)
|
|
end
|
|
elseif spellId == 244903 or spellId == 247091 then--Purification/Catalyzed
|
|
if self.Options.NPAuraOnPresence then
|
|
DBM.Nameplate:Hide(true, args.destGUID, spellId)
|
|
end
|
|
elseif spellId == 254452 then
|
|
if args:IsPlayer() then
|
|
warnRavenousBlazeCount:Cancel()
|
|
end
|
|
if self.Options.SetIconOnBlaze2 then
|
|
self:SetIcon(args.destName, 0)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 122532 then
|
|
DBM.Nameplate:Hide(true, args.destGUID)
|
|
unitTracked[args.destGUID] = nil
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
|
|
if spellId == 245993 then--Scorching Blaze
|
|
timerScorchingBlazeCD:Start()
|
|
elseif spellId == 254451 then--Ravenous Blaze (mythic replacement for Scorching Blaze)
|
|
self.vb.blazeIcon = 1
|
|
timerRavenousBlazeCD:Start()--Unknown at this time
|
|
elseif spellId == 244688 then--Taeshalach Technique
|
|
self.vb.comboCount = 0
|
|
self.vb.firstCombo = nil
|
|
self.vb.secondCombo = nil
|
|
self.vb.techActive = true
|
|
self.vb.foeCount = 0
|
|
self.vb.rendCount = 0
|
|
self.vb.techCount = self.vb.techCount + 1
|
|
timerScorchingBlazeCD:Stop()
|
|
timerRavenousBlazeCD:Stop()
|
|
timerWakeofFlameCD:Stop()
|
|
timerFlareCD:Stop()
|
|
if self:IsMythic() then
|
|
--Reset combo and tech count if needed
|
|
if self.vb.techCount == 5 then
|
|
self.vb.techCount = 1
|
|
--comboUsed[1] = false
|
|
--comboUsed[2] = false
|
|
--comboUsed[3] = false
|
|
--comboUsed[4] = false
|
|
end
|
|
else
|
|
--Set sequence
|
|
--Foebreaker instantly so no need for timer
|
|
if self:IsEasy() then--Check in LFR
|
|
timerFlameRendCD:Start(5, 1)
|
|
timerTempestCD:Start(20)
|
|
else
|
|
timerFlameRendCD:Start(4, 1)
|
|
timerTempestCD:Start(15)
|
|
end
|
|
end
|
|
warnTaeshalachTech:Show(self.vb.techCount)
|
|
timerTaeshalachTechCD:Start(nil, self.vb.techCount+1)
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:SetHeader(DBM:GetSpellInfo(spellId))
|
|
DBM.InfoFrame:Show(5, "function", updateInfoFrame, false, false, true)
|
|
end
|
|
elseif spellId == 244792 and self.vb.techActive then--Burning Will of Taeshalach (technique ended)
|
|
self.vb.techActive = false
|
|
if self:IsMythic() then
|
|
timerRavenousBlazeCD:Start(self.vb.phase == 1 and 4.2 or 21.3)
|
|
else
|
|
timerScorchingBlazeCD:Start(4.2)
|
|
end
|
|
if self.vb.phase == 1 then
|
|
if self:IsMythic() then
|
|
timerWakeofFlameCD:Start(10.3)
|
|
else
|
|
timerWakeofFlameCD:Start(7)
|
|
end
|
|
elseif self.vb.phase == 2 then
|
|
timerFlareCD:Start(self:IsMythic() and 6.6 or 8.6)
|
|
else--Stage 3
|
|
timerFlareCD:Start(self:IsMythic() and 8 or 10)
|
|
end
|
|
if self.Options.InfoFrame then
|
|
DBM.InfoFrame:Hide()
|
|
end
|
|
elseif spellId == 245983 or spellId == 246037 then--Flare
|
|
specWarnFlare:Show()
|
|
specWarnFlare:Play("watchstep")
|
|
if not self:IsMythic() then
|
|
timerFlareCD:Start()
|
|
--No countdown on non mythic on purpose
|
|
end
|
|
end
|
|
end
|
|
|