I use these stock functions to maintain timers for clients.
PHP Code:
stock Handle:g_ClientTimers[MAXPLAYERS+1];
stock CreateClientTimer(client, Float:interval, Timer:func, flags=TIMER_REPEAT)
{
if (g_ClientTimers[client] == INVALID_HANDLE)
g_ClientTimers[client] = CreateTimer(interval,func,client,flags);
}
stock KillClientTimer(client)
{
new Handle:timer=g_ClientTimers[client];
if (timer != INVALID_HANDLE)
{
KillTimer(timer);
g_ClientTimers[client] = INVALID_HANDLE;
}
}
stock KillAllClientTimers()
{
for (new i = 1; i <= MaxClients; i++)
KillClientTimer(i);
}
Example usage:
PHP Code:
public Action:PlayerSpawnEvent(Handle:event,const String:name[],bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event,"userid"));
if (client > 0)
{
CreateClientTimer(client, 3.0, DoSomething, TIMER_REPEAT);
}
return Plugin_Continue;
}
public OnPlayerDeathEvent(Handle:event,const String:name[],bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event,"userid"));
if (client > 0)
{
KillClientTimer(client);
}
}