SetTimer -
SrDonalds - 07.05.2015
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
Re: SetTimer -
GabrielDias_Invision - 07.05.2015
Код:
SetTimerEx("Liberar", 3000, false, "i", playerid);
Re: SetTimer -
Cleyson - 07.05.2015
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(playerid, cmdtext[])
{
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;
}
Re: SetTimer -
GabrielDias_Invision - 07.05.2015
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.
Re: SetTimer -
Krusheer - 07.05.2015
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(playerid, 0xFF0000FF, "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(playerid, 0xFF0000FF, "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;
}
Re: SetTimer -
GabrielDias_Invision - 07.05.2015
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(playerid, 0xFF0000FF, "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(playerid, 0xFF0000FF, "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.
Re: SetTimer -
SrDonalds - 07.05.2015
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??
Re: SetTimer -
Krusheer - 07.05.2015
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 :/
Re: SetTimer -
SrDonalds - 07.05.2015
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.
Re: SetTimer -
Krusheer - 07.05.2015
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