搜索
查看: 1951|回复: 3

函数错误,请高手指导!

[复制链接]
发表于 2007-3-4 14:12:35 | 显示全部楼层 |阅读模式 来自 中国–广东–中山
我做了这样一个函数,获取玩家的STEAM-ID并检查是否正版,内容如下:
public checkaccess (id)
{
     //声明变量
     new UserId[17]
     //存放玩家返还结果的字符串
     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”(信用通道溢出?)并且断开连接?
到底错在哪里?
发表于 2007-3-4 15:44:07 | 显示全部楼层 来自 中国–福建–漳州

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

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

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

使用道具 举报

 楼主| 发表于 2007-3-4 16:23:21 | 显示全部楼层 来自 中国–广东–中山

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

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

使用道具 举报

 楼主| 发表于 2007-3-4 20:29:56 | 显示全部楼层 来自 中国–广东–中山

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

我做好了!感谢DT的各位前辈大力帮助!
回复

使用道具 举报

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

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