local mod = DBM : NewMod ( " PortalTimers " , " DBM-Party-WotLK " , 12 )
local L = mod : GetLocalizedStrings ( )
mod : SetRevision ( " 20240412191704 " )
mod : SetCreatureID ( 30658 )
mod : RegisterEvents (
" UPDATE_UI_WIDGET " ,
" UNIT_DIED " ,
" CHAT_MSG_MONSTER_YELL "
)
mod.noStatistics = true
local warningPortalNow = mod : NewAnnounce ( " WarningPortalNow " , 2 , 57687 )
local warningPortalSoon = mod : NewAnnounce ( " WarningPortalSoon " , 1 , 57687 )
local warningBossNow = mod : NewAnnounce ( " WarningBossNow " , 4 , 33341 )
local timerPortalIn = mod : NewTimer ( 122 , " TimerPortalIn " , 57687 , nil , nil , 1 )
mod : AddBoolOption ( " ShowAllPortalTimers " , false , " timer " ) --rate they spawn seems to accelerate slowly over time. thus making timers inaccurate by end of fight
local lastWave = 0
function mod : UPDATE_UI_WIDGET ( table )
local id = table.widgetID
if id ~= 566 and id ~= 3895 then return end
local widgetInfo = C_UIWidgetManager.GetIconAndTextWidgetVisualizationInfo ( id )
if widgetInfo and widgetInfo.text then
local text = widgetInfo.text
local wave = text : match ( " (%d+).+18 " )
if not wave then
wave = 0
end
wave = tonumber ( wave ) or 0
if wave < lastWave then
lastWave = 0
end
if wave > lastWave then
warningPortalSoon : Cancel ( )
timerPortalIn : Cancel ( )
if wave == 6 or wave == 12 or wave == 18 then
warningBossNow : Show ( )
else
warningPortalNow : Show ( wave )
if self.Options . ShowAllPortalTimers then
timerPortalIn : Start ( 122 , wave + 1 )
warningPortalSoon : Schedule ( 112 )
end
end
lastWave = wave
end
end
end
function mod : UNIT_DIED ( args )
local z = mod : GetCIDFromGUID ( args.destGUID )
if z == 29266 or z == 29312 or z == 29313 or z == 29314 or z == 29315 or z == 29316 -- bosses
or z == 32226 or z == 32230 or z == 32231 or z == 32234 or z == 32235 or z == 32237 then -- boss spirits (in case you wipe)
timerPortalIn : Start ( self : IsClassic ( ) and 30 or 20 , lastWave + 1 )
warningPortalSoon : Schedule ( self : IsClassic ( ) and 25 or 15 )
end
end
function mod : CHAT_MSG_MONSTER_YELL ( msg )
if msg == L.Sealbroken or msg : find ( L.Sealbroken ) then
self : SendSync ( " Wipe " )
end
end
function mod : OnSync ( msg , arg )
if msg == " Wipe " then
warningPortalSoon : Cancel ( )
timerPortalIn : Cancel ( )
end
end