大馒头 发表于 2006-5-21 07:47:04

关于set_task传递参数的问题?

我知道set_task给函数传递参数的时候需要用数组,可是有时候,因为函数已经定义好了,而且函数参数不是数组,怎么办?

kinsprite 发表于 2006-5-21 11:20:31

[原创] set_task() 函数用法

Post by http://forum.dt-club.net/images/dt/editor/color.gif

http://forum.dt-club.net/images/dt/editor/color.gif大馒头]我知道set_task给函数传递参数的时候需要用数组,可是有时候,因为函数已经定义好了,而且函数参数不是数组,怎么办?

set_task ( Float:time,const function[],id = 0,parameter[]="",len = 0,flags[]="", repeat = 0 ) 用法:

例子1、public client_putinserver(id)
{
        set_task(0.5, "cl_1", id + 3333)
        set_task(0.8, "cl_2", id + 3333)
        return PLUGIN_CONTINUE
}

public cl_1(id)
{
        server_print(" - cl_1 : id = %d", id)
}

public cl_2(a)
{
        server_print(" - cl_2 : a = %d", a)
}

结果:
- cl_1 : id = 3334
- cl_2 : a = 3334
你会发现,cl_1中的id与cl_2中的a总是相等,且都等于client_putinserver中的 id + 3333转递过去的 。到这里,本例子是否符合你的要求?

例子2、public client_putinserver(id)
{
        new param
        param = 10 + id
        param = 100 + 2*id
        param = 1000 + 3*id
        set_task(1.0, "func_A", id + 3333, param, 3)
        return PLUGIN_CONTINUE
}

public cl_3(x, y, z)
{
        server_print(" - cl_3 : x+y+y = %d ; x = %d, y = %d , z = %d", x+y+z, x, y, z)
}

public func_A(para[])
{
        cl_3(para, para,para)
}

结果:
- cl_3 : x+y+y = 1116 ; x = 11, y = 102 , z = 1003

例子3、[错误用法]
public client_putinserver(id)
{
        new param
        param = 10 + id
        param = 100 + 2*id
        param = 1000 + 3*id
        param = 2000 + 4*id
        set_task(1.2, "cl_6", id + 3333, param, 4)
        return PLUGIN_CONTINUE
}

public cl_6(x, y, z , k)
{
        server_print(" - cl_6 : x+y+y+k = %d ; x = %d, y = %d , z = %d , k = %d", x+y+z, x, y, z, k)
}
运行结果:
- cl_6 : x+y+y+k = 4654 ; x = 1320, y = 3334 , z = 0 , k = 0
x是怎么得出来的,我还没有清楚,跟后面的参数个数有关。

大馒头 发表于 2006-5-22 05:15:33

回复: 关于set_task传递参数的问题?

哈哈,谢谢kinsprite ~ 你的指点非常详尽,我明白了!

金闪闪 发表于 2006-5-22 08:40:31

回复: 关于set_task传递参数的问题?

k是系统默认赋予的0,x是Buffer溢位赋予的。
测试看看。
:D

AE86 发表于 2006-5-22 09:34:32

回复: 关于set_task传递参数的问题?

kinsprite真强,佩服

kinsprite 发表于 2006-5-22 12:31:07

回复: 关于set_task传递参数的问题?

Post by 金闪闪
k是系统默认赋予的0,x是Buffer溢位赋予的。
测试看看。
:D

x的溢位过程能否描述一下?以及其原因。:dribble:

金闪闪 发表于 2006-5-22 16:52:31

回复: 关于set_task传递参数的问题?

例子3,其实就是一个全局变量和局部变量的区别。

在client_putinserver(id)内执行set_task(1.2, "cl_6", id + 3333, param, 4) 时申明了一次,
当事件触发时,执行cl_6却是动态的。

因此调用存在着随意性。

你把param申明为全局变量看看。
:D

补充下,用SmallC的DOS环境测试下。

kinsprite 发表于 2006-5-22 21:07:29

回复: 关于set_task传递参数的问题?

Post by 金闪闪
例子3,其实就是一个全局变量和局部变量的区别。

在client_putinserver(id)内执行set_task(1.2, "cl_6", id + 3333, param, 4) 时申明了一次,
当事件触发时,执行cl_6却是动态的。

因此调用存在着随意性。

你把param申明为全局变量看看。
:D

补充下,用SmallC的DOS环境测试下。

这个例子本来无法传递正确的参数,只是x的值还不理解。我也懒得安装pawn了,:p 它的文档是有。

ifubo 发表于 2006-8-23 22:12:22

回复: 关于set_task传递参数的问题?

這裡的都是強人
羨慕死了。。。

ahcat 发表于 2006-8-26 05:00:46

回复: 关于set_task传递参数的问题?

set_task中指定的函数有两个参数.

set_task(1.2, "cl_6", 3333, param, 4)

public task_func( id, data[])

id = 3333, data 就是传递过来的 param数组
页: [1]
查看完整版本: 关于set_task传递参数的问题?