搜索
查看: 2693|回复: 7

cs_get_user_team()的返回值是字符型吗?为什么不能对比?

[复制链接]
发表于 2007-3-7 00:05:18 | 显示全部楼层 |阅读模式 来自 广东中山
按照官方的说明文档,cs_get_user_team()的返回值是CS_TEAM_T或者CS_TEAM_CT或者CS_TEAM_SPECTATOR,我估计这样的返回结果应该是字符型的变量,对应SMALL就是转化为ASCII码的整型数组。
我使用了一个条件判断语句
if (equal(cs_get_user_team(Killer)),cs_get_user_team(Victim)))
来判断在战斗中攻击者和受害者是否属于同一队伍,但是系统提示:参数类型不匹配。
但如果我使用
if ((cs_get_user_team(Killer)==cs_get_user_team(Victim)))
却没有发现语法错误。
这是为什么?难道cs_get_user_team()返回的不是字符串而是整数吗?
如果要在Damage中判断是正常的供给还是误伤,就需要判断供给者和受害者是否同一队伍,那应该怎样判断?
发表于 2007-3-7 14:25:26 | 显示全部楼层 来自 福建漳州

回复: cs_get_user_team()的返回值是字符型吗?为什么不能对比?

返回类型是 CsTeams,是枚举类型,取值范围只有固定的几个值。
回复

使用道具 举报

 楼主| 发表于 2007-3-7 14:56:26 | 显示全部楼层 来自 广东中山

回复: cs_get_user_team()的返回值是字符型吗?为什么不能对比?

我明白了,在使用它之前需要使用new csteam:team来声明变量!
回复

使用道具 举报

 楼主| 发表于 2007-3-7 20:39:44 | 显示全部楼层 来自 广东中山

回复: cs_get_user_team()的返回值是字符型吗?为什么不能对比?

看过网上若干的例子之后,我发现
if (cs_get_user_team(Killer)==cs_get_user_team(Victim))
并没有语法漏洞。但为什么这样编译出来的插件会在控制台中出现如下的提示信息?
=========
L 03/07/2007 - 20:18:51: [CSTRIKE] Player out of range (0)
L 03/07/2007 - 20:18:51: [AMXX] Displaying debug trace (plugin "HC_ActionManageSystem.amxx")
L 03/07/2007 - 20:18:51: [AMXX] Run time error 10: native error (native "cs_get_user_team")
L 03/07/2007 - 20:18:51: [AMXX]    [0] HC_ActionManageSystem.sma::Damage (line 31)
=========
回复

使用道具 举报

发表于 2007-3-8 01:30:50 | 显示全部楼层 来自 福建漳州

回复: cs_get_user_team()的返回值是字符型吗?为什么不能对比?

因为你少了个判断。当玩家自杀或被摔死等时,killer值为0,所以超出范围。你可以在注册事件时加上个条件"1!0",或者在函数中加上 if(!killer) ..... //比如说返回等
另外,应该还要加上个判断 if(!is_user_connected(killer)) ..... //比如说返回等
回复

使用道具 举报

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

回复: cs_get_user_team()的返回值是字符型吗?为什么不能对比?

我加上了"1!0"来限制Killer的取值范围之后,错误信息消失了。
可是public death_msg()里面的代码又不运行了。怎么办?
回复

使用道具 举报

发表于 2007-3-8 12:35:25 | 显示全部楼层 来自 福建漳州

回复: cs_get_user_team()的返回值是字符型吗?为什么不能对比?

  1. public plugin_init()
  2. {
  3.     ......
  4.     register_event("DeathMsg","death_msg","a", "1!0")
  5.     ......
  6. }
  7. public death_msg()
  8. {
  9.     new Killer=read_data(1)
  10.     new Victim=read_data(2)
  11.     if(!is_user_connected(Killer) ||!is_user_connected(Victim))
  12.         return PLUGIN_CONTINUE
  13.     new bool:TK=(get_user_team(Killer)==get_user_team(Victim))
  14.     if(TK) return PLUGIN_CONTINUE
  15.     ......
  16. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2007-3-8 13:52:19 | 显示全部楼层 来自 广东中山

回复: cs_get_user_team()的返回值是字符型吗?为什么不能对比?

我把"1!0"换成了"2!0"之后就可以了,其他都没有改。呵呵,其实到现在还没完全搞明白……
努力学习中……
谢谢指导!
回复

使用道具 举报

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

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