Haha, no need if I hear it like that.
I have made my own TimerIndexer as I didnt knew about TimerUtils back then.
It works very well and smooth and it is very short.
If I would use hooks, I would be able to do it without additional function calls but like this, I can choose what timers need an index and what not
library timerIndex
globals
hashtable udg_HandleIndex_Hashtable = InitHashtable()//Can be replaced by table.
//Timers
integer udg_NextTimerIndex = 0
boolean array udg_TimerIndex_Occupied
endglobals
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Timers
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function CreateTimerIndex takes timer t returns integer
loop
set udg_NextTimerIndex = udg_NextTimerIndex + 1
if udg_NextTimerIndex > 8191 then
set udg_NextTimerIndex = 1
endif
exitwhen not udg_TimerIndex_Occupied[udg_NextTimerIndex]
endloop
set udg_TimerIndex_Occupied[udg_NextTimerIndex] = true
call SaveInteger(udg_HandleIndex_Hashtable, GetHandleId(t), 0, udg_NextTimerIndex)
return udg_NextTimerIndex
endfunction
function ReleaseTimerIndex takes timer t returns nothing
local integer id = GetHandleId(t)
set udg_TimerIndex_Occupied[LoadInteger(udg_HandleIndex_Hashtable, id, 0)] = false
call RemoveSavedInteger(udg_HandleIndex_Hashtable, id, 0)
endfunction
function GetTimerIndex takes timer t returns integer
return LoadInteger(udg_HandleIndex_Hashtable, GetHandleId(t), 0)
endfunction
endlibrary
I can easily make more for every single kind of handle.
So Im happy with it