apocalyptic 发表于 2007-6-7 23:51:41

set_task中关于参数传递的问题

如果我需要在某种情况下,延迟一点时间,然后对一个玩家实施伤害,我使用了这样的代码:

public hurt(Victim,hurtdamage)
{
user_slap(Victim,hurtdamage)
}

问题是,现在我需要在set_task中给函数传递两个参数:Victim和hurtdamage,我这样写:

set_task(1.0,"hurt",Victim,hurtdamage)
这样的话,hurtdamage就会出现类型错误。

按照官方的说明,set_task是这样的:
set_task ( Float:time,const function[],id = 0,parameter[]="",len = 0,flags[]="", repeat = 0 )
我理解为:第一个是延迟的时间,第二个是需要执行的函数,第三个是传递到函数的参数,第四五个我还不明白,第六个是标记,第七个是重复次数。

请高手指教,如何才能实现我的目的?

Rulzy 发表于 2007-6-8 02:52:54

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

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

第三个是 taskid(用于标识这个TASK,可以使用 remove_task(taskid) 移除这个task), 第四个是参数,第五个是参数的长度。

set_task 较常用的方式有两种:
1. 当只传递一个整数时,使用如下方式:
set_task(0.1, "task", taskid)
或 set_task(0.1, "task", taskid, _, _, "a", 7)
或 set_task(0.1, "task", taskid, _, _, "b")

public task(taskid)
{
    ....
}
这样,set_task中的taskid是什么值,task函数中的taskid就是什么值。“_”表示当有默认参数时使用默认参数。

2. 传递两个或两个以上参数时(以两个参数为例):
new param
param=1
param=2
set_task(0.1, "task", taskid, param, 2)
或 set_task(0.1, "task", taskid, param, 2, "a", 7)
或 set_task(0.1, "task", taskid, param, 2, "b")

public task(param[])
{
    ....
}
这样,set_task 函数中的 param 和 task 函数中的 param 各个元素一一对应。即在上面的task函数中,param的值为1, param的值为2。

apocalyptic 发表于 2007-6-8 11:20:51

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

原来要使用数组来传递参数,难怪我一直弄不出来!
谢谢了!

apocalyptic 发表于 2007-6-9 08:28:03

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

好像不行。
比如说,我在一个伤害事件中用Attacker和Victim分别代表攻击者和受害者的id,read_data(2)直接读取伤害程度。我这样赋值:
new new param
param=Attacker
param=Victim
param=read_data(2)
目前已知上述这些赋值都是成功的。但在函数中
public task(param[])
{
....
}
task读取到的数组中的每一个数值都是0,我觉得这个数组并没有被正确传递过去,请问是什么原因?

Rulzy 发表于 2007-6-9 14:35:50

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

public plugin_init()
{
    ........
    register_event("Damage", "damage_event", "b", "2!0")
    ........
}

public demage_event(id)
{
    new param
    param=id
    param=get_user_attacker(id)
    param=read_data(2)
    set_task(0.1, "task", _, param, 3)
}

public task(param[])
{
    new attacker=param
    new victim=param
    new damage=param
    ........
}

apocalyptic 发表于 2007-6-9 17:32:35

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

Post by Rulzy
public task(param[])
{
    new attacker=param
    new victim=param
    new damage=param
    ........
}

:brick: :brick: :brick:
我就是这么写的,还是不行啊~~
怎么传递过去的都是0呢?

111222333 发表于 2007-7-19 09:11:58

ifubo 发表于 2007-11-1 18:41:37

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

已认真拜读,谢谢楼主无私指导

cityhonghu 发表于 2009-9-24 07:47:39

set_task(0.1, "task", taskid, _, _, "b")
这样写的时候,传送的参数是taskid 而且是1个的意思吗?

xp200798 发表于 2009-10-5 17:24:01

我也明白了,谢谢!
页: [1]
查看完整版本: set_task中关于参数传递的问题