13.04.2013, 22:17
entao, GetTickCount(); obtem o um valor em milesimos de segundo, nao vou falar mt pq nao й mt relevante para o caso, mas pense, se ele obtem em milesimos de segundo a cada instante, й so criar uma logica
pawn Код:
CMD:r(playerid)
{
if(JaReparou[playerid] == 1)
{
format(gString, sizeof(gString), "[ERRO]: Vocк ja reparou seu veнculo, por favor espere %d segundos.", ((LiberarReparo*1000)-(GetTickCount() - AbaixarTempo[playerid])/1000));//LiberarReparo estб em segundos, e queremos liberar em 3 segundos, 3*1000 = 3000, o GetTickCount-AbaixarTempo, ou seja, ao tempo de agora vamos subetrair o de quand digitamos o comando, imagine que ja passaram dois segundos ou seja 2000 sejundo o GetTickCount, ora, 3000-2000=1000, dividimos por 1000 e й =1 ou seja, falta 1 segundo
SendClientMessage(playerid, erro, gString);
return 1;//usamos o return 1 porque no caso de dar este erro nao queremos que execute o restante comando!
}
//o resto do cmd
SetTimerEx("LiberarReparo", 30000, false, "i", playerid);
JaReparou[playerid] = 1;
AbaixarTempo[playerid] = GetTickCount();//isso vem para aqui, nao dentro do if(JaReparou[playerid] == 1) porque senao cada vez que desse esse erro, contaria novamente e assim nunca terminava
return 1;
}
forward LiberarReparo(playerid)
{
JaReparou[playerid] = 0;
KillTimer(LiberarReparo(playerid));//nao precisa disso, so se o timer usa-se "repeating", ou seja, se fosse SetTimerEx("LiberarReparo", 30000, true, "i", playerid); portanto pode apagar isso
return 1;
}

