Float:time (NO opcional)
Intervalo de tiempo (en segundos [Float] ) que tendrá que pasar para que se llame a la función [valor mínimo: 0.1 seg].
function[] (NO opcional)
String que contiene el nombre de la función a ejecutar luego del intervalo de tiempo asignado.
id(Opcional)
Índice (index , id , como quieran llamarlo) único del Task.
parameter (Opcional)
serie de argumentos adicionales que se transmitirán a la función.
len (Opcional)
tamaño del array con el parámetro adicional.
flags (Opcional)
Flags opcionales a usar:
"a" - Repetir el task una cantidad fija de veces.
"b" - Bucle infinito hasta que se detenga el task.
"c" - La función se llamara al inicio del mapa.
"d" - La función se llamara justo antes del final del mapa.
repeat (Opcional)
Si el flag "a" se establece, el task se repetirá las veces que se establezca en este parámetro.
Descripción
Llama a una función cuando haya transcurrido un tiempo determinado.
Retorno
Esta función no tiene valor de retorno.
Error
Si se llama a una función invalida dará error.
ID del TASK
como bien dije arriba este parámetro es opcional , depende de como se vaya a usar el task...
Si usamos varios task con id's y luego vamos buscar o borrar alguno en especifico (task_exists() o remove_task() ) es mejor usar id's de diferente valor para para cada uno, así se podrá identificar el task sin problemas..
veamos el problema al cual me refiero:
Código PHP:
set_task(1.0, "TaskFunction1", id); // usa el mismo id que el del jugador set_task(2.0, "TaskFunction2", id); // usa el mismo id que el del jugador // supongamos que el id del jugador vale "20"
if(task_exists(id)) // existe el task con el id 20? { // Si , existen 2 , pero no puedo diferenciar cual... }
///////////////////
remove_task(id) // Te remuevo ambos task's ya que los 2 tienen el id "20"
Bien , espero que se haya entendido el problema al cual me refiero
Para casos como este es mejor usar ID's únicos para cada task , así no ocurre lo que mostré
TASK_C es 3323 que arriba está definido , entonces..
id+TASK_C = 10+3323 --> 3333 */
return PLUGIN_HANDLED }
public contador(taskid) { /*el parámetro de la función aquí arriba, se llama taskid taskid es igual a la cuenta que se hizo anteriormente --> id+TASK_C que el resultado era 3333
Aqui abajo se llama a ID_TASK que es lo definido arriba de todo --> ID_TASK (taskid - TASK_C) Entonces tenemos todos los números y seria así la cuenta ID_TASK (3333 - 3323) Termina siendo ID_TASK = 10 (osea vuelve a obtener el id del player)
seria como poner g_iSegundos[id]++ en vez de g_iSegundos[ID_TASK]*/ g_iSegundos[ID_TASK]++ if(g_iSegundos[ID_TASK] > 60) { g_iMinutos[ID_TASK]++ g_iSegundos[ID_TASK] = 0 } if(g_iMinutos[ID_TASK] > 60) { g_iHoras[ID_TASK]++ g_iMinutos[ID_TASK] = 0 g_iSegundos[ID_TASK] = 0 }
// Como ven este código solo usa 1 task, con lo que no haría falta usar un id especifico // Simplemente use este código porque ya lo tenia comentado y sirve como ejemplo!
set_task(1.0, "TaskFunction1", id + TASKID_1); set_task(2.0, "TaskFunction2", id + TASKID_2);
if(task_exists(id + TASKID_1)) { // task 1 existe } if(task_exists(id + TASKID_2)) { // task 2 existe }
Parámetros
Código PHP:
#include <amxmodx>
public plugin_init() register_clcmd("say /parm","PARM")
public PARM (id) { new parm[5] parm[0] = id // en la posicion 0 guardaremos el id del jugador parm[1] = 10 // en la posicion 1 guardaremos el valor entero 10 parm[2] = 20 // " " " 2 " " " " 20 parm[3] = 30 // " " " 3 " " " " 30 parm[4] = 40 // " " " 4 " " " " 40
set_task( 1.0, "parametros", _, parm, 5 )
/* leeremos el task de derecha a izquierda
este "5" vendría a ser el parámetro "len" que indica el tamaño del array con los parámetros que pasaremos a la función a llamar [ también se podría poner sizeof(parm) ] "parm" es justamente el array que contiene los parametros que pasaremos a la funcion omitimos el id del task ya que no sera necesario se llamara a la función "parámetros" , luego de 1.0 segundo...
Conclusion: Este task llamará luego de 1.0 segundo a la función "parámetros" y enviara los parámetros los 5 datos del array parm[5] */
} public parametros(parm[]) // como vemos es necesario poner corchetes ya que se esta recibiendo un array { set_hudmessage( 255,255,255, -1.0, 0.30, 0, 6.0, 12.0 ) show_hudmessage(parm[0], "parm[1]: %d^nparm[2]: %d^nparm[3]: %d^nparm[4]: %d",parm[1],parm[2],parm[3],parm[4])
// aquí vemos que param[0] se usa como index en el show_hudmessage ya que antes de llamarse a esta función se le había asignado el id del jugador // en esa posicion del array
// luego se muestra en el hud el valor de las demas posiciones de la array... }
NOTA!
Código PHP:
/* Hay 3 cabeceras para funciones llamadas desde el task */ { new params[2] params[0] = 1 params[1] = 2 set_task(1.0, "Task_funcion", 53, params, sizeof(params))
}
// #1 - Si solo se pasa el id del task, el id viene como único argumento public Task_funcion( TASK_INDEX ) { } // #2 - Si solo se pasa parametros desde el task, los parametros viene como unico argumento. public Task_funcion( Params[] ) { } // #3 - Si se pasa parámetros e id desde el task, los parámetros viene como primer argumento y el id como segundo argumento public Task_funcion( Params[] , TASK_INDEX ) { }
Flags
Flag "a"
Código PHP:
#include <amxmodx>
new g_iContador
public plugin_init() { register_clcmd( "say /contador", "clcmd_contador" ) }
g_iContador esta en el parámetro "repeat" y tiene un valor de 600... está establecido el flag "a" el cual dice que el task se repetirá X veces (en este caso las 600 veces de g_iContador)... omitimos parametros que no usaremos... se llamará a la función "FlagA" cada 1.0 segundos
Conclusion: Luego de haberse llamado 600 veces la función "FlagA" cada 1.0 segundo, el task no se repetirá mas
public plugin_init() register_clcmd("say /hud","hudLTA")
public hudLTA () set_task(1.0, "FlagB", _, _, _, "b")
/* leeremos el task de derecha a izquierda
decimos que el task se repetirá infinitamente (flag "b")... omitimos parámetros que no usaremos... se llamará a la función "hud" , cada 1.0 segundos...
Conclusion: La función "FlagB" se llamará indefinidamente cada 1.0 segundo */
public FlagB() { set_hudmessage(255, 255, 255, -1.0, 0.01, 0, 6.0, 1.1, 0.0, 0.0, -1) show_hudmessage(0, "Soy un Hud permanente") }
Flag "c"
Código PHP:
#include <amxmodx>
public plugin_init() set_task(20.0, "FlagC", _, _, _, "c")
/* leeremos el task de derecha a izquierda
decimos que el task se ejecutara al "inicio del mapa" ya que esta establecido el flag "c" omitimos parámetros que no usaremos... se llamara a la función "FlagA" , luego de 20.0 segundos
Conclusion: El task empezará a contar los 20.0 segundos cuando inicie el mapa, luego de haber pasado ese tiempo se ejecutara la función "FlagC"
*/
public FlagC(id) { set_hudmessage( 255,255,255, -1.0, 0.30, 0, 6.0, 12.0 ) show_hudmessage(0, "Han pasado 20seg desde que inicio el mapa") }
Flag "d"
Código PHP:
#include <amxmodx>
public plugin_init() set_task(20.0, "FlagD", _, _, _, "d")
/* leeremos el task de derecha a izquierda
decimos que el task se ejecutara al "antes de finalizar el mapa" ya que esta establecido el flag "d" omitimos parametros que no usaremos... se llamara a la función "FlagD" 20.0 segundos antes de que finalice el mapa
Conclusion: El task hará ejecutar la función "FlagD" 20 segundos antes de que finalice el mapa (timeleft estará en 20 seg ) UNA SOLA VEZ
*/
public FlagD(id) { set_hudmessage( 255,255,255, -1.0, 0.30, 0, 6.0, 12.0 ) show_hudmessage(0, "Quedan solo 20 segundos para que finalice el mapa") }
Fin.
Si algo esta mal o falta agregar algo me avisan
(03/08/2018, 03:13 PM)Skylar escribió: Está bien que pidas ayudas, pero no para que crees 20 post todos los días mogolico de mierda, me tenes re podrido ya, contraté 10000 sicarios para que te busquen y te maten toda la familia, y a vos que te revienten con una bazooka.
(02/04/2015, 03:01 PM)Federicomb escribió: Una duda que siempre tuve con set_task.
Al utilizar el flag "d", si yo hago sv_restart se ejecutará como debe ser o fallará? Obviamente ANTES de que se ejecute la función.
PD: Buena guía Erik.
EDIT: Lo acabo de probar y funciona correctamente, no hay fallas.
Perdón llegue tarde a responder :B , si se ejecutará bien,
pero si luego de ejecutarse el task tiras restart, no se volverá a ejecutar ya que no es un task repetitivo , cumple su función y ya