工程参考/配置文件/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-compatibleCRLF。保留原编码;源码读取器不会自动把中文转为 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 列一一对应,增删列会同时破坏两端的解析。

关联与依据

Server/ChatConfig.txt

其他配置及整理状态 · 服务端外网设置 · 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 行的编号连续性与列宽经脚本核算。未启动服务端与客户端,发言限制的实际表现需要实测。