apocalyptic 发表于 2007-3-5 00:43:20

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

自己开发的插件,在游戏开局的时候给正版玩家加100生命值。基本内容如下:

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

public checkaccess (id)//正版认证部分(特别鸣谢Rulzy版主技术指导)
{
new UserId
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)完全不起任何作用。

Rulzy 发表于 2007-3-5 13:47:49

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

new CheckString[] = "VALVE_ID_PENDING"

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

public checkaccess(id)
{
    new UserId
    get_user_authid ( id, UserId, 16)
    if(equal(UserId, CheckString))
      return false
    else
      return true
}

public new_round(id)//主要功能模块,在开局时给正版玩家加100生命值
{
if (checkaccess (id))
      set_user_health (id,200)
}
其实纯粹使用ResetHUD事件来判断玩家出生,是不准确的。你可以参考如下链接:
http://forums.alliedmods.net/showthread.php?t=42159

apocalyptic 发表于 2007-3-6 08:41:58

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

又长知识了,谢谢指导!
页: [1]
查看完整版本: 还是关于register_event的问题!——版主快来救救我啊!