搜索
查看: 2692|回复: 9

关于set_task传递参数的问题?

[复制链接]
发表于 2006-5-21 07:47:04 | 显示全部楼层 |阅读模式 来自 北京海淀
我知道set_task给函数传递参数的时候需要用数组,可是有时候,因为函数已经定义好了,而且函数参数不是数组,怎么办?
发表于 2006-5-21 11:20:31 | 显示全部楼层 来自 华中科技大学韵苑公寓

[原创] set_task() 函数用法

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

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


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

例子1、[PHP]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(" [TEST] - cl_1 : id = %d", id)
}

public cl_2(a)
{
        server_print(" [TEST] - cl_2 : a = %d", a)
}
[/PHP]
结果:
[TEST] - cl_1 : id = 3334
[TEST] - cl_2 : a = 3334
你会发现,cl_1中的id与cl_2中的a总是相等,且都等于client_putinserver中的 id + 3333转递过去的 。到这里,本例子是否符合你的要求?

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

public cl_3(x, y, z)
{
        server_print(" [TEST] - 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[0], para[1],para[2])
}
[/PHP]
结果:
[TEST] - cl_3 : x+y+y = 1116 ; x = 11, y = 102 , z = 1003

例子3、[[color="Red"]错误用法]
[PHP]public client_putinserver(id)
{
        new param[4]
        param[0] = 10 + id
        param[1] = 100 + 2*id
        param[2] = 1000 + 3*id
        param[3] = 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(" [TEST] - cl_6 : x+y+y+k = %d ; x = %d, y = %d , z = %d , k = %d", x+y+z, x, y, z, k)
}[/PHP]
运行结果:
[TEST] - 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
回复

使用道具 举报

发表于 2006-5-22 09:34:32 | 显示全部楼层 来自 广东深圳

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

kinsprite真强,佩服
回复

使用道具 举报

发表于 2006-5-22 12:31:07 | 显示全部楼层 来自 华中科技大学韵苑公寓

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

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


x的溢位[color="Blue"]过程能否描述一下?以及其原因。: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[4]申明为全局变量看看。
:D

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

使用道具 举报

发表于 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[4]申明为全局变量看看。
:D

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


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

使用道具 举报

发表于 2006-8-23 22:12:22 | 显示全部楼层 来自 湖北武汉

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

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

使用道具 举报

发表于 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  数组
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表