Problema GetTickCount() - israel - 23/12/2023
Estou enfrentando alguns problemas relacionados ao GetTickCount, por algum motivo, creio que ele está armazenando um valor incorreto.
Estou inicializando a variavel UltimoCheck quando o jogador conecta e mesmo assim e mostrado a mensagem de 5 segundos.
Código PHP: [INFO]: TICK 0ms -1454761564ms.
Código PHP: new string[128]; format(string, sizeof string, "[INFO]: TICK %dms %dms.",UltimoCheck[playerid], GetTickCount()); SendClientMessage(playerid, COR_AMARELO, string); UltimoCheck[playerid] = GetTickCount(); format(string, sizeof string, "[INFO]: TICK %dms.",UltimoCheck[playerid]); SendClientMessage(playerid, COR_AMARELO, string); new result; result = GetTickCount()-UltimoCheck[playerid]; format(string, sizeof string, "[INFO]: TICK %dms.",result); SendClientMessage(playerid, COR_AMARELO, string);
1x [12:09:50] [INFO]: TICK 0ms -1453380023ms. [12:09:50] [INFO]: TICK -1453380023ms. [12:09:50] [INFO]: TICK 0ms.
2x [12:09:55] [INFO]: TICK -1453380023ms -1453375043ms. [12:09:55] [INFO]: TICK -1453375043ms. [12:09:55] [INFO]: TICK 0ms.
3x [12:10:09] [INFO]: TICK -1453375043ms -1453361650ms. [12:10:09] [INFO]: TICK -1453361650ms. [12:10:09] [INFO]: TICK 0ms.
Código PHP: new UltimoCheck[MAX_PLAYERS];
CMD:farejar(playerid, params[]) { if(!CheckConnect(playerid)) return 0; if(IsACop(playerid)) { new string[128]; format(string, sizeof string, "[INFO]: TICK %dms %dms.",UltimoCheck[playerid], GetTickCount()); SendClientMessage(playerid, COR_AMARELO, string); if(GetTickCount()-UltimoCheck[playerid] < 5000) return SendClientMessage(playerid, COR_AMARELO, "Aguarde 5 segundos para usar seu cao novamente.");
UltimoCheck[playerid] = GetTickCount(); switch(random(6)) { case 1, 2, 3: if(PertoMaconha(playerid)) { format(stringZCMD, sizeof stringZCMD, "Cao Farejador: Seu cao farejou possiveis %d plantacoes de maconha, num raio de 200 metros!", PertoMaconha(playerid)); SendClientMessage(playerid, COR_AMARELO, stringZCMD); } else { SendClientMessage(playerid, COR_AMARELO, "Cao farejador: Seu cao nao farejou nenhuma plantacao em um raio de 200 metros!"); } default: SendClientMessage(playerid, COR_AMARELO, "Seu cao nao conseguiu farejar uma plantacao de maconha, tente novamente!"); } } return 1; }
RE: Problema GetTickCount() - xbruno1000x - 23/12/2023
Tenta fazer com a função gettime().
Segue um exemplo pra te ajudar:
Código: new TargetActorID = GetPlayerTargetDynamicActor(playerid);
new Float:x, Float:y, Float:z;
if(TargetActorID == LOJAAcessorios)
{
if(gettime() < tempoassalto[playerid]) return 1; //aqui verifica se já se passaram 60 segundos.
{
tempoassalto[playerid] = gettime()+60; // aqui é definido o tempo que é necessário esperar.
ApplyDynamicActorAnimation(TargetActorID, "ROB_BANK","SHP_HandsUp_Scr", 4.1, 0, 1, 1, 1, 3000);
GetPlayerPos(playerid, x, y, z);
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) PlayerPlaySound(i, 3401, x, y, z);
SendClientMessage(playerid, -1, "Mantenha sua arma apontada para assaltar.");
SetTimerEx("assaltoloja", 30000, false, "i", playerid);
}
}
Nesse exemplo o jogador necessita esperar 60 segundos para realizar um assalto novamente.
RE: Problema GetTickCount() - israel - 23/12/2023
Obrigado por demonstrar essa maneira. Dessa forma, o comando funciona perfeitamente. Parece que a função GetTickCount está apresentando um erro de overflow de inteiro, o que explica os números negativos. Nunca havia enfrentado um problema desse tipo com essa função antes.
@Edit
Encontrei essa repositorio com uma solução.
https://github.com/ScavengeSurvive/tick-difference/tree/master
|