Portal SAMP
[Ajuda] Problema GetTickCount() - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Problema GetTickCount() (/showthread.php?tid=4330)



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(stringsizeof string"[INFO]: TICK %dms %dms.",UltimoCheck[playerid], GetTickCount());
SendClientMessage(playeridCOR_AMARELOstring);
UltimoCheck[playerid] = GetTickCount();
format(stringsizeof string"[INFO]: TICK %dms.",UltimoCheck[playerid]);
SendClientMessage(playeridCOR_AMARELOstring);
new 
result;
result GetTickCount()-UltimoCheck[playerid];
format(stringsizeof string"[INFO]: TICK %dms.",result);
SendClientMessage(playeridCOR_AMARELOstring);


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(playeridparams[])
    {
        if(!CheckConnect(playerid))
    
        return 0;
        if(IsACop(playerid))
        {
            new 
string[128];
            
format(stringsizeof string"[INFO]: TICK %dms %dms.",UltimoCheck[playerid], GetTickCount());
    
        SendClientMessage(playeridCOR_AMARELOstring);
            if(GetTickCount()-UltimoCheck[playerid] < 5000)
                return 
SendClientMessage(playeridCOR_AMARELO"Aguarde 5 segundos para usar seu cao novamente.");

            UltimoCheck[playerid] = GetTickCount();
            switch(random(6))
            {
                case 123:
                if(PertoMaconha(playerid))
                {
                    format(stringZCMDsizeof stringZCMD"Cao Farejador: Seu cao farejou possiveis %d plantacoes de maconha, num raio de 200 metros!"PertoMaconha(playerid));
                    SendClientMessage(playeridCOR_AMARELOstringZCMD);
                }
                else
                {
                    SendClientMessage(playeridCOR_AMARELO"Cao farejador: Seu cao nao farejou nenhuma plantacao em um raio de 200 metros!");
                }
                default:
                SendClientMessage(playeridCOR_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