搜索
查看: 7715|回复: 15

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

[复制链接]
发表于 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权限,就可以让大家随便进入,而不会导致这个帐号太多人玩,一进来就有经验,好多人很懒的,下载了客户端,名字都不改就进来玩了。
发表于 2007-5-4 01:24:16 | 显示全部楼层 来自 中国–广西–桂林

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

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

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

使用道具 举报

 楼主| 发表于 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[1] )
{
#if ADVANCED_DEBUG
  writeDebugInfo("XP_Save_Helper", parm[0]);
#endif
if ( access( parm[0], ADMIN_SAVEXP ) )
{
  XP_Save( parm[0] );
} else {
  if ( access( parm[0], ADMIN_TEMPID ) )
  {
   client_print( parm[0], print_chat, "%s 此ID为公用帐号,本局经验不会被保存,请更改您的ID后重新进入.", g_MODclient )
  } else {
   if ( get_cvar_num("Only_SaveXP_Reged") && !access( parm[0], ADMIN_REGED ) )
    {
    client_print( parm[0], print_chat, "%s 此ID没有注册,本局经验不会被保存,请到官方网站注册您的ID.", g_MODclient )
   } else {
    XP_Save( parm[0] );
    }
   }
  }
}
回复

使用道具 举报

发表于 2009-6-1 12:26:51 | 显示全部楼层 来自 中国–广东–中山
楼主有QQ号码?有事情想请教您 我的QQ20576526
回复

使用道具 举报

发表于 2009-6-3 21:53:39 | 显示全部楼层 来自 中国–广东–中山
楼主也不来上点通了,等待中呀...................
回复

使用道具 举报

发表于 2009-6-27 10:34:50 | 显示全部楼层 来自 中国–广东–中山
楼主也不上点通了?
回复

使用道具 举报

发表于 2009-12-21 23:18:36 | 显示全部楼层 来自 中国–吉林–松原
liuge ji hao xian{:3_57:}
回复

使用道具 举报

发表于 2009-12-24 18:37:44 | 显示全部楼层 来自 中国–广东–中山
有没有人会这个不注册不能保存玩家的经验呀?
回复

使用道具 举报

发表于 2009-12-27 13:19:54 | 显示全部楼层 来自 中国–广东–中山
这个问题还是没有能够解决
回复

使用道具 举报

发表于 2009-12-28 19:59:32 | 显示全部楼层 来自 中国–广东–中山
这个问题还没有解决呢?
回复

使用道具 举报

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

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