|
发表于 2007-5-4 01:04:35
|
显示全部楼层
|阅读模式
来自 中国–山东–烟台–龙口市
原创技术帖,自己解决了,让魔兽仅保存注册过的玩家的经验
如果X123这个玩家名字在users.ini里存在,那么就保存他的经验,否则就在玩家退出后自动丢弃这些经验,同理,如果ADMIN.AMXX插件使用了mysql保存权限帐号也一样效果。
一切路径以addons\amxmodx\开始
1. 在scripting\include\amxconst.inc里增加:
/* r 玩家已注册
* s 总是保存该玩家经验
* t 永不保存该玩家经验
* By 先锋
*/
#define ADMIN_REGED (1<<17) /* flag "r" */
#define ADMIN_SAVEXP (1<<18) /* flag "s" */
#define ADMIN_TEMPID (1<<19) /* flag "t" */
2. scripting\warcraft3ft.sma里 WAR3_exec_config()这行上方增加
register_cvar("Only_SaveXP_Reged", "0")
3. scripting\war3ft\XP.inl里替换如下过程
public XP_Save_Helper( parm[1] )
{
#if ADVANCED_DEBUG
writeDebugInfo("XP_Save_Helper", parm[0]);
#endif
XP_Save( parm[0] );
}
替换为:
public XP_Save_Helper( parm[1] )
{
#if ADVANCED_DEBUG
writeDebugInfo("XP_Save_Helper", parm[0]);
#endif
new savexpreg
iCvar[savexpreg] = get_cvar_num("Only_SaveXP_Reged")
if ( access( parm[0], ADMIN_SAVEXP ) || !savexpreg )
{
XP_Save( parm[0] );
} else {
if ( savexpreg )
{
if ( access( parm[0], ADMIN_REGED) )
{
if ( !access( parm[0], ADMIN_TEMPID) )
{
XP_Save( parm[0] );
} else {
client_print( parm[0], print_chat, "%s 此ID为公用帐号,本局经验不会被保存,请更改您的ID后重新进入.", g_MODclient )
}
} else {
client_print( parm[0], print_chat, "%s 此ID没有注册,本局经验不会被保存,请到官方网站注册您的ID.", g_MODclient )
}
}
}
}
重新编译插件,然后将warcraft3ft.amxx放到plugins下。
4. configs\war3ft.cfg里增加一行
Only_SaveXP_Reged 1 //仅保存users.ini上有帐号的玩家经验 (1 开启/0 关闭)功能
5. configs\users.ini增加一行
"X123" "123" "zr" "a"
那么当"only_savexp_reged 1 "时候,因为存在r权限,就是已注册的,就能保存
而"X123" "123" "z" "a"或"X123" "123" "abcdeju" "a"
这两个帐号虽然users.ini中也存在,甚至具有一定OP权限,但是因为没有r,所以一样不保存
要注意,r s t 这三个权限中 s 有最高优先权,当s存在时候,不管其它设置,都是一定保存经验的。然后 t 高于r,
而"X123" "123" "zrt" "a"
一旦具有t,即使再有r也不会保存了。
而"X123" "123" "zrst" "a"这个仍然保存。
这样设置后,普通玩家连进来仅具有z权限。就可以不保存他的经验,强迫他只有通过注册后,users.ini或者sql数据库里有了他的信息才给他保存,另外,注册的插件别忘了写入数据库时候自动多一个r字母。把经常有人用的,例如www.dcoo.com,www.esai.com等装好客户端就有、并且玩家不改就进来玩的ID,提前自己注册好。密码为空,加上t权限,就可以让大家随便进入,而不会导致这个帐号太多人玩,一进来就有经验,好多人很懒的,下载了客户端,名字都不改就进来玩了。 |
|