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
69 lines
2.3 KiB
|
2 years ago
|
---@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
|