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.

69 lines
2.3 KiB

---@class DBMCoreNamespace
local private = select(2, ...)
local L = DBM_CORE_L
---@class EnrageTimer
local enragePrototype = private:GetPrototype("EnrageTimer")
---@class DBMMod
local bossModPrototype = private:GetPrototype("DBMMod")
local mt = {__index = enragePrototype}
function enragePrototype:Start(timer)
--User only has timer object exposed in mod options, check that here to also prevent the warnings.
if not self.owner.Options.timer_berserk then return end
timer = timer or self.timer or 600
timer = timer <= 0 and self.timer - abs(timer) or timer
self.bar:SetTimer(timer)
self.bar:Start()
if not DBM.Options.ShowBerserkWarnings then return end
if self.warning1 then
if timer > 660 then self.warning1:Schedule(timer - 600, 10, L.MIN) end
if timer > 300 then self.warning1:Schedule(timer - 300, 5, L.MIN) end
if timer > 180 then self.warning2:Schedule(timer - 180, 3, L.MIN) end
end
if self.warning2 then
if timer > 60 then self.warning2:Schedule(timer - 60, 1, L.MIN) end
if timer > 30 then self.warning2:Schedule(timer - 30, 30, L.SEC) end
if timer > 10 then self.warning2:Schedule(timer - 10, 10, L.SEC) end
end
end
function enragePrototype:Schedule(t)
return self.owner:Schedule(t, self.Start, self)
end
function enragePrototype:Cancel()
self.owner:Unschedule(self.Start, self)
if self.warning1 then
self.warning1:Cancel()
end
if self.warning2 then
self.warning2:Cancel()
end
self.bar:Stop()
end
enragePrototype.Stop = enragePrototype.Cancel
function bossModPrototype:NewBerserkTimer(timer, text, barText, barIcon)
timer = timer or 600
local warning1 = self:NewAnnounce(text or L.GENERIC_WARNING_BERSERK, 1, nil, nil, false)
local warning2 = self:NewAnnounce(text or L.GENERIC_WARNING_BERSERK, 4, nil, nil, false)
--timer, name, icon, optionDefault, optionName, colorType, inlineIcon, keep, countdown, countdownMax, r, g, b, spellId, requiresCombat, waCustomName, customType
local bar = self:NewTimer(timer, barText or L.GENERIC_TIMER_BERSERK, barIcon or 28131, nil, "timer_berserk", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, "berserk")
---@class EnrageTimer
local obj = setmetatable(
{
warning1 = warning1,
warning2 = warning2,
bar = bar,
timer = timer,
owner = self
},
mt
)
return obj
end