[Ajuda] GetTickCount
#1

Dae pessoal, boas ?

Bom, hoje vim aqui para pedir ajuda sobre GetTickCount, ja pesquisei na Wiki, e nгo consigo entender, ja vi alguns tutoriais, mais nгo estгo me ajudando no que eu estou querendo criar...

Cуdigo:

pawn Код:
CMD:r(playerid)
{
    if(JaReparou[playerid] == 1)
    {
        AbaixarTempo = GetTickCount();
        format(gString, sizeof(gString), "[ERRO]: Vocк ja reparou seu veнculo, por favor espere %d segundos.", GetTickCount() - AbaixarTempo[playerid] < LiberarReparo*1000);
        SendClientMessage(playerid, erro, gString);
    }
   
    if(BlockCMD[playerid] == 1) return SendClientMessage(playerid, erro, "[ERRO]: Vocк estб em uma Arena DM, para sair use /SairDM");
    if (GetPlayerMoney(playerid) < 500) return SendClientMessage(playerid, erro, "[ERRO]: Vocк nгo tem grana suficiente !"),PlayerPlaySound(playerid, 1053, 0.0, 0.0, 0.0);
    RepairVehicle(GetPlayerVehicleID(playerid));
    GivePlayerMoney(playerid, -500);
   
    format(gString, sizeof(gString), "{FFFF00}%s {FFD700}reparou o seu veнculo {9ACD32}( /R & /Reparar )", nome(playerid));
    SendClientMessageToAll(comando, gString);
   
    SetTimerEx("LiberarReparo", 30000, false, "i", playerid);
    JaReparou[playerid] = 1;
    return 1;
}
Forward:

pawn Код:
forward LiberarReparo(playerid)
{
    JaReparou[playerid] = 0;
    KillTimer(LiberarReparo(playerid));
    return 1;
}
New's:

pawn Код:
new JaReparou[MAX_PLAYERS];
new AbaixarTempo[MAX_PLAYERS];
Nota: A funзгo й Getar o numero que resta para o jogador poder re-utilizar o comando (em segundos).
Reply
#2

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;
}
Reply
#3

Quote:
Originally Posted by DartakousLien
Посмотреть сообщение
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;
}
Nгo dб amigo, 6 erros:

Код:
C:\Users\Cliente\Desktop\BRASIL ULTIMATE WAR EM LOS SANTOS!\gamemodes\BGLS.pwn(7663) : error 075: input line too long (after substitutions)
C:\Users\Cliente\Desktop\BRASIL ULTIMATE WAR EM LOS SANTOS!\gamemodes\BGLS.pwn(7664) : error 076: syntax error in the expression, or invalid function call
C:\Users\Cliente\Desktop\BRASIL ULTIMATE WAR EM LOS SANTOS!\gamemodes\BGLS.pwn(7665) : error 017: undefined symbol "gundo"
C:\Users\Cliente\Desktop\BRASIL ULTIMATE WAR EM LOS SANTOS!\gamemodes\BGLS.pwn(7686) : error 075: input line too long (after substitutions)
C:\Users\Cliente\Desktop\BRASIL ULTIMATE WAR EM LOS SANTOS!\gamemodes\BGLS.pwn(8601) : error 001: expected token: ";", but found "{"
C:\Users\Cliente\Desktop\BRASIL ULTIMATE WAR EM LOS SANTOS!\gamemodes\BGLS.pwn(8604) : error 010: invalid function or declaration
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


6 Errors.
@EDIT:
da 4 erros :P

Код:
C:\Users\Cliente\Desktop\BRASIL ULTIMATE WAR EM LOS SANTOS!\gamemodes\BGLS.pwn(7663) : error 075: input line too long (after substitutions)
C:\Users\Cliente\Desktop\BRASIL ULTIMATE WAR EM LOS SANTOS!\gamemodes\BGLS.pwn(7664) : error 076: syntax error in the expression, or invalid function call
C:\Users\Cliente\Desktop\BRASIL ULTIMATE WAR EM LOS SANTOS!\gamemodes\BGLS.pwn(7665) : error 017: undefined symbol "gundo"
C:\Users\Cliente\Desktop\BRASIL ULTIMATE WAR EM LOS SANTOS!\gamemodes\BGLS.pwn(7686) : error 075: input line too long (after substitutions)
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


4 Errors.
Reply
#4

Esse 'gundo' nгo e do code do Darta nao
Reply
#5

Quote:
Originally Posted by StringBR
Посмотреть сообщение
Esse 'gundo' nгo e do code do Darta nao
Poisй, era uma linha contendo o mбximo de carбcteres permitidos...

Agora apenas 1 erro:

Код:
C:\Users\Cliente\Desktop\BRASIL ULTIMATE WAR EM LOS SANTOS!\gamemodes\BGLS.pwn(7664) : error 076: syntax error in the expression, or invalid function call
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


1 Error.
Linha:

pawn Код:
format(gString, sizeof(gString), "[ERRO]: Vocк ja reparou seu veнculo, por favor espere %d segundos.", ((LiberarReparo*1000)-(GetTickCount() - AbaixarTempo[playerid])/1000));
Reply
#6

Tem algum parametro errado ai.
Reply
#7

Malz pelo Double Post, fуrum lagou....
Reply
#8

Eu editei o cуdigo, porem quando eu uso o comando, diz que falta 7651561651 segundos...

Cуdigo:

pawn Код:
format(gString, sizeof(gString), "[ERRO]: Vocк ja reparou seu veнculo, por favor espere %d segundos.", GetTickCount() - AbaixarTempo[playerid]*60000);
Reply
#9

pawn Код:
format(gString, sizeof(gString), "[ERRO]: Vocк ja reparou seu veнculo, por favor espere %d segundos.",((LiberarReparo*1000)-(GetTickCount()-AbaixarTempo[playerid]))/1000);
tinha trocado um )
lembrando que LiberarReparo e AbaixarTempo sao to tipo new certo? se tiver a usar Float ou bool й obvio que da erro!

@EDIT
obvio que da esses segundos todos ... segundo a lei da matematica, divisao e multiplicacao tem prioridade sobre soma e subtracao, logo vai multiplicar primeiro AbaixarTempo por 60000 e so depois tirar o GetTickCount()
pra tirar primeiro o GetTickCount() tinha de usar ()
pawn Код:
(GetTickCount()-AbaixarTempo[playerid])*60000
Reply
#10

Quote:
Originally Posted by DartakousLien
Посмотреть сообщение
pawn Код:
format(gString, sizeof(gString), "[ERRO]: Vocк ja reparou seu veнculo, por favor espere %d segundos.",((LiberarReparo*1000)-(GetTickCount()-AbaixarTempo[playerid]))/1000);
tinha trocado um )
lembrando que LiberarReparo e AbaixarTempo sao to tipo new certo? se tiver a usar Float ou bool й obvio que da erro!

@EDIT
obvio que da esses segundos todos ... segundo a lei da matematica, divisao e multiplicacao tem prioridade sobre soma e subtracao, logo vai multiplicar primeiro AbaixarTempo por 60000 e so depois tirar o GetTickCount()
pra tirar primeiro o GetTickCount() tinha de usar ()
pawn Код:
(GetTickCount()-AbaixarTempo[playerid])*60000
Cara oque eu estou querendo й que diga assim:

Quote:

Vocк ja reparou seu veнculo, por favor espere 30 segundos!
Vocк ja reparou seu veнculo, por favor espere 29 segundos!
Vocк ja reparou seu veнculo, por favor espere 28 segundos!
Vocк ja reparou seu veнculo, por favor espere 27 segundos!
Vocк ja reparou seu veнculo, por favor espere 26 segundos!
Vocк ja reparou seu veнculo, por favor espere 25 segundos!
Vocк ja reparou seu veнculo, por favor espere 24 segundos!
...
E assim por diante.

Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)