SA-MP Forums Archive
[AYUDA] Tiempo para reusar un comando - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: [AYUDA] Tiempo para reusar un comando (/showthread.php?tid=179803)



[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,