关于set_task传递参数的问题?
我知道set_task给函数传递参数的时候需要用数组,可是有时候,因为函数已经定义好了,而且函数参数不是数组,怎么办?[原创] set_task() 函数用法
Post by http://forum.dt-club.net/images/dt/editor/color.gifhttp://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是怎么得出来的,我还没有清楚,跟后面的参数个数有关。
回复: 关于set_task传递参数的问题?
哈哈,谢谢kinsprite ~ 你的指点非常详尽,我明白了!回复: 关于set_task传递参数的问题?
k是系统默认赋予的0,x是Buffer溢位赋予的。测试看看。
:D
回复: 关于set_task传递参数的问题?
kinsprite真强,佩服回复: 关于set_task传递参数的问题?
Post by 金闪闪k是系统默认赋予的0,x是Buffer溢位赋予的。
测试看看。
:D
x的溢位过程能否描述一下?以及其原因。:dribble:
回复: 关于set_task传递参数的问题?
例子3,其实就是一个全局变量和局部变量的区别。在client_putinserver(id)内执行set_task(1.2, "cl_6", id + 3333, param, 4) 时申明了一次,
当事件触发时,执行cl_6却是动态的。
因此调用存在着随意性。
你把param申明为全局变量看看。
:D
补充下,用SmallC的DOS环境测试下。
回复: 关于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 它的文档是有。
回复: 关于set_task传递参数的问题?
這裡的都是強人羨慕死了。。。
回复: 关于set_task传递参数的问题?
set_task中指定的函数有两个参数.set_task(1.2, "cl_6", 3333, param, 4)
public task_func( id, data[])
id = 3333, data 就是传递过来的 param数组
页:
[1]