配置groups.conf,让普通玩家也能用GM指令

看完《设置GM账号的方法及组别说明》后,我们知道实际上普通玩家就是账号的group_id为0的玩家,如果我们想要让普通玩家也能使用一些GM指令(比如go指令)那么可以做到吗?

答案是肯定的,想要管理不同组别的账号能使用什么GM指令以及拥有什么权限,也是在rAthena安装目录下的conf\groups.conf来配置和定义,本章重点讲groups.conf文件的格式和配置方法。

这个groups.conf文件称之为“玩家组别配置文件”,用来定义玩家的组别和他们所拥有的权限。这个文件的格式是libconfig类型的,相比其他的配置文件(比如目前rA使用的item_db.txt)来说,这种类型的文件我们阅读起来会比较好理解。

我们纵观一下文件的结构,可以发现除了最开头的一大段注释外,主要内容是从groups:开始的,如下图所示(为了方便大家查看,我对我的Notepad++做过着色处理,大家看内容可能是纯黑色的):

整个文件的主体内容,都被 group: (内容正文) 包含着,里面的内容正文按照一组一组的大括号来分组,我们先来看看第一组大括号的内容,如下图所示:

我们来从上到下解析一下这个组别配置的内容是什么意思,放轻松,跟我来~

id:此组的编号,也就是login表里面传说中的group_id,如果你账号的group_id是0,那么意味着最后系统会根据这一组的内容,来赋予你指令或者权限。当新建账号的时候,账号的group_id默认都是0,也表示这是一个普通玩家账号。

name:此组成员的称号(或者说名称),这个名称一般情况下脚本和系统都不会重用它,只是用来做一些提示用。比如当你在游戏里面用@who指令查看全服有谁在线的时候,可以看到这个人是哪个组的成员,如下图红线所示:

level:此组成员的GM等级,脚本里面可以使用getgmlevel()来获取这个值,这个值用来表示这个符合这个组成员的GM等级。

注意:哪怕你group_id0,但是把上面group_id0对应的组的level值改成99,那么在脚本里面使用getgmlevel()来获取这个值也会得到99,但是此时并非表示此账号是一个group_id99的账号。

inherit:这个字段在上图的例子中,内容是空,我们先不讲解他,之后再讲。

commands:此组成员可以使用的GM指令,本文主要的核心就是这个字段,想要让一个组别(group_id)为0的普通玩家也可以使用GM指令,就应该配置它。下面我们再举例子来研究如何配置它。

permissions:此组成员的权限,在默认情况下,玩家是无法交易和组队的,所以我们需要为group_id0的普通玩家,添加 can_tradecan_party 权限(这里 can_trade 是指允许交易,can_party 是指允许组队,设置为true表示允许,设置为false表示禁止),更多的权限关键词,可以在rAthena安装目录的docpermissions.txt文件中查到,随后会开单章介绍这些权限。

以上就是这个group_id为0的组别的指令和权限配置信息!

下面我们来动手做实验,如果你想让普通玩家,也可以使用go指令,那么应该怎么做呢?很简单,你只需要在commands里面,加上对应的设置即可,如下图所示:

上图中的 go: true 表示允许玩家使用@go指令!那么我们知道,指令有2种用法,一种是对自己使用的,用@符号开头,比如:@go,而另一种是对其他人使用的,用#符号开头,比如:#go

如果我们只希望这个普通组别的玩家,可以使用 #go 来送走别人,而不能使用@go来传送自己,应该怎么做呢(实际上我们很少这么做,不过还是要教一下大家)?很简单,我们只需要如下设置即可:

可以看到,上图中用一组方括号,将两个开关括起来,开关之间逗号区分。这种情况下,第一个开关控制着@符号的使用权限,第二个开关控制着#符号的使用权限~ 如果你只设置了一个开关,那么第二个开关默认是关闭的。

也就是说,当你设置为下图这种情况下的时候,玩家只能用@go,而不能用#go!

简单吧,现在你就可以动手试一下,看看是不是有效了。上面我们已经掌握了第一个组别,即group_id为0的普通玩家的配置信息的格式,以及他们各个字段的作用。但是上面的字段出现的并不全面,而且inherit字段我们也没有详细了解,在这里我们一个一个来讲。下面我们会讲解一些上面没有详细讲到的字段,希望大家也可以跟着来学习。

我们来看第二组设置,即group_id1的玩家的组别配置信息,其实这一组里面我们几乎都认识,除了inherit字段!

可以看到,上图中的这个组别名字,叫Super Player(超级玩家),inherit 字段的值是 ( “Player” ) ,这说明什么呢?这说明超级玩家享有“Player”这一组玩家(即group_id为0的普通玩家)的所有权限!

如果你允许了普通玩家(即“Player”)使用@go指令,那么超级玩家(即“Super Player”)也会自动的就允许使用@go指令!

接下来我们再继续往下看,看group_id2的玩家的组别配置信息,这个配置信息我们也基本都懂了,不过出现了一个新字段:log_commands

这个字段的意思是:此组玩家使用指令的时候,是否被记录到数据库。比如此组玩家在什么时候,什么地点,使用过什么GM指令。这个功能一般用于管理员来确认一些玩家GM是否有违规使用GM指令的情况。

如果没有这个字段,那么说明默认不记录。这个值如果为true,并且当 conf\log_athena.conf 配置文件中的 log_commands 项目处于开启状态的话:

那么此组玩家使用指令的情况,将会被记录到日志数据库(比如我们之前建立的 ro_logs )里面的 atcommandlog 表!

最后,还有一种情况需要告诉大家,那么就是关于 inherit 字段,是允许多重继承的,你可以同时继承几个不同组别的权限设置,比如我们游戏最高管理员的组别的设置:

可以看到,我们group_id99的游戏最高管理员这一组,会继承 ( “Support”, “Law Enforcement” ) 这两组的权限设置(Support是客服人员,Law Enforcement是执法者),这两个组能用的指令和权限,游戏最高管理员都可以用!

看完这些,大家都累坏了吧?能看到这里并且都动手试过的话,说明你也是个很有耐心的人哟,佩服佩服!大家有什么疑问的话,可以先动手验证一下,试不出结论可以到群里问我。