工程参考/配置文件/Server/GMList.ini
GMList.ini 登记哪些角色可以通过游戏内指令入口执行管理命令,以及各角色的权限档位。这里使用角色的持久 GUID,不使用场景中的对象 ID、账号 ID、角色名字或背包位置。
文件位置与生效
| 项目 | 说明 |
|---|---|
| 运行文件 | ./Config/GMList.ini,相对于读取程序的工作目录。源码 resources/Server/Config 是样本位置,实际部署可能另有副本。
|
| 读取程序 | Server 游戏进程 |
| 生效方法 | 可正常停服后重启 Server;已有权限足够的管理员也可通过现有 GM 指令入口执行 reloadgmlist(别名 debug_reloadconfig),重读当前 Server 的 GMList.ini。这不是 Lua 函数,也不重载全部配置。该命令要求旧名单中的 access=0 权限;首次配置或已失去权限时使用重启方式。多个 Server 需分别生效。 |
| 样本格式 | GB18030-compatible,CRLF。保留原编码;源码读取器不会自动把中文转为 UTF-8。
|
所有项目位于 [gm]。count 控制读取 guid0/access0、guid1/access1 等连续条目;样本即使保留了更多 guid 行,超出 count 的部分也不参与本轮读取。
文件格式
使用 [节名] 与 Key=Value,节名和键名区分大小写,保持节标题位于行首。用单独一行分号写注释,保留原编码及 CRLF 换行;重复节或键取先匹配项,不依赖后写覆盖。缺项、空值与 0 分别按下表处理。
字段详解
模板 [n] 表示从 0 开始的序号,写入时应展开为实际数字;不是字面键名。
[gm]
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
count整数,0 到 256 |
实际启用的角色条目数,按 n=0 到 count-1 读取。0 表示本名单没有任何角色;源码的循环没有可靠上限防护,不能超过数组容量 256。 | 必填;负数不是受支持的关闭方式。 |
guid[n]十进制整数,角色 GUID |
同序号的 access[n] 属于此角色。GUID 在换场景后保持角色身份;日志中 GUID=%X 是十六进制显示,须先转换为十进制,不能把 0x 前缀直接交给 atoi 读取。GUID 重复时指令入口使用第一条匹配记录。 | 启用序号范围内必填;缺项会触发读取错误,不使用教学值作为默认值。 |
access[n]整数,0 到 4 |
0 对应 ALL,允许全部已实现且列入权限表的指令;1 对应 ADMIN(含物品、经验等修改);2 对应 GMADMIN(含传送、查询等);3 对应 GM(含系统消息等);4 映射到等级 0,权限表拒绝所有指令。数值越小权限越高,具体命令仍受各自处理条件约束。 | 可选;缺失、负数或超过 4 都回退为 0,即最高档。空值经 atoi 也为 0。应明确填写合法值。 |
常用修改实例
示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。
降低已有测试管理员的权限
修改前:
[gm] count=1 guid0=123456 access0=0
修改后:
[gm] count=1 guid0=123456 access0=3
123456 是教学 GUID,操作时保留目标角色原有的 guid 值与 count,只把它对应的 access 从 0 改为 3。若原文件还有其他管理员,全部保留。修改前由另一名 access=0 的管理员准备重载,或采用停服重启;降权后该角色不能再靠 reloadgmlist 自行恢复最高档。预期是该角色仅通过最低一档指令检查,具体操作仍须测试。
验证与排查
确认启动参数与共享内存模式,再核对角色 GUID、count 和每项 access。重载后检查 Server 日志的 GMAccess 与 Deny/执行结果;日志将 GUID 打印成十六进制。分别用目标角色和普通测试角色确认权限,不执行发物品、删角色等有副作用的命令来试探。失败时正常停服并恢复备份。
名单生效还有前提:正常命令开关关闭、且 Server 启用共享内存时才按此名单核对角色。Server 启动参数 -commandenable 会跳过名单并沿用 access=0;关闭共享内存的分支也把当前角色视作可执行管理命令。不能仅检查名单就认定普通玩家没有 GM 权限,也不要用这两个开关来修复名单。移除管理员时删除对应整对条目并压紧后续序号、减少 count;保留恢复路径。
关联与依据
其他配置及整理状态 · 服务端外网设置 · Lua 接口索引
Common/ServerBase/Ini.cpp:实际加载、解析、字段使用或示例关联依据Common/ServerBase/Ini.h:实际加载、解析、字段使用或示例关联依据Common/ServerBase/FileDef.h:实际加载、解析、字段使用或示例关联依据Common/GameDefine2.h:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/Main/GameTable.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/Main/GameTable.h:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/Packets/CGCommandHandler.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/Main/Server.cpp:实际加载、解析、字段使用或示例关联依据
本页核对源码读取、字段使用与样本格式,未启动游戏、服务端或数据库。解析验证不等于游戏实测;广播、权限、客户端交互等运行结果需要实测。