normen 发表于 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 )
{
#if ADVANCED_DEBUG
writeDebugInfo("XP_Save_Helper", parm);
#endif
XP_Save( parm );
}
替换为:
public XP_Save_Helper( parm )
{
#if ADVANCED_DEBUG
writeDebugInfo("XP_Save_Helper", parm);
#endif
new savexpreg
iCvar = get_cvar_num("Only_SaveXP_Reged")
if ( access( parm, ADMIN_SAVEXP ) || !savexpreg )
{
XP_Save( parm );
} else {
if ( savexpreg )
{
if ( access( parm, ADMIN_REGED) )
{
if ( !access( parm, ADMIN_TEMPID) )
{
XP_Save( parm );
} else {
client_print( parm, print_chat, "%s 此ID为公用帐号,本局经验不会被保存,请更改您的ID后重新进入.", g_MODclient )
}
} else {
client_print( parm, 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权限,就可以让大家随便进入,而不会导致这个帐号太多人玩,一进来就有经验,好多人很懒的,下载了客户端,名字都不改就进来玩了。

ayufans 发表于 2007-5-4 01:24:16

回复: 原创技术帖,自己解决了,让魔兽仅保存注册过的玩家的经验

顶,又学到一种判断注册非注册的方法,不过你的这种损失了r、s、t权限,其实应该也只能这样

还有一种方法就是直接在数据库查名字,有名字的就是注册了的,没有名字则为未注册,然后一样的处理~

normen 发表于 2007-5-4 12:20:05

回复: 原创技术帖,自己解决了,让魔兽仅保存注册过的玩家的经验

原先当only_savexp_reged为0时候,即使有t也会保存,5.4号中午更新,现在是:
不管only_savexp_reged是什么,只要有s,一定保存,只要有t没s,一定不保存。
有r没(t、s),条件性保存。

public XP_Save_Helper( parm )
{
#if ADVANCED_DEBUG
writeDebugInfo("XP_Save_Helper", parm);
#endif
if ( access( parm, ADMIN_SAVEXP ) )
{
XP_Save( parm );
} else {
if ( access( parm, ADMIN_TEMPID ) )
{
   client_print( parm, print_chat, "%s 此ID为公用帐号,本局经验不会被保存,请更改您的ID后重新进入.", g_MODclient )
} else {
   if ( get_cvar_num("Only_SaveXP_Reged") && !access( parm, ADMIN_REGED ) )
    {
    client_print( parm, print_chat, "%s 此ID没有注册,本局经验不会被保存,请到官方网站注册您的ID.", g_MODclient )
   } else {
    XP_Save( parm );
    }
   }
}
}

20576526 发表于 2009-6-1 12:26:51

楼主有QQ号码?有事情想请教您 我的QQ20576526

20576526 发表于 2009-6-3 21:53:39

楼主也不来上点通了,等待中呀...................

20576526 发表于 2009-6-27 10:34:50

楼主也不上点通了?

Tiger2008 发表于 2009-12-21 23:18:36

liuge ji hao xian{:3_57:}

20576526 发表于 2009-12-24 18:37:44

有没有人会这个不注册不能保存玩家的经验呀?

20576526 发表于 2009-12-27 13:19:54

这个问题还是没有能够解决

20576526 发表于 2009-12-28 19:59:32

这个问题还没有解决呢?
页: [1] 2
查看完整版本: 原创技术帖,自己解决了,让魔兽仅保存注册过的玩家的经验