[GUIA] set_task, remove_task y task_exists
#1
guía hecha para gente que tiene un mínimo conocimiento

task_exists

Sintaxis

Código PHP:
native task_exists(id 0outside 0); 

Uso


id (Opcional)
id, índice , index como quieran llamarlo del task a buscar

outside (Opcional)
Busca task's establecidas por otros plugins si este parámetro es diferente de 0

Descripción

Devuelve si existe un task con el id especificado.

Retorno

1 si se ha encontrado el task, 0 en caso contrario

Código PHP:
set_task(1.0"TaskFunction"id); // luego veremos lo de los task, este es un simple ejemplo
// este task esta funcionando

if(task_exists(id)) // aquí busca y pregunta si el task con el índice "id" existe
{
    
// si existe hará esto


remove_task

Sintaxis

Código PHP:
native remove_task(id 0outside 0); 

Uso


id (Opcional)
id, índice , index como quieran llamarlo del task a buscar

outside (Opcional)
Eliminará task's establecidos por otros plugins si este parametro es diferente de 0

Descripción

Elimina TODOS los task con el id especificado.

Retorno

Numero de task's removidos

Código PHP:
client_disconnect(idremove_task(id// Eliminará todos los task's con ese valor de id 


set_task

Sintaxis

Código PHP:
native set_task(Float:time, const function[], id 0, const any:parameter[] = ""len 0, const flags[] = ""repeat 0); 

Uso


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é

Veamos como funciona los diferentes task id.
Código PHP:
#include <amxmodx>

#define TASK_C 3323
#define ID_TASK (taskid - TASK_C)

new g_iSegundos[33]
new 
g_iMinutos[33]
new 
g_iHoras[33]
new 
g_HudC

public plugin_init()
{
    
register_plugin("contador","1.0","erik")
    
register_clcmd"say /contador""clcmd_contador" )
    
g_HudC CreateHudSyncObj()

}
client_disconnect(idremove_task(id+TASK_C)

public 
clcmd_contador(id)
{
    if( !
task_exists(id+TASK_C) )
    {
        
g_iSegundos[id] = 0
        g_iMinutos
[id] = 0
        g_iHoras
[id] = 0
        set_task
1.0"contador"id+TASK_C__"b")
    }
    
    
/*Digamos que mi id es 10 por ejemplo...
    
    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
    
}
    
    
set_hudmessage255,255,255, -1.00.3006.01.0 )
    
ShowSyncHudMsgID_TASKg_HudC"Tiempo transcurrido: %d hora%s con %d minuto%s y %d segundo%s",g_iHoras[ID_TASK],(g_iHoras[ID_TASK] == 1) ? "" "s",g_iMinutos[ID_TASK],(g_iMinutos[ID_TASK] == 1) ? "" "s"g_iSegundos[ID_TASK],(g_iSegundos[ID_TASK] == 1) ? "" "s")


// 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! 

PARA MAYOR INFO https://forums.alliedmods.net/showthread.php?t=131896

Ahora podremos diferenciar bien los task's

Código PHP:
#define TASKID_1 1000
#define TASKID_2 2000

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_task1.0"parametros"_parm)

/* 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_hudmessage255,255,255, -1.00.3006.012.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] = 
    params
[1] = 
    set_task
(1.0"Task_funcion"53paramssizeof(params)) 

}  

// #1 - Si solo se pasa el id del task, el id viene como único argumento
public Task_funcionTASK_INDEX 


// #2 - Si solo se pasa parametros desde el task, los parametros viene como unico argumento.
public Task_funcionParams[] ) 


// #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_funcionParams[] , TASK_INDEX 



Flags

Flag "a"

Código PHP:
#include <amxmodx> 

new g_iContador 

public plugin_init() 

    
register_clcmd"say /contador""clcmd_contador" 


public 
clcmd_contador( ) 
{
    if( !
task_exists() ) // luego explicaré
    
{
        
g_iContador 600 // 10 minutos 
        
set_task1.0"FlagA"___"a"g_iContador 
        
        
/* leeremos el task de derecha a izquierda
        
        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
        
        */
    

     
    return 
PLUGIN_HANDLED 


public 
FlagA() 

    
g_iContador-- 
    
set_hudmessage255,255,255, -1.00.3006.012.0 
    
show_hudmessage0"%02i:%02i"g_iContador 60g_iContador 60 


Flag "b"

Código PHP:
#include <amxmodx> 

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(255255255, -1.00.0106.01.10.00.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_hudmessage255,255,255, -1.00.3006.012.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_hudmessage255,255,255, -1.00.3006.012.0 
    
show_hudmessage(0"Quedan solo 20 segundos para que finalice el mapa")


Fin.
Si algo esta mal o falta agregar algo me avisan
Responder
#2
Exelente guía!
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

Estudia siempre; el tiempo es oro, lo material se puede recuperar pero el tiempo no se puede recuperar.
(02/10/2016, 05:05 PM)meTaLiCroSS escribió: Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando.
(08/08/2019, 05:32 PM)meTaLiCroSS escribió: grax x el dato cr4ck


Mis aportes

PLUGINS
MAPAS
Menú LANG [SF] Sistema de Frags
Say System (Admin Prefix)
Responder
#3
(29/03/2015, 02:30 AM)totopizza escribió: Exelente guía!

la acabo de publicar y me dices excelente guía? algo anda mal aquí Thats what she said
Responder
#4
(29/03/2015, 02:32 AM)ErikMav94 escribió:
(29/03/2015, 02:30 AM)totopizza escribió: Exelente guía!

la acabo de publicar y me dices excelente guía? algo anda mal aquí Thats what she said

Jajajajajajja, Yo tambien te lo digo Buena guia!!!ExcitedeyesExcitedeyes

pero el se_task no lo metiste en spoiler e.e
(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.
Responder
#5
(29/03/2015, 02:52 AM)elpapimejor escribió:
(29/03/2015, 02:32 AM)ErikMav94 escribió:
(29/03/2015, 02:30 AM)totopizza escribió: Exelente guía!

la acabo de publicar y me dices excelente guía? algo anda mal aquí Thats what she said

Jajajajajajja, Yo tambien te lo digo Buena guia!!!ExcitedeyesExcitedeyes

pero el se_task no lo metiste en spoiler e.e

no lo metí en spoiler porque es lo que mas quería destacar , lo otro lo puse de paso para que entiendan de donde viene
Responder
#6
Exelente aportacion.

Al final te la jugaste y lo hiciste bien detallado.

A mas de 1 estoy seguro que le va a servir, incluyendome.

PD: Sigo pensando que es mas un Tutorial que una Guia.
Responder
#7
#GJ Erik...

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook

[Imagen: w8565u-4.png]
Responder
#8
Buena guía Yao ming
Responder
#9
Buen Tuto *---* Me va a servir de mucho *---*
Responder
#10
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.
Believe, be yourself and don't hold on to just one dream ❤

Responder
#11
Exelente guia Excitedeyes

Responder
#12
(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
Responder
#13
Buena guia, cada dia aprendo mas gracias a estas Cutecry guias
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)