工程参考/配置文件/Public/ChatConfig.txt
ChatConfig.txt 给每个聊天频道配发送间隔与消耗。第 1 列是频道编号,第 4 列是发送间隔(毫秒),第 5/6、7/8、9/10 列是三组「消耗类型 + 消耗数值」,第 11 列是最低等级。样本 13 行、11 列。
行数必须正好等于 CHAT_TYPE_NUMBER(13),列数必须正好是 11,第 1 列必须等于行号——任何一条不满足,服务端就把计数清零,所有频道的消耗与限制一起失效。
文件位置与生效
| 项目 | 说明 |
|---|---|
| 运行文件 | ../Public/Config/ChatConfig.txt(宏 FILE_CHAT_CONSUME),相对于 GameServer 工作目录;客户端从资源目录按同名文件加载。注意宏指向的是 Public 下的这份,不是 Server 下的同名副本。
|
| 读取程序 | GameServer:TableInit::InitChatConsume 用 DBCFile::OpenFromTXT 打开 FILE_CHAT_CONSUME;客户端经 DBC_TALK_CONFIG 读同名文件 |
| 生效方法 | 停服后备份并修改实际副本,重启 Server;客户端一侧需要随资源更新并重启客户端。 |
| 样本格式 | GB18030-compatible,CRLF。保留原编码;源码读取器不会自动把中文转为 UTF-8。
|
消耗类型取自 CHAT_NEED_TYPE:-1 不需要、0 魔法、1 精力、2 活力。服务端按顺序处理三组,只要某组的类型不是 -1,就把消耗组数推进到对应的序号。
| 检查项 | 结论 |
|---|---|
| 行数 | 必须正好 13(CHAT_TYPE_NUMBER),且不超过 MAX_CHAT_TYPE_INTABLE(16)。 |
| 列数 | 必须正好 11。 |
| 第 1 列 | 必须等于从 0 起的行号,否则整表计数清零。 |
| 消耗组数怎么算 | 第 1 组类型不为 -1 记 1,第 2 组不为 -1 记 2,第 3 组不为 -1 记 3。中间一组填 -1 会让后面即使有值也不计入组数。 |
| 第 2、3 列 | 频道名与前导字符,只有客户端读。 |
| 第 11 列 | 最低等级,服务端保存为 m_NeedLevel。 |
文件格式
首行是类型行:INT STRING STRING INT INT INT INT INT INT INT INT;第二行是列名行,程序跳过其内容;从第三行开始读取数据。各列用真实 Tab 分隔,保留首列、空列及行尾,不用空格代替。数据行行首 # 表示注释,分号不是此表的注释规则。首列为空的行被跳过;不足的尾列补为空值,多余列不参与本页字段读取。空整数和非数字经 atoi 可能成为 0,空字符串仍为空,不把解析成功当作业务合法。第一列须唯一,重复会触发读取器错误。
字段详解
列号从 1 开始,源码列下标从 0 开始。
| 字段与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
第 1 列INT:ID |
频道编号,按 ENUM_CHAT_TYPE 排列。服务端逐行断言它等于行号,不等就把整表计数清零。 | 必须是从 0 开始的连续行号;行数必须正好等于 CHAT_TYPE_NUMBER(13),列数必须正好是 11。 |
第 2 列STRING:频道名称$1$ |
频道名称。服务端不读;客户端 _DBC_TALK_CONFIG 把它读成字符串,用于频道名与物品链接。 | 服务端不生效。 |
第 3 列STRING:前导字符$1$ |
频道前导字符。服务端不读;客户端用它做输入前缀,系统、仅客户端、帮助三个频道会改走物品链接。 | 服务端不生效。 |
第 4 列INT:发送时间间隔(毫秒) |
发送时间间隔,单位是毫秒。服务端保存为 m_DelayTime,客户端保存为 m_TimeSlice。 | 空为 0,等于不限流。 |
第 5 列INT:"消耗类型1(MP:0,精力1,活力:2,不需要:-1)" |
第 1 组消耗的类型,取值是 CHAT_NEED_TYPE:-1 不需要、0 魔法、1 精力、2 活力。服务端只在它不等于 -1 时才把消耗组数推进到对应值。 | 空为 0(魔法)。填 -1 表示这一组不消耗,同时后面的组即使有值也不会被计入消耗组数。 |
第 6 列INT:消耗数值1 |
第 1 组消耗的数值,与上一列的类型配对。 | 空为 0。 |
第 7 列INT:消耗类型2 |
第 2 组消耗的类型,取值是 CHAT_NEED_TYPE:-1 不需要、0 魔法、1 精力、2 活力。服务端只在它不等于 -1 时才把消耗组数推进到对应值。 | 空为 0(魔法)。 |
第 8 列INT:消耗数值2 |
第 2 组消耗的数值,与上一列的类型配对。 | 空为 0。 |
第 9 列INT:消耗类型3 |
第 3 组消耗的类型,取值是 CHAT_NEED_TYPE:-1 不需要、0 魔法、1 精力、2 活力。服务端只在它不等于 -1 时才把消耗组数推进到对应值。 | 空为 0(魔法)。 |
第 10 列INT:消耗数值3 |
第 3 组消耗的数值,与上一列的类型配对。 | 空为 0。 |
第 11 列INT:等级限制 |
发言所需的最低等级。服务端保存为 m_NeedLevel。 | 空为 0,等于不限制等级。 |
常用修改实例
示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件保留原样本编码、中文表头与 CRLF。网页文字使用浏览器编码显示,不表示运行文件应改存 UTF-8。
把附近频道的发送间隔从 3000 毫秒改为 5000 毫秒
修改前:
INT STRING STRING INT INT INT INT INT INT INT INT ID 频道名称$1$ 前导字符$1$ 发送时间间隔(毫秒) "消耗类型1(MP:0,精力1,活力:2,不需要:-1)" 消耗数值1 消耗类型2 消耗数值2 消耗类型3 消耗数值3 等级限制 0 附近频道 附近 3000 -1 0 -1 0 -1 0 0
修改后:
INT STRING STRING INT INT INT INT INT INT INT INT ID 频道名称$1$ 前导字符$1$ 发送时间间隔(毫秒) "消耗类型1(MP:0,精力1,活力:2,不需要:-1)" 消耗数值1 消耗类型2 消耗数值2 消耗类型3 消耗数值3 等级限制 0 附近频道 附近 5000 -1 0 -1 0 -1 0 0
按第 1 列定位 0 号频道(附近频道)。第 4 列是发送间隔,单位毫秒,样本值 3000,这里改成 5000,其余 10 列与另 12 行全部保留。
第 2、3 列的频道名与前导字符服务端不读取,改它们只影响客户端显示。三列消耗类型在样本里全是 -1,表示不消耗;把第 5 列改成 0 会立刻让这个频道开始扣魔法。
示例块含类型行、列名行与该行原文,不能覆盖整张表。改完需要重启 Server,客户端若要同步也要更新资源后重启。
验证与排查
Server 启动日志出现 “Load ChatConfig.txt ... OK!”。改完重启后连续在对应频道发言,确认间隔限制与消耗符合新值;低于第 11 列等级的角色应当被拒绝。若所有频道的限制一起消失,先检查行数是否还是 13、列数是否还是 11、第 1 列是否仍等于行号。失败时恢复备份并重启。
整表一起失效
行数、列数、第 1 列三者任一不满足,服务端会把 m_Count 置 0。后果不是那一行出错,而是所有频道都没有消耗与限制。
消耗组数按顺序推进
三组类型依次判断「是否不等于 -1」,是则把组数记成 1、2、3。第 1 组填 -1 而第 2 组填 0,组数最终是 2,但第 1 组不会被消耗——顺序很重要。
有同名副本
Server/Config 下也有一份 ChatConfig.txt,但宏 FILE_CHAT_CONSUME 指向 Public 下这份,Server 那份当前不被读取。改错文件不会有任何效果。
客户端只认前 11 列
客户端结构体 _DBC_TALK_CONFIG 与这 11 列一一对应,增删列会同时破坏两端的解析。
关联与依据
其他配置及整理状态 · 服务端外网设置 · Lua 接口索引
Common/DataBase/TLBB_DBC.cpp:实际加载、解析、字段使用或示例关联依据Common/DataBase/TLBB_DBC.h:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/Main/GameTable.cpp:实际加载、解析、字段使用或示例关联依据Server/Server/GameServer/Server/Main/GameTable.h:实际加载、解析、字段使用或示例关联依据Common/ServerBase/FileDef.h:实际加载、解析、字段使用或示例关联依据Common/GameDefine2.h:实际加载、解析、字段使用或示例关联依据Client/Client/Common/TDDBC_Struct.h:实际加载、解析、字段使用或示例关联依据Client/Client/Game/DBC/GMDataBase.cpp:实际加载、解析、字段使用或示例关联依据Client/Client/Game/Interface/GMInterface_Script_Talk.cpp:实际加载、解析、字段使用或示例关联依据resources/Public/Config/ChatConfig.txt:实际加载、解析、字段使用或示例关联依据resources/Server/Config/ChatConfig.txt:实际加载、解析、字段使用或示例关联依据
本页核对 InitChatConsume 的 13 行 11 列断言、第 1 列等于行号的校验、三组消耗类型与 CHAT_NEED_TYPE 的对应、消耗组数的推进顺序,以及客户端 _DBC_TALK_CONFIG 的 11 个字段;样本 13 行的编号连续性与列宽经脚本核算。未启动服务端与客户端,发言限制的实际表现需要实测。