[Ajuda] SetTimer
#1

Estou fazendo uma coisa simples que й assim, apos o player levar dano, ele tem que esperar 3 segundos para poder usar qualquer teleporte.

Fis assim


pawn Код:
public OnPlayerTakeDamage
{
    UsarComando[playerid] = 0;
    SetTimer("Liberar", 3000, 0);
}

public Liberar(playerid)
{
    UsarComando[playerid]  = 1;
}

Comando: /ir
{
   if(UsarComando[playerid] == 1)
   {
       SetPlayerPos
   }
   else
   {
       SendClientMessage: Espere 3 segundos apos levar o dano
   }
}
Ai fis uma coisa pra poder testar, coloquei um SendClientMessage na public Liberar pra ver pra quem a mensagem iria, e a mensagem vem pra mim e nao pra quem tomou o dano, entao nesse caso, o comando bloquearia pra mim e nao pro inimigo, acho que o problema esta no SetTimer ou na public Liberar, se alguйm souber como resolver, poderia me explicar como funciona, pois nao quero apenas o comando, quero entender como funciona. +rep
Reply
#2

Код:
SetTimerEx("Liberar", 3000, false, "i", playerid);
Reply
#3

Use SetTimerEx
Se tiver duvidas olhe esse tutorial do Jonathan https://sampforum.blast.hk/showthread.php?tid=557107

@Edit pra nгo precisar usar a condiзгo em todos os comandos se voce estiver usando zcmd
pode usar da seguinte maneira:

PHP код:
public OnPlayerCommandReceived(playeridcmdtext[])
{
    if(
UsarComando[playerid] == 1// condiзгo que nгo podera usar o comando
    
{
        
SendClientMessage(playerid, -1"Espere 3 segundos apos levar o dano para usar comando");
        return 
0;
    }
    return 
1;

Reply
#4

Quote:
Originally Posted by GabrielDias_Invision
Посмотреть сообщение
Код:
SetTimerEx("Liberar", 3000, false, "i", playerid);
Detalhe, se o valor 1 habilita o player a usar um comando, vc tem q setar o valor 1 para todos no server... Caso contrбrio ninguem poderб usar o comando pq a partir do momento que voce cria uma variavel sem valor definido, ela recebe 0.

@
Criei outro post, botгo errado. Desculpa.
Reply
#5

Nesse caso nгo achei necessбrio SetTimerEx nem SetTimer, segue o exemplo:
PHP код:
new TempoComando[MAX_PLAYERS];

CMD:exemplo(playerid)
{
    if(
gettime() - TempoComando[playerid] < 60
        return 
SendClientMessage(playerid0xFF0000FF"Vocк nгo pode usar esse comando dentro de 1 minuto!"); //checa o tempo do comando
    
TempoComando[playerid] = gettime();
    
SendClientMessage(playerid, -1"Eu usei meu comando, agora irei usar depois de 1 minuto! HAHA");
    return 
1;
}

public 
OnPlayerTakeDamage
{
    
TempoComando[playerid] = gettime();
    return 
1;
}
CMD:ir(playerid)
{
    if(
gettime() - TempoComando[playerid] < 3//meus segundos aqui, no caso vc usou 3sgd
        
return SendClientMessage(playerid0xFF0000FF"Vocк nгo pode usar esse comando dentro de 3 segundos"); //checa o tempo do comando
    //apуs a checagem faзa o seu comando    
    
SetPlayerPos ...
    return 
1;

Reply
#6

Quote:
Originally Posted by Krusheer
Посмотреть сообщение
Nesse caso nгo achei necessбrio SetTimerEx nem SetTimer, segue o exemplo:
PHP код:
new TempoComando[MAX_PLAYERS];
CMD:exemplo(playerid)
{
    if(
gettime() - TempoComando[playerid] < 60
        return 
SendClientMessage(playerid0xFF0000FF"Vocк nгo pode usar esse comando dentro de 1 minuto!"); //checa o tempo do comando
    
TempoComando[playerid] = gettime();
    
SendClientMessage(playerid, -1"Eu usei meu comando, agora irei usar depois de 1 minuto! HAHA");
    return 
1;
}
public 
OnPlayerTakeDamage
{
    
TempoComando[playerid] = gettime();
    return 
1;
}
CMD:ir(playerid)
{
    if(
gettime() - TempoComando[playerid] < 3//meus segundos aqui, no caso vc usou 3sgd
        
return SendClientMessage(playerid0xFF0000FF"Vocк nгo pode usar esse comando dentro de 3 segundos"); //checa o tempo do comando
    //apуs a checagem faзa o seu comando    
    
SetPlayerPos ...
    return 
1;

й basicamente a mesma coisa uma vez que o timer vem sem loop, mas sim, й uma outra forma de se fazer usando gettime. Obrigado pela observaзгo amigo.
Reply
#7

Uma coisa que nгo se entendi й sobre a diferenзa entra o SetTimer e SetTimerEx, me corrijam se eu estiver errado

public OnPlayerTakeDamage
{
SetTimerEx("Teste", 3000, 0, "i", playerid);
}

public Teste(playerid); // Nesse caso aqui do (playerid), no SetTimerEx, ele permanece o objetivo que o OnPlayerTakeDamage da ao playerid??
Reply
#8

Quote:
Originally Posted by SrDonalds
Посмотреть сообщение
Uma coisa que nгo se entendi й sobre a diferenзa entra o SetTimer e SetTimerEx, me corrijam se eu estiver errado

public OnPlayerTakeDamage
{
SetTimerEx("Teste", 3000, 0, "i", playerid);
}

public Teste(playerid); // Nesse caso aqui do (playerid), no SetTimerEx, ele permanece o objetivo que o OnPlayerTakeDamage da ao playerid??
Sim.

SetTimer nгo funcionarб apenas para um player entendeu? Caso 2 players usar o comando, irб dar um conflito nos Timers.

Usando SetTimerEx:
pawn Код:
public OnPlayerTakeDamage(playerid)
{
    UsarComando[playerid] = 0;
    SetTimerEx("Liberar", 3000, false, "i", playerid);
}
forward Liberar(playerid);
public Liberar(playerid)
{
    UsarComando[playerid]  = 1;
}

Comando: /ir
{
   if(UsarComando[playerid] == 1)
   {
       SetPlayerPos
   }
   else
   {
       SendClientMessage: Espere 3 segundos apos levar o dano
   }
}
Mais faзa da maneira que eu falei amigo, й mais fбcil alйm de pesar menos no servidor, usando esses Timers sem necessidade :/
Reply
#9

Quote:
Originally Posted by GabrielDias_Invision
Посмотреть сообщение
Le aqui pra vc entender forum.sa-mp.com/showthread.php?t=557107
Perdгo, o topico do colega acima citando esse tutorial tinha passado despercebido

Quote:
Originally Posted by Krusheer
Посмотреть сообщение
Sim.

SetTimer nгo funcionarб apenas para um player entendeu? Caso 2 players usar o comando, irб dar um conflito nos Timers.

Usando SetTimerEx:
pawn Код:
public OnPlayerTakeDamage(playerid)
{
    UsarComando[playerid] = 0;
    SetTimerEx("Liberar", 3000, false, "i", playerid);
}
forward Liberar(playerid);
public Liberar(playerid)
{
    UsarComando[playerid]  = 1;
}

Comando: /ir
{
   if(UsarComando[playerid] == 1)
   {
       SetPlayerPos
   }
   else
   {
       SendClientMessage: Espere 3 segundos apos levar o dano
   }
}
Mais faзa da maneira que eu falei amigo, й mais fбcil alйm de pesar menos no servidor, usando esses Timers sem necessidade :/
Sim, pretendo fazer do seu jeito, mais primeiro preciso entender como funciona o SetTimerEx pra usar em outras coisas.
Reply
#10

Quote:
Originally Posted by SrDonalds
Посмотреть сообщение
Perdгo, o topico do colega acima citando esse tutorial tinha passado despercebido



Sim, pretendo fazer do seu jeito, mais primeiro preciso entender como funciona o SetTimerEx pra usar em outras coisas.
Apenas veja o tуpico do Jonathan que vc entederб td
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)