搜索
查看: 3221|回复: 9

set_task中关于参数传递的问题

[复制链接]
发表于 2007-6-7 23:51:41 | 显示全部楼层 |阅读模式 来自 广东中山
如果我需要在某种情况下,延迟一点时间,然后对一个玩家实施伤害,我使用了这样的代码:
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 )
我理解为:第一个是延迟的时间,第二个是需要执行的函数,第三个是传递到函数的参数,第四五个我还不明白,第六个是标记,第七个是重复次数。

请高手指教,如何才能实现我的目的?
发表于 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. 当只传递一个整数时,使用如下方式:
  1. set_task(0.1, "task", taskid)
  2. 或 set_task(0.1, "task", taskid, _, _, "a", 7)
  3. 或 set_task(0.1, "task", taskid, _, _, "b")
  4. public task(taskid)
  5. {
  6.     ....
  7. }
复制代码
这样,set_task中的taskid是什么值,task函数中的taskid就是什么值。“_”表示当有默认参数时使用默认参数。

2. 传递两个或两个以上参数时(以两个参数为例):
  1. new param[2]
  2. param[0]=1
  3. param[1]=2
  4. set_task(0.1, "task", taskid, param, 2)
  5. 或 set_task(0.1, "task", taskid, param, 2, "a", 7)
  6. 或 set_task(0.1, "task", taskid, param, 2, "b")
  7. public task(param[])
  8. {
  9.     ....
  10. }
复制代码
这样,set_task 函数中的 param 和 task 函数中的 param 各个元素一一对应。即在上面的task函数中,param[0]的值为1, param[1]的值为2。
回复

使用道具 举报

 楼主| 发表于 2007-6-8 11:20:51 | 显示全部楼层 来自 广东中山

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

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

使用道具 举报

 楼主| 发表于 2007-6-9 08:28:03 | 显示全部楼层 来自 广东中山

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

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

使用道具 举报

发表于 2007-6-9 14:35:50 | 显示全部楼层 来自 福建漳州

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

  1. public plugin_init()
  2. {
  3.     ........
  4.     register_event("Damage", "damage_event", "b", "2!0")
  5.     ........
  6. }
  7. public demage_event(id)
  8. {
  9.     new param[3]
  10.     param[1]=id
  11.     param[0]=get_user_attacker(id)
  12.     param[2]=read_data(2)
  13.     set_task(0.1, "task", _, param, 3)
  14. }
  15. public task(param[])
  16. {
  17.     new attacker=param[0]
  18.     new victim=param[1]
  19.     new damage=param[2]
  20.     ........
  21. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2007-6-9 17:32:35 | 显示全部楼层 来自 广东中山

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

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

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

使用道具 举报

发表于 2007-7-19 09:11:58 | 显示全部楼层 来自 江苏连云港
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-11-1 18:41:37 | 显示全部楼层 来自 湖北武汉

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

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

使用道具 举报

发表于 2009-9-24 07:47:39 | 显示全部楼层 来自 日本
set_task(0.1, "task", taskid, _, _, "b")
这样写的时候,传送的参数是taskid 而且是1个的意思吗?
回复

使用道具 举报

发表于 2009-10-5 17:24:01 | 显示全部楼层 来自 广东汕尾
我也明白了,谢谢!
回复

使用道具 举报

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

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