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.

629 lines
24 KiB

local mod = DBM:NewMod(2529, "DBM-Aberrus", nil, 1208)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20231102154902")
mod:SetCreatureID(201774, 201773, 201934)--Krozgoth, Moltannia, Molgoth
mod:SetEncounterID(2687)
mod:SetUsedIcons(1, 2, 3, 4)
mod:SetBossHPInfoToHighest()
mod:SetHotfixNoticeRev(20230626000000)
mod:SetMinSyncRevision(20230626000000)
mod.respawnTime = 29
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 403459 405016 407640 403699 404732 403101 404896 405437 405641 408193 405914 406783 403203 409385",
"SPELL_CAST_SUCCESS 406730 409385",
"SPELL_AURA_APPLIED 401809 402617 405036 405394 405642 405914 413597",
"SPELL_AURA_APPLIED_DOSE 401809 402617 405394",
"SPELL_AURA_REMOVED 401809 402617 405036 405642",
"SPELL_PERIODIC_DAMAGE 405084 405645",
"SPELL_PERIODIC_MISSED 405084 405645"
)
--[[
(ability.id = 409385 or ability.id = 403459 or ability.id = 405016 or ability.id = 407640 or ability.id = 403699 or ability.id = 404732 or ability.id = 403101 or ability.id = 404896 or ability.id = 403203 or ability.id = 405437 or ability.id = 405641 or ability.id = 408193 or ability.id = 405914 or ability.id = 406783) and type = "begincast"
or (ability.id = 406730 or ability.id = 406780) and type = "cast"
or (target.id = 201774 or target.id = 201773) and type = "death"
--]]
--TODO, also target scan Swirling Flame?
--TODO, secondary alert for Swirling Shadowflame ?
--TODO, if both tank abilities in P2 are a combo, just use generic tank combo timer
--General
local specWarnGTFO = mod:NewSpecialWarningGTFO(405084, nil, nil, nil, 1, 8)
mod:AddBoolOption("AdvancedBossFiltering", true, "misc")--May be default to off on live, but for testing purposes it needs to be forced
--Krozgoth
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26336))
local warnCorruptingShadow = mod:NewCountAnnounce(401809, 2, nil, nil, DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.stack:format(401809))
local warnCorruptingShadowFades = mod:NewFadesAnnounce(401809, 1)
local warnUmbralDetonation = mod:NewTargetCountAnnounce(405036, 3, nil, nil, 167180, nil, nil, nil, true)
local specWarnCoalescingVoid = mod:NewSpecialWarningCount(403459, nil, nil, nil, 2, 2)--Possibly use a run away warning if idea is to actualy move away? Something tells me falloff is just designed to scope damage to players on THIS boss only
local specWarnUmbralDetonation = mod:NewSpecialWarningYou(405036, nil, 49685, nil, 1, 2)
local yellUmbralDetonation = mod:NewShortYell(405036, 49685)--"Bomb"
local yellUmbralDetonationFades = mod:NewShortFadesYell(405036)
local specWarnShadowsConvergence = mod:NewSpecialWarningDodgeCount(407640, nil, nil, nil, 2, 2, 3)
local timerCoalescingVoidCD = mod:NewCDCountTimer(21.9, 403459, nil, nil, nil, 2)
local timerUmbralDetonationCD = mod:NewCDCountTimer(21.9, 405036, 167180, nil, nil, 3)--"Bombs"
local timerShadowsConvergenceCD = mod:NewCDCountTimer(20.7, 407640, nil, nil, nil, 3, nil, DBM_COMMON_L.HEROIC_ICON)
local timerShadowSpikeCD = mod:NewCDCountTimer(11, 403699, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
--local berserkTimer = mod:NewBerserkTimer(600)
mod:AddSetIconOption("SetIconOnUmbral", 405036, false, 0, {1, 2, 3})
--Moltannia
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26337))
local warnBlazingHeat = mod:NewCountAnnounce(402617, 2, nil, nil, DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.stack:format(402617))
local warnBlazingHeatFades = mod:NewFadesAnnounce(402617, 1)
local specWarnFieryMeteor = mod:NewSpecialWarningCount(404732, nil, nil, nil, 2, 2)
local specWarnMoltenEruption = mod:NewSpecialWarningCount(403101, nil, nil, nil, 2, 2, 3)
local specWarnSwirlingFlame = mod:NewSpecialWarningDodgeCount(404896, nil, 86189, nil, 2, 2)
local timerFieryMeteorCD = mod:NewCDCountTimer(31.7, 404732, nil, nil, nil, 3)
local timerMoltenEruptionCD = mod:NewCDCountTimer(22.3, 403101, nil, nil, nil, 5, nil, DBM_COMMON_L.HEROIC_ICON)
local timerSwirlingFlameCD = mod:NewCDCountTimer(20.7, 404896, 86189, nil, nil, 3)--"Tornados"
local timerFlameSlashCD = mod:NewCDCountTimer(11, 403203, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
--Molgoth
mod:AddTimerLine(DBM:EJ_GetSectionInfo(26338))
local warnPhase2 = mod:NewPhaseAnnounce(2, 2, nil, nil, nil, nil, nil, 2)
local warnShadowandFlame = mod:NewCastAnnounce(409385, 4)
local warnShadowflame = mod:NewCountAnnounce(405394, 2, nil, nil, DBM_CORE_L.AUTO_ANNOUNCE_OPTIONS.stack:format(405394))
local warnBlisteringTwilight = mod:NewTargetCountAnnounce(405641, 3, nil, nil, 167180, nil, nil, nil, true)
local warnShadowflameBurst = mod:NewCountAnnounce(406783, 3)
local specWarnGloomConflag = mod:NewSpecialWarningCount(405437, nil, nil, nil, 2, 2)
local specWarnBlisteringTwilight = mod:NewSpecialWarningYou(405642, nil, 49685, nil, 1, 2)
local yellBlisteringTwilight = mod:NewShortYell(405642, 49685)
local yellBlisteringTwilightFades = mod:NewShortFadesYell(405642)
local specWarnConvergentEruption = mod:NewSpecialWarningCount(408193, nil, nil, nil, 2, 2)
local specWarnWitheringVulnerability = mod:NewSpecialWarningDefensive(405914, nil, nil, nil, 1, 2)
local specWarnWitheringVulnerabilityTaunt = mod:NewSpecialWarningTaunt(405914, nil, nil, nil, 1, 2)
local yellShadowandFlameRepeat = mod:NewIconRepeatYell(409385, nil, false, 2)
local timerPhaseCD = mod:NewPhaseTimer(30)
local timerShadowandFlameCD = mod:NewCDCountTimer(47.4, 409385, nil, nil, nil, 3, nil, DBM_COMMON_L.MYTHIC_ICON)
local timerGloomConflagCD = mod:NewCDCountTimer(40, 405437, nil, nil, nil, 3)
local timerBlisteringTwilightCD = mod:NewCDCountTimer(40, 405642, 167180, nil, nil, 3)--"Bombs"
local timerConvergentEruptionCD = mod:NewCDCountTimer(40, 408193, nil, nil, nil, 5)
local timerWitheringVulnerabilityCD = mod:NewCDCountTimer(35.3, 405914, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)--35-40
local timerShadowflameBurstCD = mod:NewCDCountTimer(35.3, 406783, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)--Might be redundant if always after crushing
mod:AddSetIconOption("SetIconOnBlistering", 405642, false, 0, {1, 2, 3, 4})
mod:AddRangeFrameOption(6, 409385)
local nearKroz, nearMolt = true, true
mod.vb.coalescingCount = 0
mod.vb.umbralCount = 0
mod.vb.umbralIcon = 1
mod.vb.shadowConvergeCount = 0
mod.vb.shadowStrikeCount = 0
mod.vb.meteorCast = 0
mod.vb.swirlingCount = 0
mod.vb.moltenEruptionCast = 0
mod.vb.flameSlashCast = 0
mod.vb.witheringVulnCount = 0
mod.vb.shadowflameBurstCount = 0
mod.vb.SandFCount = 0
local difficultyName = "easy"
local altTimers = {--Table of lowest averages for timers that are at least somewhat consistent
["hard"] = {
----Fire Duder
--Flame Slash
[403203] = false,--Too variable
--Swirling Flame
[404896] = false,--Too variable
--Fiery Meteor
[404732] = 35.3,
--Molten Eruption
[403101] = 34,
----Shadow Duder
--Shadow Spike
[403699] = false,--Too variable
--Umbral Detonation
[405016] = 34.5,
--Coalescing Void
[403459] = 35.3,
--Shadows Convergence
[407640] = 35.3,
----Phase 2
--Shadow and Flame (mythic Only)
[409385] = 47.3,
--Gloom Conflag
[405437] = 47.4,
--Blistering Twilight
[405641] = 47.4,
--Convergent Eruption (Heroic+)
[408193] = 47.3,
--Withering Vulnerability
[405914] = 23.1,
--Shadowflame Burst
[406783] = 23.1,
},
["easy"] = {
----Fire Duder
--Flame Slash
[403203] = false,--Too variable
--Swirling Flame
[404896] = false,--Too variable
--Fiery Meteor
[404732] = 35.1,
--Molten Eruption (Heroic+)
-- [403101] = {},
----Shadow Duder
--Shadow Spike
[403699] = false,--Too variable
--Umbral Detonation
[405016] = false,--Too variable
--Coalescing Void
[403459] = 35.1,
--Shadows Convergence (Heroic+)
-- [407640] = {},
----Phase 2
--Shadow and Flame (mythic Only)
-- [409385] = {},
--Gloom Conflag
[405437] = 44.9,
--Blistering Twilight
[405641] = false,--Too variable
--Convergent Eruption (Heroic+)
-- [408193] = {},
--Withering Vulnerability
[405914] = 23.1,
--Shadowflame Burst
[406783] = 23.1,
},
}
local allTimers = {
["hard"] = {
----Fire Duder
--Flame Slash
[403203] = {7, 15.7, 26.7, 15.3, 19.4, 15.8, 18.2, 15.7, 18.6},
--Swirling Flame
[404896] = {10.6, 14.5, 25.8, 14.1, 20.3, 14.6, 18.2, 14.6, 20.7},
--Fiery Meteor
[404732] = {35.2, 35.2, 35.3, 35.3},
--Molten Eruption
[403101] = {16.7, 40.5, 34.5, 34},
----Shadow Duder
--Shadow Spike
[403699] = {9.5, 15.8, 15.8, 10.1, 15.8, 19.5, 15.7, 19.4, 15.8, 19.4},
--Umbral Detonation
[405016] = {14.2, 41.7, 34.5, 35.2},
--Coalescing Void
[403459] = {35.2, 35.2, 35.3, 35.3},
--Shadows Convergence
[407640] = {22.7, 41.3, 35.3, 35.2},
----Phase 2
--Shadow and Flame (mythic Only)
[409385] = {29.5, 51, 47.4, 47.3, 47.3, 47.3},
--Gloom Conflag
[405437] = {50.4, 47.5, 47.6, 47.5, 47.4, 47.4},
--Blistering Twilight
[405641] = {21.4, 51.3, 47.5, 47.6, 47.5, 47.4},
--Convergent Eruption (Heroic+)
[408193] = {33.6, 51, 47.4, 47.3, 47.5, 47.4},
--Withering Vulnerability
[405914] = {16.6, 24.3, 26.8, 24.3, 23.1, 24.2, 23.1, 24.2, 23.1, 24.3, 23.1, 24.3},
--Shadowflame Burst
[406783] = {19.4, 24.4, 26.8, 24.3, 23.2, 24.3, 23.2, 24.3, 23.1, 24.3, 23.1, 24.3},
},
["easy"] = {
----Fire Duder
--Flame Slash
[403203] = {9.3, 15.7, 25.4, 15.7, 18.3, 15.8, 19.4, 16.2, 19.5, 15.8},
--Swirling Flame
[404896] = {10.9, 14.6, 25.5, 14.5, 18.3, 15.8, 19.4, 15.8, 20.4, 15.0},
--Fiery Meteor
[404732] = {35.2, 35.1, 35.2, 35.2, 35.4},
--Molten Eruption (Heroic+)
-- [403101] = {},
----Shadow Duder
--Shadow Spike
[403699] = {9.3, 15.7, 15.7, 10.9, 15.7, 19.5, 16.2, 19.4, 15.8, 19.5, 15.9},
--Umbral Detonation
[405016] = {16.6, 21.9, 18.3, 36.9, 34.0, 35.3},
--Coalescing Void
[403459] = {35.2, 35.1, 35.3, 35.2, 35.4},
--Shadows Convergence (Heroic+)
-- [407640] = {},
----Phase 2
--Shadow and Flame (mythic Only)
-- [409385] = {},
--Gloom Conflag
[405437] = {50.3, 44.9, 45.2, 44.9, 46.2},
--Blistering Twilight
[405641] = {20.2, 15.7, 37.5, 15.7, 31.6},
--Convergent Eruption (Heroic+)
-- [408193] = {},
--Withering Vulnerability
[405914] = {15.8, 24.2, 28.1, 24.2, 23.1},
--Shadowflame Burst
[406783] = {18.5, 24.2, 28.1, 24.2, 23.1},
},
}
--As computational as this looks, it's purpose is to just filter information overload.
--Basically, it solves for what should or shouldn't be shown, not what a player should or shouldn't do.
local function updateBossDistance(self)
if not self.Options.AdvancedBossFiltering then return end
--Check if near or far from Krozgoth
if self:CheckBossDistance(201774, true, 32698, 48) then
if not nearKroz then
nearKroz = true
timerCoalescingVoidCD:SetFade(false, self.vb.coalescingCount+1)
timerUmbralDetonationCD:SetFade(false, self.vb.umbralCount+1)
timerShadowsConvergenceCD:SetFade(false, self.vb.shadowConvergeCount+1)
timerShadowSpikeCD:SetFade(false, self.vb.shadowStrikeCount+1)
end
else
if nearKroz then
nearKroz = false
timerCoalescingVoidCD:SetFade(true, self.vb.coalescingCount+1)
timerUmbralDetonationCD:SetFade(true, self.vb.umbralCount+1)
timerShadowsConvergenceCD:SetFade(true, self.vb.shadowConvergeCount+1)
timerShadowSpikeCD:SetFade(true, self.vb.shadowStrikeCount+1)
end
end
--Check if near or far from Moltannia
if self:CheckBossDistance(201773, true, 32698, 48) then
if not nearMolt then
nearMolt = true
timerFieryMeteorCD:SetFade(false, self.vb.meteorCast+1)
timerMoltenEruptionCD:SetFade(false, self.vb.moltenEruptionCast+1)
timerSwirlingFlameCD:SetFade(false, self.vb.swirlingCount+1)
timerFlameSlashCD:SetFade(false, self.vb.flameSlashCast+1)
end
else
if nearMolt then
nearMolt = false
timerFieryMeteorCD:SetFade(true, self.vb.meteorCast+1)
timerMoltenEruptionCD:SetFade(true, self.vb.moltenEruptionCast+1)
timerSwirlingFlameCD:SetFade(true, self.vb.swirlingCount+1)
timerFlameSlashCD:SetFade(true, self.vb.flameSlashCast+1)
end
end
self:Schedule(2, updateBossDistance, self)
end
local function yellRepeater(self, text)
yellShadowandFlameRepeat:Yell(text)
self:Schedule(1.5, yellRepeater, self, text)
end
function mod:OnCombatStart(delay)
nearKroz, nearMolt = true, true
self:SetStage(1)
--Krozgoth
self.vb.coalescingCount = 0
self.vb.umbralCount = 0
self.vb.umbralIcon = 1
self.vb.shadowConvergeCount = 0
self.vb.shadowStrikeCount = 0
if self:IsHard() then
difficultyName = "hard"
timerShadowSpikeCD:Start(9.3-delay, 1)
timerUmbralDetonationCD:Start(14.2-delay, 1)
timerShadowsConvergenceCD:Start(22.7-delay, 1)
timerCoalescingVoidCD:Start(35.2-delay, 1)
else--LFR and normal confirmed same, and heroic and mythic posibly also same
difficultyName = "easy"
timerShadowSpikeCD:Start(9.3-delay, 1)
timerUmbralDetonationCD:Start(14.2-delay, 1)
--timerShadowsConvergenceCD:Start(22.8-delay, 1)
timerCoalescingVoidCD:Start(35.2-delay, 1)
end
--Reset Fades
timerCoalescingVoidCD:SetFade(false, 1)
timerUmbralDetonationCD:SetFade(false, 1)
timerShadowsConvergenceCD:SetFade(false, 1)
timerShadowSpikeCD:SetFade(false, 1)
--Moltannia
self.vb.meteorCast = 0
self.vb.moltenEruptionCast = 0
self.vb.swirlingCount = 0
self.vb.SandFCount = 0
self.vb.flameSlashCast = 0
if self:IsHard() then
timerFlameSlashCD:Start(7-delay, 1)
timerSwirlingFlameCD:Start(10.7-delay, 1)
timerMoltenEruptionCD:Start(16.7-delay, 1)
timerFieryMeteorCD:Start(35.2-delay, 1)
else--Normal and LFR confirmed
timerFlameSlashCD:Start(9.3-delay, 1)
timerSwirlingFlameCD:Start(10.5-delay, 1)
--timerMoltenEruptionCD:Start(23-delay, 1)
timerFieryMeteorCD:Start(35.2-delay, 1)
end
--Reset Fades
timerFieryMeteorCD:SetFade(false, 1)
timerMoltenEruptionCD:SetFade(false, 1)
timerSwirlingFlameCD:SetFade(false, 1)
timerFlameSlashCD:SetFade(false, 1)
self:Schedule(2, updateBossDistance, self)
end
function mod:OnTimerRecovery()
if self:IsHard() then
difficultyName = "hard"
else
difficultyName = "easy"
end
end
function mod:OnCombatEnd()
if self.Options.RangeFrame then
DBM.RangeCheck:Hide()
end
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
--Krozgoth Spells
if spellId == 403459 then
self.vb.coalescingCount = self.vb.coalescingCount + 1
if nearKroz then
specWarnCoalescingVoid:Show(self.vb.coalescingCount)
specWarnCoalescingVoid:Play("aesoon")
end
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.coalescingCount+1) or altTimers[difficultyName][spellId]
if timer then
timerCoalescingVoidCD:Start(timer, self.vb.coalescingCount+1)
end
elseif spellId == 405016 then
self.vb.umbralCount = self.vb.umbralCount + 1
self.vb.umbralIcon = 1
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.umbralCount+1) or altTimers[difficultyName][spellId]
if timer then
timerUmbralDetonationCD:Start(timer, self.vb.umbralCount+1)
end
elseif spellId == 407640 then
self.vb.shadowConvergeCount = self.vb.shadowConvergeCount + 1
if nearKroz then
specWarnShadowsConvergence:Show(self.vb.shadowConvergeCount)
specWarnShadowsConvergence:Play("watchorb")
end
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.shadowConvergeCount+1) or altTimers[difficultyName][spellId]
if timer then
timerShadowsConvergenceCD:Start(timer, self.vb.shadowConvergeCount+1)
end
elseif spellId == 403699 then
self.vb.shadowStrikeCount = self.vb.shadowStrikeCount + 1
--if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
--end
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.shadowStrikeCount+1) or altTimers[difficultyName][spellId]
if timer then
timerShadowSpikeCD:Start(timer, self.vb.shadowStrikeCount+1)
end
--Moltannia Spells
elseif spellId == 404732 then
self.vb.meteorCast = self.vb.meteorCast + 1
if nearMolt then
specWarnFieryMeteor:Show(self.vb.meteorCast)
specWarnFieryMeteor:Play("helpsoak")
end
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.meteorCast+1) or altTimers[difficultyName][spellId]
if timer then
timerFieryMeteorCD:Start(timer, self.vb.meteorCast+1)
end
elseif spellId == 403101 then
self.vb.moltenEruptionCast = self.vb.moltenEruptionCast + 1
if nearMolt then
specWarnMoltenEruption:Show(self.vb.moltenEruptionCast)
specWarnMoltenEruption:Play("helpsoak")
end
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.moltenEruptionCast+1) or altTimers[difficultyName][spellId]
if timer then
timerMoltenEruptionCD:Start(timer, self.vb.moltenEruptionCast+1)
end
elseif spellId == 404896 then
self.vb.swirlingCount = self.vb.swirlingCount + 1
if nearMolt then
specWarnSwirlingFlame:Show(self.vb.swirlingCount)
specWarnSwirlingFlame:Play("watchwave")
end
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.swirlingCount+1) or altTimers[difficultyName][spellId]
if timer then
timerSwirlingFlameCD:Start(timer, self.vb.swirlingCount+1)
end
elseif spellId == 403203 then
self.vb.flameSlashCast = self.vb.flameSlashCast + 1
--if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
--end
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.flameSlashCast+1) or altTimers[difficultyName][spellId]
if timer then
timerFlameSlashCD:Start(timer, self.vb.flameSlashCast+1)
end
--Molgoth
elseif spellId == 405437 then
self.vb.meteorCast = self.vb.meteorCast + 1
specWarnGloomConflag:Show(self.vb.meteorCast)
specWarnGloomConflag:Play("helpsoak")
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.meteorCast+1) or altTimers[difficultyName][spellId]
if timer then
timerGloomConflagCD:Start(timer, self.vb.meteorCast+1)
end
elseif spellId == 405641 then
self.vb.umbralCount = self.vb.umbralCount + 1
self.vb.umbralIcon = 1
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.umbralCount+1) or altTimers[difficultyName][spellId]
if timer then
timerBlisteringTwilightCD:Start(timer, self.vb.umbralCount+1)
end
elseif spellId == 408193 then
self.vb.moltenEruptionCast = self.vb.moltenEruptionCast + 1
specWarnConvergentEruption:Show(self.vb.moltenEruptionCast)
specWarnConvergentEruption:Play("helpsoak")
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.moltenEruptionCast+1) or altTimers[difficultyName][spellId]
if timer then
timerConvergentEruptionCD:Start(timer, self.vb.moltenEruptionCast+1)
end
elseif spellId == 405914 then
self.vb.witheringVulnCount = self.vb.witheringVulnCount + 1
if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
specWarnWitheringVulnerability:Show()
specWarnWitheringVulnerability:Play("defensive")
end
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.witheringVulnCount+1) or altTimers[difficultyName][spellId]
if timer then
timerWitheringVulnerabilityCD:Start(timer, self.vb.witheringVulnCount+1)
end
elseif spellId == 406783 then
self.vb.shadowflameBurstCount = self.vb.shadowflameBurstCount + 1
warnShadowflameBurst:Show(self.vb.shadowflameBurstCount)
local timer = self:GetFromTimersTable(allTimers, difficultyName, false, spellId, self.vb.shadowflameBurstCount+1) or altTimers[difficultyName][spellId]
if timer then
timerShadowflameBurstCD:Start(timer, self.vb.shadowflameBurstCount+1)
end
elseif spellId == 409385 then
self.vb.SandFCount = self.vb.SandFCount + 1
warnShadowandFlame:Show(self.vb.SandFCount)
timerShadowandFlameCD:Start(self.vb.SandFCount == 1 and 52 or 47, self.vb.SandFCount+1)
if self.Options.RangeFrame then
DBM.RangeCheck:Show(6)
end
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 406730 and self:GetStage(2, 1) then--Crucible Instability
self:SetStage(2)
warnPhase2:Show()
warnPhase2:Play("ptwo")
self.vb.meteorCast = 0--Reused for Gloom Conflagration
self.vb.umbralCount = 0--Reused for Blistering Twilight
self.vb.moltenEruptionCast = 0--Reused for Converging Eruption
self.vb.witheringVulnCount = 0
self.vb.shadowflameBurstCount = 0
self:Unschedule(updateBossDistance)
timerCoalescingVoidCD:Stop()
timerUmbralDetonationCD:Stop()
timerShadowsConvergenceCD:Stop()
timerShadowSpikeCD:Stop()
timerFieryMeteorCD:Stop()
timerMoltenEruptionCD:Stop()
timerSwirlingFlameCD:Stop()
timerFlameSlashCD:Stop()
timerPhaseCD:Start(11.7)
if self:IsMythic() then
timerShadowandFlameCD:Start(29, 1)
timerConvergentEruptionCD:Start(35.7, 1)
elseif self:IsHeroic() then
timerConvergentEruptionCD:Start(32.4, 1)
end
--Same in all
timerWitheringVulnerabilityCD:Start(15.8, 1)
timerShadowflameBurstCD:Start(18.5, 1)
timerBlisteringTwilightCD:Start(20.2, 1)
timerGloomConflagCD:Start(50, 1)
elseif spellId == 409385 then
if self.Options.RangeFrame then
DBM.RangeCheck:Hide()
end
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 401809 and args:IsPlayer() then
local amount = args.amount or 1
if (amount % 3 == 0) and amount >= 18 then--Adjust as needed
warnCorruptingShadow:Show(amount)
end
if self:IsMythic() and self:GetStage(2) and amount == 1 then
self:Unschedule(yellRepeater)
yellRepeater(self, 3)
end
elseif spellId == 402617 and args:IsPlayer() then
local amount = args.amount or 1
if (amount % 3 == 0) and amount >= 18 then--Adjust as needed
warnBlazingHeat:Show(amount)
end
if self:IsMythic() and self:GetStage(2) and amount == 1 then
self:Unschedule(yellRepeater)
yellRepeater(self, 2)
end
elseif spellId == 405394 and args:IsPlayer() then
local amount = args.amount or 1
if (amount % 3 == 0) and amount >= 18 then--Adjust as needed
warnShadowflame:Show(amount)
end
elseif spellId == 405036 then
local icon = self.vb.umbralIcon
if self.Options.SetIconOnUmbral then
self:SetIcon(args.destName, icon)
end
if args:IsPlayer() then
specWarnUmbralDetonation:Show()
specWarnUmbralDetonation:Play("targetyou")
yellUmbralDetonation:Yell()
yellUmbralDetonationFades:Countdown(spellId)
end
if nearKroz then
warnUmbralDetonation:CombinedShow(0.5, self.vb.umbralCount, args.destName)
end
self.vb.umbralIcon = self.vb.umbralIcon + 1
elseif spellId == 405642 then
local icon = self.vb.umbralIcon
if self.Options.SetIconOnBlistering then
self:SetIcon(args.destName, icon)
end
if args:IsPlayer() then
specWarnBlisteringTwilight:Show()
specWarnBlisteringTwilight:Play("targetyou")
yellBlisteringTwilight:Yell()
yellBlisteringTwilightFades:Countdown(spellId)
end
warnBlisteringTwilight:CombinedShow(0.5, self.vb.umbralCount, args.destName)
self.vb.umbralIcon = self.vb.umbralIcon + 1
elseif (spellId == 413597 or spellId == 405914) and not args:IsPlayer() then
specWarnWitheringVulnerabilityTaunt:Show(args.destName)
specWarnWitheringVulnerabilityTaunt:Play("tauntboss")
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 401809 and args:IsPlayer() then
warnCorruptingShadowFades:Show()
if self:IsMythic() then
self:Unschedule(yellRepeater)
end
elseif spellId == 402617 and args:IsPlayer() then
warnBlazingHeatFades:Show()
if self:IsMythic() then
self:Unschedule(yellRepeater)
end
elseif spellId == 405036 then
if self.Options.SetIconOnUmbral then
self:SetIcon(args.destName, 0)
end
if args:IsPlayer() then
yellUmbralDetonationFades:Cancel()
end
elseif spellId == 405642 then
if self.Options.SetIconOnBlistering then
self:SetIcon(args.destName, 0)
end
if args:IsPlayer() then
yellBlisteringTwilightFades:Cancel()
end
end
end
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if (spellId == 405084 or spellId == 405645) and destGUID == UnitGUID("player") and self:AntiSpam(3, 2) then
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE