Comunidad De Diversion Latina Y Diversion Sa-mp
¡Wow! Que Onda Colega!, Soy Zhelox! (:! Que esperas a Iniciar Sesión D: ! Así podrás ver los Nuevos Mensajes del Foro y sus Actualizaciones ;D !.... Ohm... Espera!, ¿Eres Nuevo?, ¿Necesitas Saber Algo? ¿Preguntar Alguna Duda? ¿Necesitas Ayuda en tu server?, o: ! Pues que esperas a Registrarte en Nuestra Comunidad De SA: MP de Diversión Latinoamericana Y a Resolver Todas Tus Dudas y Problemas Referidos Al Juego ;D ! Y desde Luego Actuar Con Nosotros y Nuestra Comunidad Si es que lo Deseas... Suerte! Very Happy

Unirse al foro, es rápido y fácil

Comunidad De Diversion Latina Y Diversion Sa-mp
¡Wow! Que Onda Colega!, Soy Zhelox! (:! Que esperas a Iniciar Sesión D: ! Así podrás ver los Nuevos Mensajes del Foro y sus Actualizaciones ;D !.... Ohm... Espera!, ¿Eres Nuevo?, ¿Necesitas Saber Algo? ¿Preguntar Alguna Duda? ¿Necesitas Ayuda en tu server?, o: ! Pues que esperas a Registrarte en Nuestra Comunidad De SA: MP de Diversión Latinoamericana Y a Resolver Todas Tus Dudas y Problemas Referidos Al Juego ;D ! Y desde Luego Actuar Con Nosotros y Nuestra Comunidad Si es que lo Deseas... Suerte! Very Happy
Comunidad De Diversion Latina Y Diversion Sa-mp
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

[Tutorial] Timers

4 participantes

Ir abajo

[Tutorial] Timers Empty [Tutorial] Timers

Mensaje por Ronald Dom Sep 14, 2008 7:44 pm

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!
Ronald
Ronald
Root Admin
Root Admin

Cantidad de envíos : 1393
Puntos diversión latina. : -8
Fecha de inscripción : 10/09/2008

https://diversionlatina.forosactivos.net

Volver arriba Ir abajo

[Tutorial] Timers Empty Re: [Tutorial] Timers

Mensaje por Chaca Dom Jul 19, 2009 12:57 am

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 Very Happy

Chaca
Miembro premium
Miembro premium

Cantidad de envíos : 101
Puntos diversión latina. : 6
Fecha de inscripción : 18/07/2009

Volver arriba Ir abajo

[Tutorial] Timers Empty Re: [Tutorial] Timers

Mensaje por Ronald Dom Jul 19, 2009 1:35 am

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 Very Happy


No entendi explicate mejor xD.!
Ronald
Ronald
Root Admin
Root Admin

Cantidad de envíos : 1393
Puntos diversión latina. : -8
Fecha de inscripción : 10/09/2008

https://diversionlatina.forosactivos.net

Volver arriba Ir abajo

[Tutorial] Timers Empty Re: [Tutorial] Timers

Mensaje por Chaca Dom Jul 19, 2009 2:15 am

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

Chaca
Miembro premium
Miembro premium

Cantidad de envíos : 101
Puntos diversión latina. : 6
Fecha de inscripción : 18/07/2009

Volver arriba Ir abajo

[Tutorial] Timers Empty Re: [Tutorial] Timers

Mensaje por chaoz Miér Ago 05, 2009 12:49 am

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
Leecher

Cantidad de envíos : 1
Puntos diversión latina. : 0
Fecha de inscripción : 05/08/2009

Volver arriba Ir abajo

[Tutorial] Timers Empty Re: [Tutorial] Timers

Mensaje por Lautaro_eb Dom Oct 25, 2009 10:14 am

la verdad es k no entendi nada

Lautaro_eb
Leecher
Leecher

Cantidad de envíos : 4
Puntos diversión latina. : 0
Fecha de inscripción : 25/10/2009

Volver arriba Ir abajo

[Tutorial] Timers Empty Re: [Tutorial] Timers

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.