[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
Avatar de Usuario
FailLout
Avanzado
Avanzado
Mensajes: 1385
Registrado: 10 Abr 2014 14:09
Ubicación: Estados Unidos
Contactar:
Reputación: 40

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
Última edición por FailLout el 22 Ene 2017 13:42, editado 1 vez en total.
[img]http://i.imgur.com/ewTFkYP.jpg[/img]

[url=http://pawnscript.com/foro/viewtopic.php?f=41&t=7263&p=42268#p42268]Roleplay Base v0.2 Beta[/url]

Innovando, Imaginando y creando así nacen los mejores sistemas
Luego vienen los bugs
Nacion Zombie RPG
Battlerine Royale SA-MP

Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

22 Ene 2017 13:31

Se te fueron los espacios en la tabla ;V


Buena guía.
Y yo que la iba a hacer... menos mal que me dio flojera ;V
elrobagmxD
Baneado
Baneado
Mensajes: 491
Registrado: 13 Mar 2015 20:56
Ubicación: Argentina-Salta
Contactar:
Reputación: 0

22 Ene 2017 13:33

Lo que buscaba para entender de una [MALSONANTE] ves los Tiempos, +1 Wey me encanto la Guia :v
GM Totalmente de 0 al %86

Proximamente Re-Apuerta de Ciudad Roleplay
Grupo FB:Ciudad Roleplay Grupo Oficial

Ayudo con Mappeos Gratis Aquí

[/u]
Aportes Nuevos (28/11/2016)

Spoiler:
1)Nuevo LSPD Clickeame.
2) Mecanico Clickeame.

Avatar de Usuario
FailLout
Avanzado
Avanzado
Mensajes: 1385
Registrado: 10 Abr 2014 14:09
Ubicación: Estados Unidos
Contactar:
Reputación: 40

22 Ene 2017 13:35

MattHudson escribió:Se te fueron los espacios en la tabla ;V


Buena guía.
Y yo que la iba a hacer... menos mal que me dio flojera ;V

Hahaha -laughing

Algun dia los acomodare -laughing

Gracias Mat!! -hi

elrobagmxD escribió:Lo que buscaba para entender de una [MALSONANTE] ves los Tiempos, +1 Wey me encanto la Guia :v
Gracias elroba -hi
[img]http://i.imgur.com/ewTFkYP.jpg[/img]

[url=http://pawnscript.com/foro/viewtopic.php?f=41&t=7263&p=42268#p42268]Roleplay Base v0.2 Beta[/url]

Innovando, Imaginando y creando así nacen los mejores sistemas
Luego vienen los bugs
Nacion Zombie RPG
Battlerine Royale SA-MP

Avatar de Usuario
ElectroC
Senior
Senior
Mensajes: 1958
Registrado: 27 Nov 2014 12:22
Reputación: 60

22 Ene 2017 19:56

Usuario elrobagmxD +1 advertencia. Razón: Lenguaje inapropiado.
» Firma: ElectroC «

|---------------------------------------------------|

» Normas de PawnScript «
|---------------------------------------------------|


Avatar de Usuario
Marvin
Aprendiz
Aprendiz
Mensajes: 387
Registrado: 21 Abr 2014 14:34
Reputación: 4

02 Feb 2017 05:17

Buena guía.

Hay algo que se olvido mencionar... tener muchos timers genera lag en el servidor, o incluso los timers no deben ser tan pequeños cuando la gente los usa para que se repitan, o eso tengo entendido.
 Codigo Pawno:
1

/* Server closed the connection. */
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
APORTES


Avatar de Usuario
FailLout
Avanzado
Avanzado
Mensajes: 1385
Registrado: 10 Abr 2014 14:09
Ubicación: Estados Unidos
Contactar:
Reputación: 40

06 Feb 2017 11:07

Marvin escribió:Buena guía.

Hay algo que se olvido mencionar... tener muchos timers genera lag en el servidor, o incluso los timers no deben ser tan pequeños cuando la gente los usa para que se repitan, o eso tengo entendido.

Tener muchos timers mal echos o innecesarios si generan lag o timer repetitivos igual que los de AC:RP .

Pero no tener "Muchos" yo tengo un gm con bastantes timers y no me genera lag ya que despues de usarlos los "Killeo"

-hi
[img]http://i.imgur.com/ewTFkYP.jpg[/img]

[url=http://pawnscript.com/foro/viewtopic.php?f=41&t=7263&p=42268#p42268]Roleplay Base v0.2 Beta[/url]

Innovando, Imaginando y creando así nacen los mejores sistemas
Luego vienen los bugs
Nacion Zombie RPG
Battlerine Royale SA-MP

Avatar de Usuario
zarcort
Baneado
Baneado
Mensajes: 536
Registrado: 31 Oct 2016 13:28
Ubicación: Pawnoscript
Reputación: 4

06 Feb 2017 11:27

Buena Guia
Cada Día Se Aprende Algo Nuevo


Scripter:25%
WebMaster:12%
Mapper:100%
Diseñador:12
Texturizador:0
Mi aporte




Avatar de Usuario
nicolas176
Aprendiz
Aprendiz
Mensajes: 414
Registrado: 20 Jul 2014 19:44
Ubicación: Posadas, Misiones, Argentina
Contactar:
Reputación: 3

07 Feb 2017 06:46

Gran aporte, lo usaré cada vez que me olvide porque soy así -mfr_lol saludoss
Mapper: 100%
Scripter: 75%
Webmaster: 15%
Avatar de Usuario
AbelKnight
Aprendiz
Aprendiz
Mensajes: 428
Registrado: 07 Jun 2016 10:56
Ubicación: Inglaterra
Reputación: 6

14 Feb 2017 18:45

¿Los SetTimerEx son para colocarle tiempo a una funcion?
CloZ
Baneado
Baneado
Mensajes: 51
Registrado: 22 Abr 2016 06:38
Reputación: 0

14 Feb 2017 19:42

AbelKnight escribió:
14 Feb 2017 18:45
¿Los SetTimerEx son para colocarle tiempo a una funcion?

Si, de un jugador o jugadores en especifico.
"Es necesario criticar al que quiere aprender?, es necesario criticar a quien se esfuerza?, es necesario criticar, pero al que critica al quien quiere aprender.
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

14 Feb 2017 20:22

AbelKnight escribió:
14 Feb 2017 18:45
¿Los SetTimerEx son para colocarle tiempo a una funcion?
Hablando teóricamente:
Las funciones SetTimer y SetTimerEx son utilizadas para iniciar un temporizador. Al finalizar el tiempo indicado, se ejecuta la función deseada(la que va entre comillas).
La principal diferencia es que SetTimerEx permite parámetros, cosa que SetTimer no permite.
Por ejemplo:
Si queremos usar SetTimer para hacer algo referente a X usuario, tendríamos que hacer variables, condicionales, bucles, y demás para obtener justo ese mismo ID del jugador. Si usamos SetTimerEx, simplemente añadimos un parámetro que facilite la obtención del id del jugador(playerid, o como se llame en cada caso)
Avatar de Usuario
FailLout
Avanzado
Avanzado
Mensajes: 1385
Registrado: 10 Abr 2014 14:09
Ubicación: Estados Unidos
Contactar:
Reputación: 40

14 Feb 2017 20:24

AbelKnight escribió:
14 Feb 2017 18:45
¿Los SetTimerEx son para colocarle tiempo a una funcion?

Ambas funciones son para colocarle tiempo a callbacks, no funciones.
franco-samp escribió:
AbelKnight escribió:
14 Feb 2017 18:45
¿Los SetTimerEx son para colocarle tiempo a una funcion?

Si, de un jugador o jugadores en especifico.

Puede colocarle tiempo tanto a jugador(es) como vehiculos y objetos, casi todo lo editable, que tenga un id o algo similar
MattHudson escribió:
AbelKnight escribió:
14 Feb 2017 18:45
¿Los SetTimerEx son para colocarle tiempo a una funcion?
Hablando teóricamente:
Las funciones SetTimer y SetTimerEx son utilizadas para iniciar un temporizador. Al finalizar el tiempo indicado, se ejecuta la función deseada(la que va entre comillas).
La principal diferencia es que SetTimerEx permite parámetros, cosa que SetTimer no permite.
Por ejemplo:
Si queremos usar SetTimer para hacer algo referente a X usuario, tendríamos que hacer variables, condicionales, bucles, y demás para obtener justo ese mismo ID del jugador. Si usamos SetTimerEx, simplemente añadimos un parámetro que facilite la obtención del id del jugador(playerid, o como se llame en cada caso)
Exactamente Matt, gracias por explicarlo! ... Ya iba a responder y me salto el retorno jaja

-hi
[img]http://i.imgur.com/ewTFkYP.jpg[/img]

[url=http://pawnscript.com/foro/viewtopic.php?f=41&t=7263&p=42268#p42268]Roleplay Base v0.2 Beta[/url]

Innovando, Imaginando y creando así nacen los mejores sistemas
Luego vienen los bugs
Nacion Zombie RPG
Battlerine Royale SA-MP

Responder