[AYUDA] Tiempo para reusar un comando -
luillixd - 28.09.2010
Hola, quisiera saber como aplico un "antispam" (lo llamaria yo asi), con eso me refiero, a que uses un comando y no se pueda usar hasta que transcurra un determinado tiempo... Por ejemplo, como le aplicaria a este sencillo cmd?
if (strcmp("/chaleco", cmdtext, true, 10) == 0)
{
SetPlayerArmour(playerid,100);
return 1;
}
Les agradeceria mucho que me ayudaran
Re: [AYUDA] Tiempo para reusar un comando -
CristianTdj - 28.09.2010
Crйa una variable que influya sobre el jugador, ej: TiempoChaleco[playerid]; y tras el comando aplicas la variable positivamente y crйas un timer, cuando el tiempo del timer concluya cancelas la variable nuevamente.
Respuesta: [AYUDA] Tiempo para reusar un comando -
luillixd - 28.09.2010
Un ejemplo de lo que va en el cmd?, soy novato en esto :S
Re: [AYUDA] Tiempo para reusar un comando -
Zamaroht - 28.09.2010
Hay una forma mбs eficiente que hacerla con un timer.
En primer lugar, creas una array global para todos los jugadores, por ejemplo:
pawn Код:
new UsarComando[MAX_PLAYERS];
Luego, en la parte del comando, haces algo asн:
pawn Код:
if(!strcmp("/comando", cmdtext))
{
if(GetTickCount() - UsarComando[playerid] > 1000)
{
// Aquн va el cуdigo de tu comando...
UsarComando[playerid] = GetTickCount();
}
}
El 1000 es la cantidad de tiempo en ms que tiene que pasar hasta que se pueda volver a usar el comando (en este ejemplo, un segundo).
GetTickCount devuelve la cantidad de milisegundos que pasaron desde que se iniciу la PC, por lo cual guardando en que momento se usу en una variable, y luego chequeando si pasу cierta cantidad de tiempo desde que se usу por ъltima vez, se puede lograr lo mismo sin usar un timer.
Re: [AYUDA] Tiempo para reusar un comando -
MrDeath537 - 28.09.2010
Es mejor el mйtodo que propuso Zamaroht, evitas usar un Timer comparando los milisegundos que pasaron entre cada acciуn.
Respuesta: [AYUDA] Tiempo para reusar un comando -
TiNcH010 - 28.09.2010
Hola! Si sos novato te sugiero que Seria mejor como lo hizo Zamaroth xD

Salu2
Respuesta: [AYUDA] Tiempo para reusar un comando -
TheChaoz - 28.09.2010
Quote:
Originally Posted by FeniXzone-Tincho2009
Hola! Si sos novato te sugiero que Seria mejor como lo hizo Zamaroth xD 
Salu2 
|
sea o no novato, es la mejor forma, dado que utiliza menos recursos y x ende es mas eficaz
Respuesta: Re: [AYUDA] Tiempo para reusar un comando -
luillixd - 29.09.2010
Quote:
Originally Posted by Zamaroht
Hay una forma mбs eficiente que hacerla con un timer.
En primer lugar, creas una array global para todos los jugadores, por ejemplo:
pawn Код:
new UsarComando[MAX_PLAYERS];
Luego, en la parte del comando, haces algo asн:
pawn Код:
if(!strcmp("/comando", cmdtext)) { if(GetTickCount() - UsarComando[playerid] > 1000) { // Aquн va el cуdigo de tu comando... UsarComando[playerid] = GetTickCount(); } }
El 1000 es la cantidad de tiempo en ms que tiene que pasar hasta que se pueda volver a usar el comando (en este ejemplo, un segundo).
GetTickCount devuelve la cantidad de milisegundos que pasaron desde que se iniciу la PC, por lo cual guardando en que momento se usу en una variable, y luego chequeando si pasу cierta cantidad de tiempo desde que se usу por ъltima vez, se puede lograr lo mismo sin usar un timer.
|
Lo adapte y me quedo asi:
Код:
if (strcmp("/vida", cmdtext, true, 10) == 0)
{
if(IsPlayerVipMember(playerid))
{
if(GetTickCount() - Antispam[playerid] > 300000)
{
SetPlayerHealth(playerid,100);
Antispam[playerid] = GetTickCount();
}
else SendClientMessage(playerid, COLOR_RED, "Tienes que esperar 5 minutos para reusar este comando!");
}
else SendClientMessage (playerid, COLOR_RED, "No eres VIP!");
return 1;
}
return 0;
}
Pero le encontre 2 bugs, cuando escribes /vida varias veces, el te avisa que tienes que esperar 5 minutos y no te da la vida, pero si antes de volver a escribir /vida dices otra cualquier cosa, te la recarga sin ningun aviso ni nada, y el otro es que solo te lo dice cuando tu vida esta en 100, si tu vida baja te la regenera de nuevo al escribir el cmd :S
Pero le consegui 2 bugs,
Re: [AYUDA] Tiempo para reusar un comando -
Miguel - 29.09.2010
Intenta esto:
pawn Код:
if(strcmp("/vida", cmdtext, true) == 0)
{
if(!IsPlayerVipMember(playerid)) return SendClientMessage (playerid, COLOR_RED, "No eres VIP!");
else if((GetTickCount() - Antispam[playerid]) < 300000) return SendClientMessage(playerid, COLOR_RED, "Tienes que esperar 5 minutos para reusar este comando!");
SetPlayerHealth(playerid, 100);
Antispam[playerid] = GetTickCount();
return 1;
}
Respuesta: Re: [AYUDA] Tiempo para reusar un comando -
luillixd - 30.09.2010
Quote:
Originally Posted by Miguel
Intenta esto:
pawn Код:
if(strcmp("/vida", cmdtext, true) == 0) { if(!IsPlayerVipMember(playerid)) return SendClientMessage (playerid, COLOR_RED, "No eres VIP!"); else if((GetTickCount() - Antispam[playerid]) < 300000) return SendClientMessage(playerid, COLOR_RED, "Tienes que esperar 5 minutos para reusar este comando!"); SetPlayerHealth(playerid, 100); Antispam[playerid] = GetTickCount(); return 1; }
|
Excelente, lo testee y funciono a la perfecciуn
їPuedes tener la amabilidad de explicarme estas lineas? (Para entender y no tener la misma duda en el futuro)
if(!IsPlayerVipMember(playerid)) return SendClientMessage (playerid, COLOR_RED, "No eres VIP!");
else if((GetTickCount() - Antispam[playerid]) < 300000) return SendClientMessage(playerid, COLOR_RED,