如何将指定realm设置为仅GM(权限等级>0的账户)可访问?
配置指定Realm仅对GM开放的操作步骤
本配置的核心逻辑是:将目标Realm的访问校验规则调整为,仅当账号在acore_auth.account_access表中对应记录的gmlevel值大于0时,才拥有该Realm的可见、可进入权限,普通玩家(gmlevel=0)一律无法访问。
方案1:通过服务配置实现,无需修改核心代码
- 第一步:确认目标Realm的数据库ID
连接acore_auth数据库,执行查询语句拿到目标专属Realm的唯一ID,记为<target_realm_id>:SELECT id, name FROM realmlist; - 第二步:清理目标Realm下的无效普通玩家授权
执行SQL删除account_access表中所有针对目标Realm、权限等级为0的普通玩家授权条目:DELETE FROM account_access WHERE RealmID = <target_realm_id> AND gmlevel = 0; - 第三步:调整auth服务全局校验规则
打开auth服务的配置文件authserver.conf,找到配置项DisallowRealmWithoutAccess,将其默认值从0修改为1。该配置开启后,系统将调整默认访问逻辑:所有账号只有在
account_access表中存在对应RealmID的有效授权条目时,才能看到并进入该Realm;无有效授权的账号将完全看不到该Realm。 - 第四步:为GM账号添加目标Realm的授权
给所有需要访问该专属Realm的GM账号,在account_access表中添加对应授权记录,确保记录的gmlevel值大于0。例如给账号ID为123、权限等级为3的GM授权访问ID为2的目标Realm,执行语句:INSERT INTO account_access (id, RealmID, gmlevel) VALUES (123, 2, 3);
拥有全局GM权限(account_access表中RealmID=-1、gmlevel>0)的账号无需额外配置,可自动通过所有Realm的权限校验。 - 第五步:重启authserver服务使配置生效
方案1注意事项
DisallowRealmWithoutAccess为全局生效配置,开启后所有面向普通玩家的公开Realm也会应用强制授权校验,需要提前为所有普通玩家批量补充公开Realm的gmlevel=0授权条目,否则普通玩家将无法看到公开Realm。- 校验生效后,可使用普通玩家账号登录验证:专属Realm将不会出现在服务器列表中;使用GM账号登录可正常看到并进入专属Realm,即代表配置成功。
方案2:仅对目标Realm生效权限限制,不影响全局公开服务器
如果不想调整全局校验规则、不想增加公开Realm的批量授权运维成本,可以通过修改核心代码实现单Realm的专属权限控制:
- 定位auth服务核心代码中查询客户端可用Realm列表的逻辑(一般在
src/server/authserver/RealmManager.cpp文件中) - 在Realm列表返回逻辑中,为目标
<target_realm_id>追加权限判断条件:只有当当前登录账号满足account_access表中存在对应记录(全局权限RealmID=-1或目标Realm专属授权)、且gmlevel>0时,才将该专属Realm加入返回给客户端的服务器列表 - 重新编译authserver核心程序,重启服务即可生效。该方案的权限限制仅针对设置的目标专属Realm,其他公开Realm将完全保留默认的访问逻辑,不受影响。
内容的提问来源于stack exchange,提问作者Francesco Borzi
相关产品推荐
相关产品推荐

