[Guia] Uso del SetTimer, SetTimerEx y KillTimer

Aprende lo que no sabes de este lenguaje y encuentra herramientas y códigos útiles.

Moderador: Ayudantes

Reglas del Foro
  • Si tu código es corto, no crees un tema nuevo para liberarlo, publica un mensaje en el tema [Funciones] ¡Publica tu código aquí!.
  • Si creas una guía, debes explicar el código claramente. Evita poner la explicación en forma de comentarios dentro del mismo y no olvides utilizar el BBCode correspondiente: [Pawn]Código aquí[/Pawn].
  • No postear códigos sin probar. Publicar códigos con errores (que impidan compilar el script para el cual está destinado) en este apartado es motivo de sanción.
  • Si tu código necesita plugins, includes u otros códigos adicionales para funcionar, debes mencionarlo en el mensaje.
  • Si has utilizado códigos de otros autores, recuerda colocar los créditos correspondientes. (El plagio es motivo de sanción).
  • Si tu aporte es para un GameMode en específico, debes publicar el tema en el apartado "Guías y Aportes para GameModes específicos".
Responder
Marihuanero
Aprendiz
Aprendiz
Mensajes: 28
Registrado: 10 Ago 2018 19:45
Ubicación: Venezuela
Reputación: 0

15 Ago 2018 15:49

Una pregunta. ¿"Por ley" a la hora de crear un timer este tiene que tener su misma función para matar el mismo tiempo o al cumplirse el tiempo del timer este desaparece?

Necesito esta informacion para aclarar dudas acerca de un lag futuro a causa de esto.
Aprendiz del pawno. // Saludos desde venezuela (Fuck maduro)
Marihuanero
Aprendiz
Aprendiz
Mensajes: 28
Registrado: 10 Ago 2018 19:45
Ubicación: Venezuela
Reputación: 0

15 Ago 2018 15:56

FailLout escribió:
22 Ene 2017 13:14
Buenas esta guia tratara sobre los timers. ¿Que es un timer? un timer es una funciona nativa de samp donde podremos llamar una funcion en cierto tiempo o cada cierto tiempo.

¿Como funcionan estos timers?
Funcionan de diferentes formas, una es llamar a una funcion y otra llamar una funcion eh! incluirle valores. sea una vez o cada cierto tiempo , el tiempo se mide en milisegundos.

¿Que son milisegundos?
Los milisegundos por asi decirlo son los segundos de los segundos. La manera mas facil y corta de crear tiempo es de la siguiente forma
1000 = 1 segundo

1000 * 60 = 1 minuto

1000 * 60 * 5 = 5 minutos

Para medir minutos en milisegundos sin hacer multiplicaciones

60000 = 1 minuto

300000 = 5 minutos

Medidor de minutos a milisegundos

Tipos de Timers

Tenemos el llamado de funcion que es el SetTimer.
Funciona de la siguiente forma
Entre comillas el nombre exacto de la funcion,el tiempo en milisegundos,si se repetira o no, true para si false para no

Ejemplo
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13

forward CallBackEjemplo(); public CallBackEjemplo()
{
for(new i;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
SendClientMessage(i,-1,"*Esto es un ejemplo");
}
}
return 1;
}
//OnGameModeInit
SetTimer("CallBackEjemplo",1000*60,true); //Llamo a la función CallBackEjemplo cada 1 minuto repitiéndose 
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 13
Tambien tenemos el timer SetTimerEx
Este timer funciona para añadir valores a la funcion, es similar a SetTimer exectuando que se le agregan valores extra
y funciona de la siguiente forma
Entre comiilas nombre de la funcion, tiempo en milisegundos,si se repetira o no,entre comillas valores, valor que se agregara

Ejemplo
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

forward CallBackEjemplo(i); public CallBackEjemplo(i)
{
SendClientMessage(i,-1,"*Esto es un ejemplo");
return 1;
}
//OnPlayerSpawn
SetTimerEx("CallBackEjemplo",1000*60,true,"i",playerid); //Llamo a la función CallBackEjemplo cada 1 minuto repitiéndose 
// "i" = entero

//Tambien se podria ingresar valores flotantes
forward CallBackPos(playerid,Float:x,Float:y,Float:z);
public CallBackPos(playerid,Float:x,Float:y,Float:z)
{
SetPlayerPos(playerid,x,y,z);
SpawnPlayer(playerid);
return 1;
}
//OnPlayerDeath
new Float:x,Float:y,Float:z; GetPlayerPos(playerid,x,y,z);
SetTimerEx("CallBackPos",1000*60,true,"ifff",playerid,x,y,z);
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 20
Tambien podemos matar un tiempo o remover este tiempo para ello tenemos KillTimer

El KillTimer funciona asi:
ID Del Timer

Ejemplo
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

new contador[MAX_PLAYERS],TimerMuerto[MAX_PLAYERS];
forward CallBackEjemplo(i); public CallBackEjemplo(i)
{
if(contador[i] < 10)
{
contador[i] ++;
SendClientMessage(i,-1,"*Esto es un ejemplo");
}
else
{
KillTimer(TimerMuerto[i]);
}
return 1;
}
//OnPlayerSpawn
TimerMuerto[playerid] = SetTimerEx("CallBackEjemplo",1000*60,true,"i",playerid); //Llamo a la función CallBackEjemplo cada 1 minuto repitiéndose

//OnPlayerDeath
KillTimer(TimerMuerto[playerid]);
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 19
Asi se elimina un tiempo. Recuerden esos son solo ejemplos pueden hacerlo por comandos, funciones entre otras formas.

Código: Seleccionar todo

Especificador 	Nombre         Ejemplos
   i, d      	Entero         	1, 42, -10
   c         	Caracter       	a, o, *
   l         	Lógico         	true, false
   b         	binario        	01001, 0b1100
   h, x      	Hex            	1A, 0x23
   o         	Octal          	045 12
   n         	Numero         	42, 0b010, 0xAC, 045
   f         	Float          	0.7, -99.5
   g         	IEEE Float     	0.7, -99.5, INFINITY, -INFINITY, NAN, NAN_E
   u         	Nombre / ID    	Y_Less, 0    (Bot / Jugadores)
   q         	Bot name/id    	ShopBot, 27
   r         	Player name/id 	Y_Less, 42
Espero les haya servido esta corta guia

-hi
Una pregunta. ¿"Por ley" a la hora de crear un timer este tiene que tener su misma función para matar el mismo tiempo o al cumplirse el tiempo del timer este desaparece?

Necesito esta informacion para aclarar dudas acerca de un lag futuro a causa de esto.
Aprendiz del pawno. // Saludos desde venezuela (Fuck maduro)
Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 1050
Registrado: 05 Oct 2017 12:13
Reputación: 113

15 Ago 2018 16:03

Marihuanero escribió:
15 Ago 2018 15:49
Una pregunta. ¿"Por ley" a la hora de crear un timer este tiene que tener su misma función para matar el mismo tiempo o al cumplirse el tiempo del timer este desaparece?

Necesito esta informacion para aclarar dudas acerca de un lag futuro a causa de esto.

Depende, sí es un "timer" repetitivo, lo puedes detener con "KillTimer" (sí es necesario) y sí es un "timer" no repetitivo, pues no se necesita detenerlo porqué cuando llegue a su determinado tiempo no volverá a ejecutarse hasta que se lo llame otra vez.
Trata de no crear "timers" repetitivos por jugador, ya que harás que el CPU haga más procesos y sobretodo aumentará el consumo de memoria del servidor.

- Temporalmente estoy retirado de SA-MP; por lo tanto no me envíen propuestas de proyectos.
- No respondo dudas por privado, usa la sección de preguntas.
Marihuanero
Aprendiz
Aprendiz
Mensajes: 28
Registrado: 10 Ago 2018 19:45
Ubicación: Venezuela
Reputación: 0

15 Ago 2018 16:06

MrDave escribió:
15 Ago 2018 16:03
Marihuanero escribió:
15 Ago 2018 15:49
Una pregunta. ¿"Por ley" a la hora de crear un timer este tiene que tener su misma función para matar el mismo tiempo o al cumplirse el tiempo del timer este desaparece?

Necesito esta informacion para aclarar dudas acerca de un lag futuro a causa de esto.

Depende, sí es un "timer" repetitivo, lo puedes detener con "KillTimer" (sí es necesario) y sí es un "timer" no repetitivo, pues no se necesita detenerlo porqué cuando llegue a su determinado tiempo no volverá a ejecutarse hasta que se lo llame otra vez.
Trata de no crear "timers" repetitivos por jugador, ya que harás que el CPU haga más procesos y sobretodo aumentará el consumo de memoria del servidor.
Este es un timer que no se repite? : SetTimerEx("AUMENTAR_TARIFA", 60000, false, "i", playerid);
Aprendiz del pawno. // Saludos desde venezuela (Fuck maduro)
Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 1050
Registrado: 05 Oct 2017 12:13
Reputación: 113

15 Ago 2018 20:41

Spoiler:
Marihuanero escribió:
15 Ago 2018 16:06
MrDave escribió:
15 Ago 2018 16:03
Marihuanero escribió:
15 Ago 2018 15:49
Una pregunta. ¿"Por ley" a la hora de crear un timer este tiene que tener su misma función para matar el mismo tiempo o al cumplirse el tiempo del timer este desaparece?

Necesito esta informacion para aclarar dudas acerca de un lag futuro a causa de esto.

Depende, sí es un "timer" repetitivo, lo puedes detener con "KillTimer" (sí es necesario) y sí es un "timer" no repetitivo, pues no se necesita detenerlo porqué cuando llegue a su determinado tiempo no volverá a ejecutarse hasta que se lo llame otra vez.
Trata de no crear "timers" repetitivos por jugador, ya que harás que el CPU haga más procesos y sobretodo aumentará el consumo de memoria del servidor.
Este es un timer que no se repite? : SetTimerEx("AUMENTAR_TARIFA", 60000, false, "i", playerid);

Claro que sí, el tercer argumento es un "false" y por lo tanto no es repetitivo, lo fuera sí tuviese un "true".
Te invito a leer la información que proporciona "wikisamp":

http://wiki.sa-mp.com/wiki/SetTimerEx

- Temporalmente estoy retirado de SA-MP; por lo tanto no me envíen propuestas de proyectos.
- No respondo dudas por privado, usa la sección de preguntas.
Responder