工程参考/配置文件/Public/BusInfo.txt

来自天龙知识库
跳到导航跳到搜索


首页 · 配置文件索引 · 修改约定

BusInfo.txt 登记交通工具。第 1 列是编号,第 3 到 9 列是脚本、类型、停站时间、模型、模型高度、准乘人数与行驶速度,第 10 到 25 列是 8 个座位的动作表编号与绑定点名称。样本 6 行、25 列。

服务端只读前 9 列里的 8 个(跳过第 2 列名称),座位区完全不读;客户端的结构体 _DBC_BUS_INFO 覆盖全部 25 列。

位置与生效 · 文件格式 · 字段详解 · 修改实例

文件位置与生效

项目 说明
运行文件 ../Public/Config/BusInfo.txt,路径写死在加载函数里,相对于 GameServer 工作目录;客户端从资源目录按同名文件加载。
读取程序 GameServer:TableInit::InitBusInfoTable 用 DBCFile::OpenFromTXT 打开 "../Public/Config/BusInfo.txt";客户端经 DBC_BUS_INFO 读同一份(结构体多出 8 个座位)
生效方法 停服后备份并修改实际副本,重启 Server;客户端一侧需要随资源更新并重启客户端。
样本格式 GB18030-compatibleCRLF。保留原编码;源码读取器不会自动把中文转为 UTF-8。

加载先断言行数在 0 到 MAX_BUS_INFO_COUNT(2046)之间、列数不少于 9,然后逐行取编号并检查越界与重复。

检查项 结论
编号怎么定位 直接当作数组下标 m_aBusInfo[nDataID],并检查重复。
编号越界或重复 记错误日志、断言,并清空整表。
第 2 列名称 服务端把 m_pszName 置空,不读取;只有客户端结构体读它。
第 7、9 列 按 FLOAT 读取(模型高度、行驶速度)。
第 10 到 25 列 8 对「动作表编号 + 绑定点」,服务端不读,正好填满客户端座位数组成员。

文件格式

首行是类型行:INT STRING INT INT INT INT FLOAT INT FLOAT INT STRING INT STRING INT STRING INT STRING INT STRING INT STRING INT STRING INT STRING;第二行是列名行,程序跳过其内容;从第三行开始读取数据。各列用真实 Tab 分隔,保留首列、空列及行尾,不用空格代替。数据行行首 # 表示注释,分号不是此表的注释规则。首列为空的行被跳过;不足的尾列补为空值,多余列不参与本页字段读取。空整数和非数字经 atoi 可能成为 0,空字符串仍为空,不把解析成功当作业务合法。第一列须唯一,重复会触发读取器错误。

字段详解

列号从 1 开始,源码列下标从 0 开始。

字段与类型 含义与修改要点 缺项或特殊值
第 1 列
INT:ID
交通工具编号。服务端把它当作数组下标写入 m_aBusInfo[nDataID],并检查重复。 必须落在 0 到 2045 之间且不能重复;越界或重复会记错误日志、断言并清空整表。
第 2 列
STRING:名称
名称。服务端把 m_pszName 置空,不读取本列;客户端结构体 _DBC_BUS_INFO 把它读成字符串。 服务端不生效。
第 3 列
INT:脚本ID
脚本编号。保存为 m_nScriptID。 空为 0。
第 4 列
INT:类型
类型。保存为 m_nType。 空为 0。
第 5 列
INT:停站时间(毫秒)
停站时间,单位是毫秒。保存为 m_nStopTime。 空为 0,等于不停站。
第 6 列
INT:模型数据ID
模型数据编号。保存为 m_nModelID。 空为 0。
第 7 列
FLOAT:模型高度
模型高度,按 FLOAT 读取。保存为 m_fModelHeight。 空为 0。
第 8 列
INT:准乘人数
准乘人数。保存为 m_nMaxPassengerCount。 空为 0,等于不能载人。
第 9 列
FLOAT:行驶速度
行驶速度,按 FLOAT 读取。保存为 m_fMoveSpeed。 空为 0,等于不动。
第 10 列
INT:动作表编号0
第 1 个座位的动作表编号。服务端不读;客户端结构体里的座位数组有 8 项,正好对应第 10 到 25 列。 服务端不生效。填 -1 表示这个座位不存在。
第 11 列
STRING:绑定点名称0
第 1 个座位的绑定点名称。服务端不读。 服务端不生效。
第 12 列
INT:动作表编号1
第 2 个座位的动作表编号。服务端不读;客户端结构体里的座位数组有 8 项,正好对应第 10 到 25 列。 服务端不生效。填 -1 表示这个座位不存在。
第 13 列
STRING:绑定点名称1
第 2 个座位的绑定点名称。服务端不读。 服务端不生效。
第 14 列
INT:动作表编号2
第 3 个座位的动作表编号。服务端不读;客户端结构体里的座位数组有 8 项,正好对应第 10 到 25 列。 服务端不生效。填 -1 表示这个座位不存在。
第 15 列
STRING:绑定点名称2
第 3 个座位的绑定点名称。服务端不读。 服务端不生效。
第 16 列
INT:动作表编号3
第 4 个座位的动作表编号。服务端不读;客户端结构体里的座位数组有 8 项,正好对应第 10 到 25 列。 服务端不生效。填 -1 表示这个座位不存在。
第 17 列
STRING:绑定点名称3
第 4 个座位的绑定点名称。服务端不读。 服务端不生效。
第 18 列
INT:动作表编号4
第 5 个座位的动作表编号。服务端不读;客户端结构体里的座位数组有 8 项,正好对应第 10 到 25 列。 服务端不生效。填 -1 表示这个座位不存在。
第 19 列
STRING:绑定点名称4
第 5 个座位的绑定点名称。服务端不读。 服务端不生效。
第 20 列
INT:动作表编号5
第 6 个座位的动作表编号。服务端不读;客户端结构体里的座位数组有 8 项,正好对应第 10 到 25 列。 服务端不生效。填 -1 表示这个座位不存在。
第 21 列
STRING:绑定点名称5
第 6 个座位的绑定点名称。服务端不读。 服务端不生效。
第 22 列
INT:动作表编号6
第 7 个座位的动作表编号。服务端不读;客户端结构体里的座位数组有 8 项,正好对应第 10 到 25 列。 服务端不生效。填 -1 表示这个座位不存在。
第 23 列
STRING:绑定点名称6
第 7 个座位的绑定点名称。服务端不读。 服务端不生效。
第 24 列
INT:动作表编号7
第 8 个座位的动作表编号。服务端不读;客户端结构体里的座位数组有 8 项,正好对应第 10 到 25 列。 服务端不生效。填 -1 表示这个座位不存在。
第 25 列
STRING:绑定点名称7
第 8 个座位的绑定点名称。服务端不读。 服务端不生效。

常用修改实例

示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件保留原样本编码、中文表头与 CRLF。网页文字使用浏览器编码显示,不表示运行文件应改存 UTF-8。

把 0 号交通工具的停站时间从 0 毫秒改为 3000 毫秒

修改前:

INT	STRING	INT	INT	INT	INT	FLOAT	INT	FLOAT	INT	STRING	INT	STRING	INT	STRING	INT	STRING	INT	STRING	INT	STRING	INT	STRING	INT	STRING
ID	名称	脚本ID	类型	停站时间(毫秒)	模型数据ID	模型高度	准乘人数	行驶速度	动作表编号0	绑定点名称0	动作表编号1	绑定点名称1	动作表编号2	绑定点名称2	动作表编号3	绑定点名称3	动作表编号4	绑定点名称4	动作表编号5	绑定点名称5	动作表编号6	绑定点名称6	动作表编号7	绑定点名称7
0	单程车	-1	0	0	1018	3	1	6	6	attach1	-1		-1		-1		-1		-1		-1		-1	

修改后:

INT	STRING	INT	INT	INT	INT	FLOAT	INT	FLOAT	INT	STRING	INT	STRING	INT	STRING	INT	STRING	INT	STRING	INT	STRING	INT	STRING	INT	STRING
ID	名称	脚本ID	类型	停站时间(毫秒)	模型数据ID	模型高度	准乘人数	行驶速度	动作表编号0	绑定点名称0	动作表编号1	绑定点名称1	动作表编号2	绑定点名称2	动作表编号3	绑定点名称3	动作表编号4	绑定点名称4	动作表编号5	绑定点名称5	动作表编号6	绑定点名称6	动作表编号7	绑定点名称7
0	单程车	-1	0	3000	1018	3	1	6	6	attach1	-1		-1		-1		-1		-1		-1		-1	

按第 1 列定位 0 号交通工具(单程车)。第 5 列是停站时间,单位是毫秒,样本值 0,这里改成 3000,其余 24 列与另 5 行全部保留。

第 2 列名称「单程车」服务端不读,改它不影响任何逻辑;准乘人数在第 8 列、行驶速度在第 9 列,改之前先数清列号。

示例块含类型行、列名行与该行原文,不能覆盖整张表。改完需要重启 Server。

验证与排查

Server 启动日志出现 “Load BusInfoTbl.txt ... OK!”(日志里的名字多了 Tbl 三个字母)。改完重启后乘坐对应交通工具,确认停站时长、准乘人数与行驶速度符合新值。若日志出现 invalid or duplicate ID,说明编号越界或重复,整表此时已被清空。失败时恢复备份并重启。

编号直接当数组下标

第 1 列必须落在 0 到 2045 之间且不能重复,否则整表清零。样本只有 6 行,编号 0 到 5。

服务端不读名称与座位

第 2 列与第 10 到 25 列只有客户端用。给服务端改这些列不会有任何效果。

列数只要求不少于 9

断言是 iColumnCount >= 9,加列不会报错;但删到 9 列以下会直接 return,整表不加载。

两端的名字不一样

成功日志写的是 “BusInfoTbl.txt”,比文件名多三个字母,排查时别当成文件名拼错。

关联与依据

Public/CharMount.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:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Common/TDDBC_Struct.h:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Game/DBC/GMDataBase.cpp:实际加载、解析、字段使用或示例关联依据
  • resources/Public/Config/BusInfo.txt:实际加载、解析、字段使用或示例关联依据

本页核对 InitBusInfoTable 的编号下标写入、越界与重复检查、MAX_BUS_INFO_COUNT=2046、列数不少于 9 的断言、第 7/9 列的 FLOAT 读取,以及客户端 _DBC_BUS_INFO 的 8 个座位与第 10 到 25 列的对应;样本 6 行的列宽与编号唯一性经脚本核算。未启动服务端与客户端,乘坐表现需要实测。