[API] Register Task 1.1
#1
Revisando Alliedmods me di cuenta que no tenia publicada acá esta API; hago c&p del post original

Hola :3 esto que van a ver a continuacion en si fue potenciado por Bugg al preguntar como llamar una funcion X dia y ya que estaba agrege para llamar cada X seg una funcion, es simple como funciona, veamos un poco

Natives
Código PHP:
/*
register_task; con esta native registramos un task hacia una funcion publica;
Float:Time | Igual a set_task, el valor minimo es 0.1
const Func[] | Igual a set_task, el nombre de la funcion publica a la que vamos a llamar
Taskid | Aca podemos pasar un id para identificar el task para poder removerlo o para pasar 1 
dato(interger) el cual es mandado a la funcion

Repeat | Aca es distinto, va el numero de veces que lo vamos a llamar, si dejamos el valor -1 se repite infinitas veces

retorna el ID del task
*/
native register_task(Float:Time, const Func[], Taskid 0Repeat = -1)
/*
register_task_date; con esta native registramos un task para X dia de cualquier fecha; si los datos no corresponden al tiempo 
que esta activo el plugin en el mapa va a retornar un valor negativo; dejo un ejemplo:

register_task_date(2012, 08, 27, 7, 30, 0, "my_task")
esto va a llamar el 27 de agosto del 2012 a las 07:30:00 am la funcion public "my_task"

los valores que pueden retornar son:

TASK_EXPIRE = -3 ya se ejecuto el task
TASK_NOT_YET = -2 en el momento que se registro el task, en ese mapa no se va a ejecutar 
por que no van a coincidir nunca la fecha y hora
*/
native register_task_date(YearMonthDayHourMinuteSecond, const Func[])

// Ambas natives, register_task y register_task_date pueden retornar el ID del task que va de 0 a infinito o pueden retornar 
//TASK_INVALID_FUNCID = -1; cuando retorna la ultima significa que la funcion publica no fue encontrada

/*
remove_register_task; esta native sirve para borrar 1 task, varios que coincidan con el taskid que le asignamos o 
tambien podes borrar todos los task;

un ejemplo de cada uno

remove_register_task() | Remueve todos los task
remove_register_task(id) | Remueve 1 solo task, id seria el valor que retorna register_task o register_task_date
remove_register_task(_, taskid) | Remueve 1 solo task cuyo taskid es el que le asignamos antes a un register_task; 
INFO: remueve el ultimo taskid registrado

remove_register_task(_,taskid, TASK_DELETE_ALL) | Remueve todos los task que tengan el taskid asignado
*/
native remove_register_task(id = -1Taskid = -1Delete_All 0)

/*
change_register_task; cambiamos el tiempo en que se ejecuta un task

id | el id es el que nos retorna register_task
*/
native change_register_task(idFloat:NewTime)

enum // enum con los valores antes mencionados
    
TASK_EXPIRE = -3,
    
TASK_NOT_YET,
    
TASK_INVALID_FUNCID,
    
TASK_DELETE_ONE,
    
TASK_DELETE_ALL
}

const 
NO_TASK_ID = -

Informacion Adicional
Para poder compilar el plugin register_task.sma tienen que tener el include unixtime; se los deje en el .zip

Creditos
Código:
Bugsy - Inc. unixtime
shinoda - Ejemplo callfunc

Ejemplo de plugin
Código PHP:
#include <amxmodx>
#include <taskapi>

#define PLUGIN "Example Register Task"
#define VERSION "1.0"
#define AUTHOR "[R]ak"

enum _:TASKS {
    
TASK1,
    
TASK2,
    
TASK3
}

new 
g_rt_id[TASKS]

new 
g_register_task

public plugin_init() {
    
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_clcmd("say /kill""cmdSayKill")
    
    
g_rt_id[TASK2] = register_task_date(2012, 08, 27000"rak_birthday")
    
}

public 
client_putinserver(id) {
    
    if(!
g_register_task) {
        
        
g_rt_id[TASK1] = register_task(1.0"show_clock")
        
        
g_rt_id[TASK3] = register_task(5.0"server_spam")
        
        
g_register_task true
        
    
}
}

public 
client_disconnect(id) {
    
    if(!
get_playersnum()) {
        
        
remove_register_task(g_rt_id[TASK1])
        
        
remove_register_task(g_rt_id[TASK3])
        
        
g_rt_id[TASK1] = NO_TASK_ID
        
        g_rt_id
[TASK3] = NO_TASK_ID
        
        g_register_task 
false
        
    
}
}

public 
cmdSayKill(id) {
    
    if(!
is_user_alive(id))
        return
    
    
register_task(1.0"task_kill"id5)
    
    
set_hudmessage(255255255, -1.00.1006.01.5)
    
    
show_hudmessage(id"You will die in 5 seconds")
    
}

public 
show_clock() {
    
    new 
Time[20
    
    
get_time("%H:%M:%S %p",Timecharsmax(Time))
    
    
set_hudmessage(42255420.800.0501.01.50.00.02
    
    
show_hudmessage(0Time)
    
}

public 
rak_birthday()
    
client_print(0print_chat"Happy Birthday [R]ak!")
    
public 
server_spam() {
        
    static 
Float:fCall
    
    fCall 
+= 5.0
    
    client_print
(0print_chat"[R]ak Acme Inc.- API Register Task 1.1")
    
    
client_print(0print_chat"[R]ak Acme Inc.- You Are Playing in Cstrike-Arg!")
    
    
change_register_task(g_rt_id[TASK3], fCall 5.0)
    
}

public 
task_kill(id) {
    
    static 
iCall[33]
    
    
iCall[id] == ? (iCall[id] = 1) : iCall[id]++
    
    
set_hudmessage(255255255, -1.00.1006.06.0)
    
    
show_hudmessage(id"You will die in %d seconds", (5-iCall[id]))
    
    if(!(
5-iCall[id]) && is_user_alive(id))
        
user_kill(id)
    

ChangeLog
Código:
* Register Task 1.0 - First release
* Register Task 1.1 - Agregado change_register_task | Pequeña modificación
disfruten y critiquenlo xD


Archivos adjuntos
.zip   register_task 1.1.zip (Tamaño: 14.49 KB / Descargas: 14)
Hi Milashkasiya CrabCrab

Soy un #Panda.. Soy solo un tipo que parece #común pero soy todo lo contrario; alguien #atípico en esta sociedad actual

[Imagen: xl0jvd-5.png]
Link
Responder
#2
Creo que #raulitop hizo algo parecido y se lo echaron para atrás
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

(18/11/2014, 05:47 PM)Neeeeeeeeeel.- escribió: Por qué necesitan una guía para todo? Meté mano y que salga lo que salga... es la mejor forma de aprender.

(16/05/2016, 11:08 PM)kikizon2 escribió: No cabe duda que tienen mierda en vez de cerebro, par de pendejos v:
Responder
#3
(27/12/2018, 11:32 PM)OsweRRR escribió: Creo que #raulitop hizo algo parecido y se lo echaron para atrás

seguro me copio

[Imagen: 2018-12-27_234239.jpg]

puede que hiciera el algo distinto; esto es mas que util para gente que usa muchos task; alivia el trabajo en el cpu al utilizar una entidad
Hi Milashkasiya CrabCrab

Soy un #Panda.. Soy solo un tipo que parece #común pero soy todo lo contrario; alguien #atípico en esta sociedad actual

[Imagen: xl0jvd-5.png]
Link
Responder
#4
no fue raulitop ahora que googleo fue sasske

https://amxmodx-es.com/Thread-stocks-inc-entity-task
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

(18/11/2014, 05:47 PM)Neeeeeeeeeel.- escribió: Por qué necesitan una guía para todo? Meté mano y que salga lo que salga... es la mejor forma de aprender.

(16/05/2016, 11:08 PM)kikizon2 escribió: No cabe duda que tienen mierda en vez de cerebro, par de pendejos v:
Responder
#5
(28/12/2018, 02:48 AM)OsweRRR escribió: no fue raulitop ahora que googleo fue sasske

https://amxmodx-es.com/Thread-stocks-inc-entity-task

parecido; esta api es un set_task funcionando; arma solo 1 entidad para todos los task que quieras usar; es mas, esta el link a mi post original de Register Task
Hi Milashkasiya CrabCrab

Soy un #Panda.. Soy solo un tipo que parece #común pero soy todo lo contrario; alguien #atípico en esta sociedad actual

[Imagen: xl0jvd-5.png]
Link
Responder
#6
Buenas, tuve un problema con el plugin, y llegue a la rápida solución.

Código PHP:
//    if((SysTime + get_timeleft()) < iTime)
//        return TASK_NOT_YET 

Luego de llegar a la rápida solución quise investigar un poquito cual era el problema (Por que uno busca los problemas, no es que aparecen solos jeje)

Soy de utilizar muchísimo SysTime, mas de lo necesario .. pero nunca lo use con "zonas" por lo que decidi generar un simple print .. el cual me dio una diferencia grande entre

Código PHP:
new SysTime get_systime(TimeZoneOffset[GetTimeZone()])

// y ..

get_systime( ) 

Como vemos a continuación ..

Código PHP:
log_to_file"tTime.log""iTime: %d -- SysTime: %d -- get_timeleft: %d -- ima t: %d "iTimeSysTimeget_timeleft( ), get_systime( ) ); 

out:
Código:
iTime: 1548511470 -- SysTime: 1548511543 -- get_timeleft: 0 -- ima t: 1548522343

Había pensado que esta era una solución factible al pequeño problema, pero luego de ver los números me di cuenta que no.

Claramente si hacemos SysTime + get_timeleft() nos da SysTime dado que get_timeleft( ) equivale a 0.

¿ Por que equivale a 0 ? Pos simplemente por que tengo un sistema de votación de mapas que para su correcto funcionamiento lo seteo en 0 (jeje)

Nunca lo había utilizado, dado que siempre uso SysTime .. fuera de esto .. creo que llegue a la conclucion de que EN MI CASO es inutil ese return

Pero dejo este pequeño mensajito aqui para mas que nada ver el tema de las zonas lo cual me llamo altamente la atención

Saludos,
cLAANS.-
Mi unico plugin.
Tutorial de niveles.

Ayudo, pero no de la manera que quieren, si quieren aprender les servirá lo mio, para pedir el codigo en bandeja tienen la sección 'Pedidos'

(09/11/2017, 09:30 PM)SoundBlaster escribió: Espera y llamo a los power rangers para que me digan la linea de error
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)