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.

497 lines
20 KiB

local mod = DBM:NewMod(1725, "DBM-Raids-Legion", 3, 786)
local L = mod:GetLocalizedStrings()
mod:SetRevision("20240629024612")
mod:SetCreatureID(104415)--104731 (Depleted Time Particle). 104676 (Waning Time Particle). 104491 (Accelerated Time particle). 104492 (Slow Time Particle)
mod:SetEncounterID(1865)
--mod:SetUsedIcons(5, 4, 3, 2, 1)--sometimes it was 5 targets, sometimes it was whole raid. even post nerf. have to see
mod:SetHotfixNoticeRev(15910)
mod.respawnTime = 29
mod:RegisterCombat("combat")
mod:RegisterEventsInCombat(
"SPELL_CAST_START 211927 207228",
"SPELL_CAST_SUCCESS 219815",
"SPELL_AURA_APPLIED 206617 206607 212099",
"SPELL_AURA_APPLIED_DOSE 206607 219823",
"SPELL_AURA_REMOVED 206617",
"UNIT_SPELLCAST_SUCCEEDED boss1 boss2 boss3 boss4 boss5",
"UNIT_SPELLCAST_CHANNEL_STOP boss1 boss2 boss3 boss4 boss5",
"UNIT_SPELLCAST_STOP boss1 boss2 boss3 boss4 boss5"
)
--TODO, More data to complete sequences of timers on LFR/Heroic/Normal
--(ability.id = 206618 or ability.id = 206610 or ability.id = 206614) and type = "cast" or ability.id = 211927
local warnNormal = mod:NewCountAnnounce(207012, 2)
local warnFast = mod:NewCountAnnounce(207013, 2)
local warnSlow = mod:NewCountAnnounce(207011, 2)
local warnTimeBomb = mod:NewTargetAnnounce(206617, 3)
local warnChronometricPart = mod:NewStackAnnounce(206607, 3, nil, "Tank")
local warnPowerOverwhelmingStack = mod:NewStackAnnounce(219823, 2)
local warnTemporalCharge = mod:NewTargetAnnounce(212099, 1)
local specWarnTemporalOrbs = mod:NewSpecialWarningDodge(219815, nil, nil, nil, 2, 2)
local specWarnPowerOverwhelming = mod:NewSpecialWarningSpell(211927, nil, nil, 2, 2, 2)
local specWarnTimeBomb = mod:NewSpecialWarningMoveAway(206617, nil, nil, 2, 3, 2)--When close to expiring, not right away
local yellTimeBomb = mod:NewFadesYell(206617)
local specWarnWarp = mod:NewSpecialWarningInterrupt(207228, "HasInterrupt", nil, nil, 1, 2)
local specWarnBigAdd = mod:NewSpecialWarningSwitch("ej13022", "-Healer", nil, nil, 1, 2)--Switch to waning time particle when section info known
local timerTemporalOrbsCD = mod:NewNextCountTimer(30, 219815, nil, nil, nil, 2)
local timerPowerOverwhelmingCD = mod:NewNextCountTimer(60, 211927, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
local timerTimeBomb = mod:NewBuffFadesTimer(30, 206617, nil, nil, nil, 5, nil, nil, nil, 3, 4)
local timerTimeBombCD = mod:NewNextCountTimer(30, 206617, nil, nil, nil, 3)
local timerBurstofTimeCD = mod:NewNextCountTimer(30, 206614, nil, nil, nil, 3)
local timerTimeReleaseCD = mod:NewNextCountTimer(30, 206610, nil, "Healer", nil, 5, nil, DBM_COMMON_L.HEALER_ICON)
local timerChronoPartCD = mod:NewCDTimer(5, 206607, nil, "Tank", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerBigAddCD = mod:NewNextCountTimer(30, 206700, nil, nil, nil, 1, nil, nil, nil, 1, 4)--Switch to waning time particle when section info known
local timerNextPhase = mod:NewStageTimer(74)--Used anywhere phase change is NOT immediately after power overwhelming
mod:AddRangeFrameOption(10, 206617)
mod:AddInfoFrameOption(206610)
mod:AddDropdownOption("InfoFrameBehavior", {"TimeRelease", "TimeBomb"}, "TimeRelease", "misc", nil, 206610)
mod.vb.normCount = 0
mod.vb.fastCount = 0
mod.vb.slowCount = 0
mod.vb.currentPhase = 2
mod.vb.interruptCount = 0
mod.vb.timeBombDebuffCount = 0
local timeBombDebuff = DBM:GetSpellName(206617)
local timeRelease = DBM:GetSpellName(206610)
local function updateTimeBomb(self)
local _, _, _, _, _, expires = DBM:UnitDebuff("player", timeBombDebuff)
if expires then
specWarnTimeBomb:Cancel()
specWarnTimeBomb:CancelVoice()
timerTimeBomb:Stop()
yellTimeBomb:Cancel()
local debuffTime = expires - GetTime()
specWarnTimeBomb:Schedule(debuffTime - 5) -- Show "move away" warning 5secs before explode
specWarnTimeBomb:ScheduleVoice(debuffTime - 5, "runout")
timerTimeBomb:Start(debuffTime)
yellTimeBomb:Schedule(debuffTime-1, 1)
yellTimeBomb:Schedule(debuffTime-2, 2)
yellTimeBomb:Schedule(debuffTime-3, 3)
end
end
function mod:OnCombatStart(delay)
self.vb.currentPhase = 2
self.vb.interruptCount = 0
self.vb.normCount = 0
self.vb.fastCount = 0
self.vb.slowCount = 0
self.vb.timeBombDebuffCount = 0
if self.Options.InfoFrame and self.Options.InfoFrameBehavior == "TimeRelease" then
DBM.InfoFrame:SetHeader(timeRelease)
DBM.InfoFrame:Show(10, "playerabsorb", timeRelease)
end
end
function mod:OnCombatEnd()
if self.Options.RangeFrame then
DBM.RangeCheck:Hide()
end
if self.Options.InfoFrame then
DBM.InfoFrame:Hide()
end
end
function mod:SPELL_CAST_START(args)
local spellId = args.spellId
if spellId == 211927 then
timerChronoPartCD:Stop()--Will be used immediately when this ends.
specWarnPowerOverwhelming:Show()
specWarnPowerOverwhelming:Play("aesoon")
elseif spellId == 207228 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
specWarnWarp:Show(args.sourceName)
specWarnWarp:Play("kickcast")
end
end
function mod:SPELL_CAST_SUCCESS(args)
local spellId = args.spellId
if spellId == 219815 then
specWarnTemporalOrbs:Show()
specWarnTemporalOrbs:Play("watchstep")
end
end
function mod:SPELL_AURA_APPLIED(args)
local spellId = args.spellId
if spellId == 206617 then
self.vb.timeBombDebuffCount = self.vb.timeBombDebuffCount + 1
warnTimeBomb:CombinedShow(0.5, args.destName)
if args:IsPlayer() then
updateTimeBomb(self)
if self.Options.RangeFrame then
DBM.RangeCheck:Show(10)
end
end
if self.Options.InfoFrame and not DBM.InfoFrame:IsShown() and self.Options.InfoFrameBehavior == "TimeBomb" then
DBM.InfoFrame:SetHeader(args.spellName)
DBM.InfoFrame:Show(10, "playerdebuffremaining", args.spellName)
end
elseif spellId == 206607 then
local amount = args.amount or 1
warnChronometricPart:Show(args.destName, amount)
timerChronoPartCD:Start()--Move timer to success if this can be avoided
elseif spellId == 219823 then
local amount = args.amount or 1
warnPowerOverwhelmingStack:Show(args.destName, amount)
elseif spellId == 212099 and args:IsDestTypePlayer() then
warnTemporalCharge:Show(args.destName)
end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
function mod:SPELL_AURA_REMOVED(args)
local spellId = args.spellId
if spellId == 206617 then
self.vb.timeBombDebuffCount = self.vb.timeBombDebuffCount - 1
if args:IsPlayer() then
specWarnTimeBomb:Cancel()
specWarnTimeBomb:CancelVoice()
timerTimeBomb:Stop()
yellTimeBomb:Cancel()
if self.Options.RangeFrame then
DBM.RangeCheck:Hide()
end
end
if self.Options.InfoFrame and self.vb.timeBombDebuffCount == 0 and self.Options.InfoFrameBehavior == "TimeBomb" then
DBM.InfoFrame:Hide()
end
end
end
local function delayedBurst(self, time, count)
timerBurstofTimeCD:Start(time, count)
end
local function delayedTimeRelease(self, time, count)
timerTimeReleaseCD:Start(time, count)
end
local function delayedTimeBomb(self, time, count)
timerTimeBombCD:Start(time, count)
end
local function delayedOrbs(self, time, count)
timerTemporalOrbsCD:Start(time, count)
end
function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
if spellId == 207012 then--Speed: Normal
self.vb.currentPhase = 2
self.vb.interruptCount = 0
self.vb.normCount = self.vb.normCount + 1
warnNormal:Show(self.vb.normCount)
if self.vb.normCount == 1 then
if self:IsMythic() then--Updated Jan 25
timerTimeBombCD:Start(5, 1)
timerTimeReleaseCD:Start(10, 1)
timerNextPhase:Start(12)
elseif self:IsHeroic() then--UPDATED Jan 18
timerTimeReleaseCD:Start(5, 1)
self:Schedule(5, delayedTimeRelease, self, 13, 2)--18
timerBigAddCD:Start(23, 1)
timerTimeBombCD:Start(28, 1)
self:Schedule(28, delayedTimeBomb, self, 5, 2)--33
timerTemporalOrbsCD:Start(38, 1)
self:Schedule(30, delayedTimeRelease, self, 13, 3)--43
timerPowerOverwhelmingCD:Start(53, 1)
elseif self:IsNormal() then--Updated Jan 17
timerTimeReleaseCD:Start(5, 1)
self:Schedule(5, delayedTimeRelease, self, 15, 2)--20
timerBigAddCD:Start(28, 1)
timerTimeBombCD:Start(35, 1)
timerTemporalOrbsCD:Start(48, 1)
timerPowerOverwhelmingCD:Start(84, 1)
else--LFR
end
elseif self.vb.normCount == 2 then
if self:IsMythic() then--Updated Jan 25
timerTimeReleaseCD:Start(2, 1)
timerTemporalOrbsCD:Start(7, 1)
timerTimeBombCD:Start(12, 1)
timerPowerOverwhelmingCD:Start(17, 1)
elseif self:IsHeroic() then--Updated May 26 2017
timerTimeBombCD:Start(5, 1)
timerTemporalOrbsCD:Start(10, 1)
self:Schedule(5, delayedTimeBomb, self, 10, 2)--15
timerBigAddCD:Start(20, 1)
self:Schedule(15, delayedTimeBomb, self, 10, 3)--25
timerTimeReleaseCD:Start(30, 1)
self:Schedule(10, delayedOrbs, self, 25, 2)--35
self:Schedule(30, delayedTimeRelease, self, 20, 2)--50
self:Schedule(50, delayedTimeRelease, self, 7, 3)--57
self:Schedule(35, delayedOrbs, self, 30, 3)--65
timerPowerOverwhelmingCD:Start(72, 1)
--Triggers special extention phase after interrupt
elseif self:IsNormal() then
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
else--LFR
end
elseif self.vb.normCount == 3 then
if self:IsMythic() then--Updated Jan 25
timerTemporalOrbsCD:Start(2, 1)
timerTimeBombCD:Start(7, 1)
timerNextPhase:Start(12)
elseif self:IsHeroic() then--Probably changed.
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
elseif self:IsNormal() then--Normal confirmed
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
else--LFR
end
elseif self.vb.normCount == 4 then
if self:IsMythic() then--Updated Jan 25
timerTimeBombCD:Start(2, 1)
timerNextPhase:Start(5)
elseif self:IsHeroic() then--Probably changed.
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
elseif self:IsNormal() then--Normal confirmed
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
else--LFR
end
else
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
end
updateTimeBomb(self)
self:Schedule(2, updateTimeBomb, self)
self:Schedule(5, updateTimeBomb, self)
elseif spellId == 207011 then--Speed: Slow
self.vb.currentPhase = 1
self.vb.interruptCount = 0
self.vb.slowCount = self.vb.slowCount + 1
warnSlow:Show(self.vb.slowCount)
if self.vb.slowCount == 1 then
if self:IsMythic() then--Updated Jan 25
timerTemporalOrbsCD:Start(8, 1)
timerTimeReleaseCD:Start(13, 1)
timerTimeBombCD:Start(16, 1)
self:Schedule(13, delayedTimeRelease, self, 10, 2)--23
timerPowerOverwhelmingCD:Start(28, 1)
elseif self:IsHeroic() then--Updated Jan 18
timerTimeReleaseCD:Start(10, 1)
timerTimeBombCD:Start(15, 1)
timerTemporalOrbsCD:Start(20, 1)
self:Schedule(10, delayedTimeBomb, self, 15, 2)--25
self:Schedule(5, delayedTimeRelease, self, 25, 2)--30
self:Schedule(25, delayedTimeBomb, self, 10, 3)--35
self:Schedule(20, delayedOrbs, self, 18, 2)--38
self:Schedule(25, delayedTimeBomb, self, 15, 3)--40
timerBigAddCD:Start(43, 1)
self:Schedule(38, delayedOrbs, self, 7, 3)--45
timerPowerOverwhelmingCD:Start(55, 1)
elseif self:IsNormal() then--Updated Jan 17
timerTimeReleaseCD:Start(5, 1)
timerTimeBombCD:Start(20, 1)
self:Schedule(5, delayedTimeRelease, self, 23, 2)--28
timerTemporalOrbsCD:Start(30, 1)
timerBigAddCD:Start(38, 1)
timerPowerOverwhelmingCD:Start(90, 1)
else--LFR
end
elseif self.vb.slowCount == 2 then
if self:IsMythic() then--Updated Jan 25
timerTimeBombCD:Start(2, 1)
timerTimeReleaseCD:Start(7, 1)
timerBigAddCD:Start(9, 1)
timerTemporalOrbsCD:Start(14, 1)
timerPowerOverwhelmingCD:Start(19, 1)
elseif self:IsHeroic() then--Updated May 26, 2017
timerTimeReleaseCD:Start(5, 1)
timerTemporalOrbsCD:Start(15, 1)
timerTimeBombCD:Start(20, 1)
self:Schedule(20, delayedTimeBomb, self, 5, 2)--25
self:Schedule(25, delayedTimeBomb, self, 5, 2)--30
timerPowerOverwhelmingCD:Start(35, 1)
elseif self:IsNormal() then--Normal confirmed
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
else--LFR
end
elseif self.vb.slowCount == 3 then
if self:IsMythic() then
timerTemporalOrbsCD:Start(5, 1)
timerTimeBombCD:Start(7, 1)
timerPowerOverwhelmingCD:Start(9, 1)
elseif self:IsHeroic() then--Probably changed.
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
elseif self:IsNormal() then--Normal confirmed
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
else--LFR
end
elseif self.vb.slowCount == 4 then
if self:IsMythic() then--Updated Jan 25
timerTimeReleaseCD:Start(5, 1)
timerTemporalOrbsCD:Start(15, 1)
timerTimeBombCD:Start(20, 1)
self:Schedule(15, delayedOrbs, self, 10, 2)--25
timerPowerOverwhelmingCD:Start(30, 1)
elseif self:IsHeroic() then--Probably changed.
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
elseif self:IsNormal() then--Normal confirmed
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
else--LFR
end
else--Slow 5
if self:IsMythic() then--Updated Jan 25
timerTimeReleaseCD:Start(2, 1)
timerTimeBombCD:Start(3, 1)
timerPowerOverwhelmingCD:Start(8, 1)
elseif self:IsHeroic() then--Probably changed.
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
elseif self:IsNormal() then--Normal confirmed
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
else--LFR
end
end
updateTimeBomb(self)
self:Schedule(2, updateTimeBomb, self)
self:Schedule(5, updateTimeBomb, self)
elseif spellId == 207013 then--Speed: Fast
self.vb.currentPhase = 3
self.vb.interruptCount = 0
self.vb.fastCount = self.vb.fastCount + 1
warnFast:Show(self.vb.fastCount)
if self.vb.fastCount == 1 then
if self:IsMythic() then--Updated Jan 25
timerTimeReleaseCD:Start(5, 1)
timerBigAddCD:Start(7, 1)
timerTemporalOrbsCD:Start(12, 1)
timerPowerOverwhelmingCD:Start(22, 1)
elseif self:IsHeroic() then--Updated May 26, 2017
timerTimeReleaseCD:Start(5, 1)
self:Schedule(5, delayedTimeRelease, self, 7, 2)--12
timerTimeBombCD:Start(17, 1)
self:Schedule(12, delayedTimeRelease, self, 13, 3)--25
self:Schedule(25, delayedTimeRelease, self, 5, 4)--30
self:Schedule(30, delayedTimeRelease, self, 5, 5)--35
timerBigAddCD:Start(38, 1)
self:Schedule(35, delayedTimeRelease, self, 8, 6)--43
timerPowerOverwhelmingCD:Start(50, 1)
elseif self:IsNormal() then--Normal confirmed
timerTimeReleaseCD:Start(10, 1)
timerTemporalOrbsCD:Start(15, 1)
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
else--LFR
end
elseif self.vb.fastCount == 2 then
if self:IsMythic() then--Updated Feb 15
timerTimeReleaseCD:Start(5, 1)
self:Schedule(5, delayedTimeRelease, self, 5, 2)--10
self:Schedule(10, delayedTimeRelease, self, 5, 3)--15
self:Schedule(15, delayedTimeRelease, self, 5, 4)--20
timerBigAddCD:Start(23, 1)
timerTemporalOrbsCD:Start(25, 1)
timerPowerOverwhelmingCD:Start(30, 1)
elseif self:IsHeroic() then--Updated Dec 2
timerTemporalOrbsCD:Start(10, 1)
self:Schedule(10, delayedOrbs, self, 15, 2)--25
timerTimeBombCD:Start(30, 1)
timerTimeReleaseCD:Start(40, 1)
timerPowerOverwhelmingCD:Start(45, 1)
elseif self:IsNormal() then--Normal confirmed
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
else--LFR
end
elseif self.vb.fastCount == 3 then
if self:IsMythic() then--Updated Feb 15
timerTimeReleaseCD:Start(5, 1)
self:Schedule(5, delayedTimeRelease, self, 5, 2)--10
self:Schedule(10, delayedTimeRelease, self, 5, 3)--15
self:Schedule(15, delayedTimeRelease, self, 5, 4)--20
timerTemporalOrbsCD:Start(23, 1)
timerBigAddCD:Start(25, 1)
timerPowerOverwhelmingCD:Start(30, 1)
elseif self:IsHeroic() then--Updated Dec 2
--Goes into Full Power here?
--DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
elseif self:IsNormal() then--Normal confirmed
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
else--LFR
end
elseif self.vb.fastCount == 4 then
if self:IsMythic() then--Updated Jan 25
timerTimeReleaseCD:Start(5, 1)
timerNextPhase:Start(8)
elseif self:IsHeroic() then--Probably changed.
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
elseif self:IsNormal() then--Normal confirmed
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
else
DBM:AddMsg("There is no timer data going this far into the fight. Please submit transcriptor log to improve this mod")
end
else--LFR
end
updateTimeBomb(self)
self:Schedule(2, updateTimeBomb, self)
self:Schedule(5, updateTimeBomb, self)
elseif spellId == 206700 then--Summon Slow Add (Big Adds)
specWarnBigAdd:Show()
specWarnBigAdd:Play("bigmobsoon")
elseif spellId == 207972 then--Full Power, he's just gonna run in circles aoeing the raid and stop using abilities
timerBigAddCD:Stop()
timerTemporalOrbsCD:Stop()
timerPowerOverwhelmingCD:Stop()
timerTimeReleaseCD:Stop()
timerTimeBombCD:Stop()
timerBurstofTimeCD:Stop()
timerNextPhase:Stop()
self:Unschedule(delayedTimeRelease)
self:Unschedule(delayedTimeBomb)
self:Unschedule(delayedBurst)
self:Unschedule(delayedOrbs)
end
end
function mod:UNIT_SPELLCAST_CHANNEL_STOP(uId, _, spellId)
if spellId == 211927 then--Power Overwhelming
self.vb.interruptCount = self.vb.interruptCount + 1
if self.vb.currentPhase == 1 then--slow
if self.vb.normCount == 2 then
if self:IsMythic() then--Updated Jan 25
timerTimeReleaseCD:Start(5, 1)
timerNextPhase:Start(8)
elseif self:IsNormal() then
--timerBurstofTimeCD:Start(5, 2)
--self:Schedule(5, delayedBurst, self, 5, 3)--10
--timerTimeReleaseCD:Start(18, 2)
--timerTimeBombCD:Start(25, 1)
--timerNextPhase:Start(30)
end
end
elseif self.vb.currentPhase == 2 then--normal
if self.vb.normCount == 2 then
if self:IsMythic() then--Updated Jan 25
timerTimeBombCD:Start(3, 2)
timerTemporalOrbsCD:Start(6, 2)
timerNextPhase:Start(9)
elseif self:IsHeroic() then--Updated May 26 2017
timerTimeReleaseCD:Start(5, 1)
timerNextPhase:Start(10)
elseif self:IsNormal() then
--timerTimeReleaseCD:Start(5, 3)
--timerNextPhase:Start(10)
else--LFR
--timerTimeReleaseCD:Start(10, 3)
--timerNextPhase:Start(15)
end
end
end
end
end
mod.UNIT_SPELLCAST_STOP = mod.UNIT_SPELLCAST_CHANNEL_STOP