apocalyptic 发表于 2007-3-4 14:12:35

函数错误,请高手指导!

我做了这样一个函数,获取玩家的STEAM-ID并检查是否正版,内容如下:

public checkaccess (id)
{
   //声明变量
   new UserId
   //存放玩家返还结果的字符串
   new CheckString[] = "VALVE_ID_PENDING"
   //如果返还结果为这个字符串,就不是合法的STEAM-ID,这个字符串有16个字符,数组长度为17位

   //获取试图连接到游戏的玩家的STEAM-ID,并进行验证
   get_user_authid ( id, UserId, 17)
   for (new i=0; i<=17; i++)//循环语句
   {
          if (UserId != CheckString)//如果有一位的内容不同就返回true并跳出for循环
          {
               return true
          }
   }
   //如果完全相同就返回false
   return false


但当我运行这个函数,一旦有正版玩家进入游戏,就会出现“Reliable channel overflowed”(信用通道溢出?)并且断开连接?
到底错在哪里?

Rulzy 发表于 2007-3-4 15:44:07

回复: 函数错误,请高手指导!

定义一个数据a,其下标取值范围为0~n-1。像你定义的UseId,你使用循环从0~17都进行检查,显然超出了下标范围。当然,这个不一定是出现“Reliable channel overflowed”的原因。
其实根本就不用这么麻烦,你只要用函数 equal 判断是否相等就行了:
if(equal(UserId, CheckString)) //相同(区分大小写)

注意,这样判断,只适合特定的HLDS版本,因为在不同版本的NOSTEAM版本上,非正版的ID并不一定都为VALVE_ID_PENDING,而且在Internet和LAN模式下都有可能不同。

apocalyptic 发表于 2007-3-4 16:23:21

回复: 函数错误,请高手指导!

真不愧是版主,果然眼光独到!
尝试一下先!

apocalyptic 发表于 2007-3-4 20:29:56

回复: 函数错误,请高手指导!

我做好了!感谢DT的各位前辈大力帮助!
页: [1]
查看完整版本: 函数错误,请高手指导!