apocalyptic 发表于 2007-3-7 00:05:18

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

按照官方的说明文档,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中判断是正常的供给还是误伤,就需要判断供给者和受害者是否同一队伍,那应该怎样判断?

Rulzy 发表于 2007-3-7 14:25:26

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

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

apocalyptic 发表于 2007-3-7 14:56:26

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

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

apocalyptic 发表于 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: Player out of range (0)
L 03/07/2007 - 20:18:51: Displaying debug trace (plugin "HC_ActionManageSystem.amxx")
L 03/07/2007 - 20:18:51: Run time error 10: native error (native "cs_get_user_team")
L 03/07/2007 - 20:18:51:     HC_ActionManageSystem.sma::Damage (line 31)
=========

Rulzy 发表于 2007-3-8 01:30:50

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

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

apocalyptic 发表于 2007-3-8 11:20:54

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

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

Rulzy 发表于 2007-3-8 12:35:25

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

public plugin_init()
{
    ......
    register_event("DeathMsg","death_msg","a", "1!0")
    ......
}

public death_msg()
{
    new Killer=read_data(1)
    new Victim=read_data(2)
    if(!is_user_connected(Killer) ||!is_user_connected(Victim))
      return PLUGIN_CONTINUE
    new bool:TK=(get_user_team(Killer)==get_user_team(Victim))
    if(TK) return PLUGIN_CONTINUE
    ......
}

apocalyptic 发表于 2007-3-8 13:52:19

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

我把"1!0"换成了"2!0"之后就可以了,其他都没有改。呵呵,其实到现在还没完全搞明白……
努力学习中……
谢谢指导!
页: [1]
查看完整版本: cs_get_user_team()的返回值是字符型吗?为什么不能对比?