Veteran Member
Join Date: Oct 2011
Location: banned country
|
08-25-2012
, 07:31
[API] Register Task 1.1
|
#1
|
Hola 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
Code:
/*
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 = 0, Repeat = -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(Year, Month, Day, Hour, Minute, Second, 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 = -1, Taskid = -1, Delete_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(id, Float: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 = -1
Informacion Adicional
Para poder compilar el plugin register_task.sma tienen que tener el include unixtime; se los deje en el .zip
Creditos
Code:
Bugsy - Inc. unixtime
shinoda - Ejemplo callfunc
Ejemplo de plugin
PHP Code:
#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(PLUGIN, VERSION, AUTHOR) register_clcmd("say /kill", "cmdSayKill") g_rt_id[TASK2] = register_task_date(2012, 08, 27, 0, 0, 0, "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", id, 5) set_hudmessage(255, 255, 255, -1.0, 0.10, 0, 6.0, 1.5) show_hudmessage(id, "You will die in 5 seconds") }
public show_clock() { new Time[20] get_time("%H:%M:%S %p",Time, charsmax(Time)) set_hudmessage(42, 255, 42, 0.80, 0.05, 0, 1.0, 1.5, 0.0, 0.0, 2) show_hudmessage(0, Time) }
public rak_birthday() client_print(0, print_chat, "Happy Birthday [R]ak!") public server_spam() { static Float:fCall fCall += 5.0 client_print(0, print_chat, "[R]ak Acme Inc.- API Register Task 1.1") client_print(0, print_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] == 5 ? (iCall[id] = 1) : iCall[id]++ set_hudmessage(255, 255, 255, -1.0, 0.10, 0, 6.0, 6.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
Code:
* Register Task 1.0 - First release
* Register Task 1.1 - Agregado change_register_task | Pequeña modificación
disfruten y critiquenlo xD
__________________
Last edited by rak; 08-25-2012 at 22:51.
|
|