搜索
查看: 3075|回复: 2

还是关于register_event的问题!——版主快来救救我啊!

[复制链接]
发表于 2007-3-5 00:43:20 | 显示全部楼层 |阅读模式 来自 中国–广东–中山
自己开发的插件,在游戏开局的时候给正版玩家加100生命值。基本内容如下:

public plugin_init() //插件主体部分
{
register_plugin(……)
register_cvar(……)
register_event("ResetHUD", "new_round", "ab")
}

public checkaccess (id)//正版认证部分(特别鸣谢Rulzy版主技术指导)
{
new UserId[17]
new CheckString[] = "VALVE_ID_PENDING"
get_user_authid ( id, UserId, 17)
if(equal(UserId, CheckString))
return false
else
return true
}

public new_round(id)//主要功能模块,在开局时给正版玩家加100生命值
{
if (checkaccess (id))
set_user_health (id,200)
}

现在的现象是:如果我在new_round(id)部分不加上验证功能(也就是上文中的蓝色粗体部分),那所有的玩家都可以加100生命值(可见new_round(id)部分的确是运行了,加生命值的函数也是正常的)。但如果我加上了验证功能,就只给我一个人加,其他的正版用户不能加。
其实我判断是否正版的依据很简单,只要玩家提供给服务器的验证码完全符合“VALVE_ID_PENDING”字符串,我就认为他不是正版,否则就是。既然这个模块能把我认出来,为什么就不能把别人认出来呢?虽然我和他们的STEAM-ID不一样,但都是“STEAM_0:1:******”的格式,为什么会这样?

另外,请问register_event后面跟着的标识符abcde是什么意思?我如果只用B,就会出现上述现象(即使我不在线,对别的正版玩家也不起作用),如果只用其他的ACDE,则整个new_round(id)完全不起任何作用。
发表于 2007-3-5 13:47:49 | 显示全部楼层 来自 中国–福建–漳州

回复: 还是关于register_event的问题!——版主快来救救我啊!

  1. new CheckString[] = "VALVE_ID_PENDING"
  2. public plugin_init() //插件主体部分
  3. {
  4.     register_plugin(……)
  5.     register_cvar(……)
  6. [color=red][b]   register_event("ResetHUD", "new_round", "be")[/b][/color]
  7. }
  8. public checkaccess(id)
  9. {
  10.     new UserId[17]
  11.     get_user_authid ( id, UserId, 16)
  12.     if(equal(UserId, CheckString))
  13.         return false
  14.     else
  15.         return true
  16. }
  17. public new_round(id)//主要功能模块,在开局时给正版玩家加100生命值
  18. {
  19. [color=blue][b]  if (checkaccess (id))[/b][/color]
  20.         set_user_health (id,200)
  21. }
复制代码
其实纯粹使用ResetHUD事件来判断玩家出生,是不准确的。你可以参考如下链接:
http://forums.alliedmods.net/showthread.php?t=42159
回复

使用道具 举报

 楼主| 发表于 2007-3-6 08:41:58 | 显示全部楼层 来自 中国–广东–中山

回复: 还是关于register_event的问题!——版主快来救救我啊!

又长知识了,谢谢指导!
回复

使用道具 举报

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

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