[Tutorial] Timers
4 participantes
Comunidad De Diversion Latina Y Diversion Sa-mp :: Ayuda PawnoScript :: Tutoriales Y Documentacion Pawno
Página 1 de 1.
[Tutorial] Timers
Usando TIMERS!
1) Primero que nada, que es un timer?
Un timer es una cosa, que despues de un tiempo, llama a una funcion, una vez o siempre.
2) Que necesitas para usar un timer?
Simplemente una funcion que necesite ser llamada despues de un cierto tiempo, PERO, la funcion debe ser public y estar "forwareada"
3) Como se declara una funcion public y como se la "forwarea"?
Para declararla public, se le pone la palabra public antes del nombre cuando la escribimos (no cuando la llamamos) y para "forwarearla", arriba de todo en nuestro archivo ponemos "forward NOMBRE_DE_LA_FUNCION();"
4) No entendi nada, me das un ejemplo?
Si como no, supongamos que queremos saber cuantos minutos hace que nuestro server esta andando, tonces usamos una variable llamada "minutos" y una vez por minuto la hacemos "minutos++":
Código:
//arriba de todo
new minutos;
forward CadaMinutilloSumoUno();
//en cualquier lado
public CadaMinutilloSumoUno()
{
Minutos++;
}
5) Si, entendi, pero... como se usa eso?
Como es algo que queremos que arranque junto con el server, tenemos que crear el timer junto con el server, osea adentro de "OnGameModeInit"
6) Si, pero que ponemos adentro de OnGameModeInit?
AH! si si, pones esto:
Código:
SetTimer("CadaMinutilloSumoUno",60000,1);
Ahora te explico... tranqui tronco
primero y entre comillas ( osea estas ->") pones el nombre de la funcion, eso si, tiene que ser el nombre EXACTO con mayusculas y munisculas, despues del nombre pones el tiempo, pero el tiempo va en milisegundos, osea 1 segundo -> 1000 milisegundos, yo queria 1 minuto -> 60 segundos -> 60000 milisegundos. El ultimo puede ser 0 o 1, 0 significa que solamente queres que pase una vez y 1 que queres que pase cada vez que pasa ese tiempo. (osea cada 60000 milisegundos).
7) Y si por que se me antoja no quiero que el timer este mas, se puede apagar un timer?
Mas bien! se hace asi, donde lo creas, por ejemplo
Código:
SetTimer("CadaMinutilloSumoUno",60000,1);
pones:
Código:
Variable = SetTimer("CadaMinutilloSumoUno",60000,1);
Y cuando lo queres apagar pones:
Código:
KillTimer(Variable);
Osea todo junto:
Código:
//arriba de todo
new minutos;
new CadaMinutilloSumoUno_timer_id;
forward CadaMinutilloSumoUno();
//en cualquier lado
public CadaMinutilloSumoUno()
{
Minutos++;
}
//adentro de OnGameModeInit:
CadaMinutilloSumoUno_timer_id = SetTimer("CadaMinutilloSumoUno",60000,1);
//Donde quieras y te sirva, por ejemplo adentro de un comando:
KillTimer(CadaMinutilloSumoUno_timer_id);
Se le puede pasar variables a un timer?
No, a un timer normal, a uno "Expecial", se usa asi:
SetTimerEx("nombre_de_la_funcion",Tiempo,repite,"parametros",valores)
9) Que significa eso?
Donde dice "nombre_de_la_funcion" se pone el nombre de la funcion igual q antes,
Donde dice "Tiempo" se pone el tiempo igual que antes
Donde dice "repite" igual que antes 0 no 1 si
Donde dice "parametros" se especifican los parametros como si fuera un string, a saber, si recibe numeros se pone "% d" si recibe numero con coma se pone "% f" si recibe un string se pone "% s" si recibe varios parametros se ponen todos pegados y en el orden asi por ejemplo si recibe 2 numeros y un string = "% d % d % s".
Donde dice "valores" se ponen, separados por comas los parametros, en el orden que deben ir.
Te voy a dar un ejemplo bastante completito en el que usamos un timer normal y uno expecial.
Supongamos que tenemos un sistema de login y si la persona no tiene una cuenta en nuestro server, queremos que una vez por minuto reciba un cartelito que le diga ("dale no seas gil, registrate") y que si tiene cuenta y no se logea a los 30 segundos de entrar, el server lo heche.
Como en el ejemplo no voy a poner el sistema de cuentas, supongamos que tenemos una varible que se llama "Tiene_Cuenta" y otra "Esta_Logueado", seria algo asi
Código:
//arriba de todo
new Tiene_Cuenta[MAX_PLAYERS];
new Esta_Logueado[MAX_PLAYERS];
new KickeadorAutomatico_timer_id[MAX_PLAYERS];
forward KickeadorAutomatico(playerid);
forward Propaganda();
//en cualquier lado
public KickeadorAutomatico(playerid)
{
Kick(playerid);
}
public Propaganda()
{
for (new i=0;i<MAX_PLAYERS;i++)
{
if ((IsPlayerConnected(i))&&(Tiene_Cuenta[i]==false))
{
SendClientMessage(playerid,0xAA33AA33,"No seas gil create una cuenta");
}
}
}
//Adentro de OnGameModeInit tenemos:
SetTimer("Propaganda",60000,1);
//Adentro de OnPlayerConnect tenemos un if mas o menos asi:
if (Tiene_Cuenta[playerid]==true)
{
KickeadorAutomatico_timer_id[playerid]=SetTimerEx("KickeadorAutomatico",30000,0,"% d",playerid);
}
//Ahora adentro del comando /login ponemos el KILL asi no lo kickea despues que se logeo.
KillTimer(KickeadorAutomatico_timer_id[playerid]);
//FIN
Una MUY BUENA Y EXCELENTE COSTUMBRE es despues de matar un timer, setear su valor a -1, no pasa nada si no lo hacen, pero quizas algun dia les tire errores, asi que mejor atajarse no? ejemplo:
Código:
KillTimer(KickeadorAutomatico_timer_id[playerid]);
KickeadorAutomatico_timer_id[playerid]=-1;
Espero que se entienda, y si, pregunten y pregunten y sino, pongo mas ejemplos o algo, de ultima hacemos una conferencia en algun chat
SUERTE!
HASTA LUEGO!
1) Primero que nada, que es un timer?
Un timer es una cosa, que despues de un tiempo, llama a una funcion, una vez o siempre.
2) Que necesitas para usar un timer?
Simplemente una funcion que necesite ser llamada despues de un cierto tiempo, PERO, la funcion debe ser public y estar "forwareada"
3) Como se declara una funcion public y como se la "forwarea"?
Para declararla public, se le pone la palabra public antes del nombre cuando la escribimos (no cuando la llamamos) y para "forwarearla", arriba de todo en nuestro archivo ponemos "forward NOMBRE_DE_LA_FUNCION();"
4) No entendi nada, me das un ejemplo?
Si como no, supongamos que queremos saber cuantos minutos hace que nuestro server esta andando, tonces usamos una variable llamada "minutos" y una vez por minuto la hacemos "minutos++":
Código:
//arriba de todo
new minutos;
forward CadaMinutilloSumoUno();
//en cualquier lado
public CadaMinutilloSumoUno()
{
Minutos++;
}
5) Si, entendi, pero... como se usa eso?
Como es algo que queremos que arranque junto con el server, tenemos que crear el timer junto con el server, osea adentro de "OnGameModeInit"
6) Si, pero que ponemos adentro de OnGameModeInit?
AH! si si, pones esto:
Código:
SetTimer("CadaMinutilloSumoUno",60000,1);
Ahora te explico... tranqui tronco
primero y entre comillas ( osea estas ->") pones el nombre de la funcion, eso si, tiene que ser el nombre EXACTO con mayusculas y munisculas, despues del nombre pones el tiempo, pero el tiempo va en milisegundos, osea 1 segundo -> 1000 milisegundos, yo queria 1 minuto -> 60 segundos -> 60000 milisegundos. El ultimo puede ser 0 o 1, 0 significa que solamente queres que pase una vez y 1 que queres que pase cada vez que pasa ese tiempo. (osea cada 60000 milisegundos).
7) Y si por que se me antoja no quiero que el timer este mas, se puede apagar un timer?
Mas bien! se hace asi, donde lo creas, por ejemplo
Código:
SetTimer("CadaMinutilloSumoUno",60000,1);
pones:
Código:
Variable = SetTimer("CadaMinutilloSumoUno",60000,1);
Y cuando lo queres apagar pones:
Código:
KillTimer(Variable);
Osea todo junto:
Código:
//arriba de todo
new minutos;
new CadaMinutilloSumoUno_timer_id;
forward CadaMinutilloSumoUno();
//en cualquier lado
public CadaMinutilloSumoUno()
{
Minutos++;
}
//adentro de OnGameModeInit:
CadaMinutilloSumoUno_timer_id = SetTimer("CadaMinutilloSumoUno",60000,1);
//Donde quieras y te sirva, por ejemplo adentro de un comando:
KillTimer(CadaMinutilloSumoUno_timer_id);
Se le puede pasar variables a un timer?
No, a un timer normal, a uno "Expecial", se usa asi:
SetTimerEx("nombre_de_la_funcion",Tiempo,repite,"parametros",valores)
9) Que significa eso?
Donde dice "nombre_de_la_funcion" se pone el nombre de la funcion igual q antes,
Donde dice "Tiempo" se pone el tiempo igual que antes
Donde dice "repite" igual que antes 0 no 1 si
Donde dice "parametros" se especifican los parametros como si fuera un string, a saber, si recibe numeros se pone "% d" si recibe numero con coma se pone "% f" si recibe un string se pone "% s" si recibe varios parametros se ponen todos pegados y en el orden asi por ejemplo si recibe 2 numeros y un string = "% d % d % s".
Donde dice "valores" se ponen, separados por comas los parametros, en el orden que deben ir.
Te voy a dar un ejemplo bastante completito en el que usamos un timer normal y uno expecial.
Supongamos que tenemos un sistema de login y si la persona no tiene una cuenta en nuestro server, queremos que una vez por minuto reciba un cartelito que le diga ("dale no seas gil, registrate") y que si tiene cuenta y no se logea a los 30 segundos de entrar, el server lo heche.
Como en el ejemplo no voy a poner el sistema de cuentas, supongamos que tenemos una varible que se llama "Tiene_Cuenta" y otra "Esta_Logueado", seria algo asi
Código:
//arriba de todo
new Tiene_Cuenta[MAX_PLAYERS];
new Esta_Logueado[MAX_PLAYERS];
new KickeadorAutomatico_timer_id[MAX_PLAYERS];
forward KickeadorAutomatico(playerid);
forward Propaganda();
//en cualquier lado
public KickeadorAutomatico(playerid)
{
Kick(playerid);
}
public Propaganda()
{
for (new i=0;i<MAX_PLAYERS;i++)
{
if ((IsPlayerConnected(i))&&(Tiene_Cuenta[i]==false))
{
SendClientMessage(playerid,0xAA33AA33,"No seas gil create una cuenta");
}
}
}
//Adentro de OnGameModeInit tenemos:
SetTimer("Propaganda",60000,1);
//Adentro de OnPlayerConnect tenemos un if mas o menos asi:
if (Tiene_Cuenta[playerid]==true)
{
KickeadorAutomatico_timer_id[playerid]=SetTimerEx("KickeadorAutomatico",30000,0,"% d",playerid);
}
//Ahora adentro del comando /login ponemos el KILL asi no lo kickea despues que se logeo.
KillTimer(KickeadorAutomatico_timer_id[playerid]);
//FIN
Una MUY BUENA Y EXCELENTE COSTUMBRE es despues de matar un timer, setear su valor a -1, no pasa nada si no lo hacen, pero quizas algun dia les tire errores, asi que mejor atajarse no? ejemplo:
Código:
KillTimer(KickeadorAutomatico_timer_id[playerid]);
KickeadorAutomatico_timer_id[playerid]=-1;
Espero que se entienda, y si, pregunten y pregunten y sino, pongo mas ejemplos o algo, de ultima hacemos una conferencia en algun chat
SUERTE!
HASTA LUEGO!
Re: [Tutorial] Timers
como hago para poner que el timmer empieze a contar dp de 5 minutos que empezó el juego y se repita cada 10 minutos?
muchas gracias
muchas gracias
Chaca- Miembro premium
- Cantidad de envíos : 101
Puntos diversión latina. : 6
Fecha de inscripción : 18/07/2009
Re: [Tutorial] Timers
Chaca escribió:como hago para poner que el timmer empieze a contar dp de 5 minutos que empezó el juego y se repita cada 10 minutos?
muchas gracias
No entendi explicate mejor xD.!
Re: [Tutorial] Timers
osea empieza el juego y dentro de 10 minutos por ejemplo aparece un texto... y ese texto quiero que se repita cada 20 minutos. a che, me podes des responer el post que hice xD
https://diversionlatina.forosactivos.net/preguntas-y-peticiones-f2/ayuda-en-mi-score-dice-la-cantidad-de-asesinatos-y-quiero-que-diga-la-cantidad-de-plata-t455.htm
https://diversionlatina.forosactivos.net/preguntas-y-peticiones-f2/ayuda-en-mi-score-dice-la-cantidad-de-asesinatos-y-quiero-que-diga-la-cantidad-de-plata-t455.htm
Chaca- Miembro premium
- Cantidad de envíos : 101
Puntos diversión latina. : 6
Fecha de inscripción : 18/07/2009
Re: [Tutorial] Timers
bro, una pregunta, yo quiero usar el timer para que despues de x tiempo una reja se cierre, para no tener q poner un comando para cerrarla, pero no entendi muy bien como :S
chaoz- Leecher
- Cantidad de envíos : 1
Puntos diversión latina. : 0
Fecha de inscripción : 05/08/2009
Re: [Tutorial] Timers
la verdad es k no entendi nada
Lautaro_eb- Leecher
- Cantidad de envíos : 4
Puntos diversión latina. : 0
Fecha de inscripción : 25/10/2009
Temas similares
» [Tutorial]Segundo tutorial abrir puertos...
» [Tutorial]xObjectS
» Tutorial de Firmas
» [Tutorial]Funcion AddPlayerClassEx
» [Tutorial] Telenstransportaciones con pickups.
» [Tutorial]xObjectS
» Tutorial de Firmas
» [Tutorial]Funcion AddPlayerClassEx
» [Tutorial] Telenstransportaciones con pickups.
Comunidad De Diversion Latina Y Diversion Sa-mp :: Ayuda PawnoScript :: Tutoriales Y Documentacion Pawno
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|