After so many years, here's the improved version.
Code:
stock void SetPawnTimer(Function func, float thinktime = 0.1, const any[] args, const int len)
{
DataPack thinkpack = new DataPack();
thinkpack.WriteFunction(func);
thinkpack.WriteCell(len);
for( int i; i<len; i++ )
thinkpack.WriteCell(args[i]);
CreateTimer(thinktime, DoPawnTimer, thinkpack, TIMER_DATA_HNDL_CLOSE);
}
public Action DoPawnTimer(Handle t, DataPack pack)
{
pack.Reset();
Function fn = pack.ReadFunction();
Call_StartFunction(null, fn);
int len = pack.ReadCell();
for( int i; i<len; i++ ) {
any param = pack.ReadCell();
Call_PushCell(param);
}
Call_Finish();
return Plugin_Continue;
}
__________________