View Single Post
Author Message
rak
Veteran Member
Join Date: Oct 2011
Location: banned country
Old 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(PLUGINVERSIONAUTHOR)
    
    
register_clcmd("say /kill""cmdSayKill")
    
    
g_rt_id[TASK2] = register_task_date(20120827000"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
Code:
* Register Task 1.0 - First release
* Register Task 1.1 - Agregado change_register_task | Pequeña modificación
disfruten y critiquenlo xD
Attached Files
File Type: zip register_task.zip (14.0 KB, 221 views)
File Type: zip register_task 1.1.zip (14.5 KB, 240 views)
__________________

www.amxmodx-es.com

Steam: Luchokoldo

Last edited by rak; 08-25-2012 at 22:51.
rak is offline
Send a message via MSN to rak Send a message via Skype™ to rak