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

来自天龙知识库
雪舞留言 | 贡献2026年9月11日 (五) 19:42的版本 (维护配置文件知识库:完整字段、读取范围、手工修改实例与核对状态)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航跳到搜索


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

Mission_Husong.txt 是护送类任务表:前 6 列是脚本号、任务 ID 与四个客户端展示开关(本表没有「是否循环任务」列),第 7、8 列是交任务 NPC 坐标,第 9 到 13 列是五段描述,第 14 到 17 列是交接场景与 NPC 名,第 18 到 20 列是护送目标的场景、名字与路线,第 21 列是等级限制,第 22 到 24 列是前置任务,第 25 列是 AI 类型,第 26、27 列起是奖励,第 54 列是后续任务。样本 6 条数据记录、54 列。

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

文件位置与生效

项目 说明
运行文件 ../Public/Config/Mission_Husong.txt,相对于服务端工作目录;客户端从资源目录读取同名文件。
读取程序 Server 游戏进程:TableInit::InitMissionHusongTable 用 MissionOpen(file, "../Public/Config/Mission_Husong.txt", 54) 加载;客户端 GMDataBase.cpp 把 DBC_MISSION_HUSONG(id 174)注册到同名文件
生效方法 正常保存并停服后,重启读取此文件的 Server;客户端需要随资源更新并重启客户端。当前检索未发现单独重载本文件的可用入口。
样本格式 GB18030-compatibleCRLF。保留原编码;源码读取器不会自动把中文转为 UTF-8。

服务端 InitMissionHusongTable 先用 MissionOpen 断言列数等于 54,再用 MissionColumns(8, 13, 14, -1, 15, 16, -1, 20, 21, 25, 27, 37, 47, 53) 描述公共列,随后把 columns.m_RelationshipLoc 置为 -1(本表没有关系值与限时列)。

本表没有交接 NPC 的 Guid 列,对应参数传 -1,服务端写入 INVALID_ID。

护送目标部分单独读取:第 18 列目标场景、第 19 列目标名字、第 20 列护送路线 ID。源码注释明确说明「目标是否动态」这一项保持默认值 0,第 19 列(0 基)才是护送路线 ID、第 20 列(0 基)是等级限制,不要把列号错位。第 25 列是 AI 类型。

客户端对本表的需求类型是 MTD_NONE,即不会从表里解析击杀 / 递送 / 拾取类的需求条目。客户端 GetMissionTableLayout 的脚本号区间为:1000000-1009999 杀怪、1010000-1019999 送信、1020000-1029999 进入区域、1030000-1039999 拾取、1050000-1059999 护送;1040000-1049999 这一段没有任何表映射(返回 FALSE)。

文件格式

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

字段详解

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

字段与类型 含义与修改要点 缺项或特殊值
第 1 列
INT:MissionIndex
任务脚本编号(主键)。服务端读第 1 列存为 m_nMissionIndex;客户端 GetMissionTableLayout 先按脚本号所在区间决定查哪一张任务表,再用它 Search_Index_EQU 定位记录。 空为 0;必须落在对应区间,否则客户端查不到记录。
第 2 列
INT:MissionId
任务 ID。服务端读第 2 列存为 m_MissionId。 空为 0。
第 3 列
INT:任务类型(客户端)
任务类型,只被客户端读取(BuildMissionInfoFromTable 存为 m_nKind)。 空为 0。
第 4 列
INT:是否精英(客户端)
是否精英任务,只被客户端读取(存为 m_nElite)。 空为 0。
第 5 列
INT:是否显示完成(客户端)
是否显示完成,只被客户端读取(存为 m_nOKFail)。 空为 0。
第 6 列
INT:环数(客户端)
环数,只被客户端读取(存为 m_nLimitTime)。 空为 0。
第 7 列
INT:完成任务的Npc的坐标(X)
交任务 NPC 的坐标 X。服务端不读取这一列;客户端按 nAcceptX 存为 m_nPositionX,作为任务指引坐标。 空为 0。
第 8 列
INT:完成任务的Npc的坐标(Y)
交任务 NPC 的坐标 Z。服务端不读取这一列;客户端按 nAcceptX+1 存为 m_nPositionZ。没有 Y 坐标列。 空为 0。
第 9 列
STRING:任务名称$1$
描述段 1。服务端 MissionLoadBase 把它拷进 m_szMisDesc1;客户端只取前 3 段,分别作为任务名(m_misName)、任务目标(m_misDesc)与任务状态(m_misState)。 空字符串。
第 10 列
STRING:任务目标$1$
描述段 2。服务端 MissionLoadBase 把它拷进 m_szMisDesc2;客户端只取前 3 段,分别作为任务名(m_misName)、任务目标(m_misDesc)与任务状态(m_misState)。 空字符串。
第 11 列
STRING:任务描述3$1$
描述段 3。服务端 MissionLoadBase 把它拷进 m_szMisDesc3;客户端只取前 3 段,分别作为任务名(m_misName)、任务目标(m_misDesc)与任务状态(m_misState)。 空字符串。
第 12 列
STRING:任务描述4$1$
描述段 4。服务端 MissionLoadBase 把它拷进 m_szMisDesc4;客户端不读取第 4、5 段。 空字符串。
第 13 列
STRING:任务描述5$1$
描述段 5。服务端 MissionLoadBase 把它拷进 m_szMisDesc5;客户端不读取第 4、5 段。 空字符串。
第 14 列
INT:接受任务场景ID
接受任务的场景 ID。服务端存为 m_nAcceptScene(未配置时为 INVALID_ID)。 空为 0。
第 15 列
STRING:接受任务NpcName$1$
接受任务的 NPC 名称。服务端拷进 m_szAcceptName。 空字符串。
第 16 列
INT:完成任务场景ID
完成任务(交任务)的场景 ID。服务端存为 m_nCompleteScene;客户端存为 m_nSceneID。 空为 0。
第 17 列
STRING:完成任务NpcName$1$
交任务的 NPC 名称。服务端拷进 m_szCompleteName;客户端存为 m_strActivePosName。 空字符串。
第 18 列
INT:护送目标的场景号
护送目标所在的场景号。服务端读第 18 列存为 m_nTargetScene。 空为 0。
第 19 列
STRING:护送目标的名字$1$
护送目标的名字。服务端读第 19 列拷进 m_szTargetName。 空字符串。
第 20 列
INT:护送路线ID
护送路线 ID。服务端读第 20 列存为 m_nPatrolPathIndex。注意服务端对「目标是否动态」这一项保持默认值 0,第 19 列是护送路线 ID,不要把这一列当成动态标记。 空为 0。
第 21 列
INT:等级限制
接任务所需的等级。服务端存为 m_nLevelLimit(未配置时为 INVALID_ID);客户端存为 m_nLevel。 空为 0。
第 22 列
INT:前续任务Id1
前续任务 ID 1。服务端存为 m_nPreMission[0](未配置时为 INVALID_ID)。 空为 0;三个槽位都要保留,不需要依赖时填 0。
第 23 列
INT:前续任务Id2
前续任务 ID 2。服务端存为 m_nPreMission[1](未配置时为 INVALID_ID)。 空为 0;三个槽位都要保留,不需要依赖时填 0。
第 24 列
INT:前续任务Id3
前续任务 ID 3。服务端存为 m_nPreMission[2](未配置时为 INVALID_ID)。 空为 0;三个槽位都要保留,不需要依赖时填 0。
第 25 列
INT:AI类型
护送目标的 AI 类型。服务端读第 25 列存为 m_nNpcAiType。 空为 0。
第 26 列
INT:金钱奖励
金钱奖励。服务端存为 m_nGainMoney;客户端 AddMissionReward 以 MONEY 类型加入奖励列表。 空或 0 不发钱。
第 27 列
INT:经验奖励
经验奖励。服务端存为 m_nGainExp,列号固定是金钱列 +1(MissionColumns 里 m_GainExp = gainMoney + 1);客户端以 EXP 类型加入奖励列表。 空为 0。
第 28 列
INT:固定物品奖励1
固定物品 1 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 29 列
INT:固定物品1奖励数量
固定物品 1 的数量。 空为 0。
第 30 列
INT:固定物品奖励2
固定物品 2 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 31 列
INT:固定物品2奖励数量
固定物品 2 的数量。 空为 0。
第 32 列
INT:固定物品奖励3
固定物品 3 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 33 列
INT:固定物品3奖励数量
固定物品 3 的数量。 空为 0。
第 34 列
INT:固定物品奖励4
固定物品 4 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 35 列
INT:固定物品4奖励数量
固定物品 4 的数量。 空为 0。
第 36 列
INT:固定物品奖励5
固定物品 5 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 37 列
INT:固定物品5奖励数量
固定物品 5 的数量。 空为 0。
第 38 列
INT:可选物品奖励1
可选物品 1 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 39 列
INT:可选物品1奖励数量
可选物品 1 的数量。 空为 0。
第 40 列
INT:可选物品奖励2
可选物品 2 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 41 列
INT:可选物品2奖励数量
可选物品 2 的数量。 空为 0。
第 42 列
INT:可选物品奖励3
可选物品 3 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 43 列
INT:可选物品3奖励数量
可选物品 3 的数量。 空为 0。
第 44 列
INT:可选物品奖励4
可选物品 4 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 45 列
INT:可选物品4奖励数量
可选物品 4 的数量。 空为 0。
第 46 列
INT:可选物品奖励5
可选物品 5 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 47 列
INT:可选物品5奖励数量
可选物品 5 的数量。 空为 0。
第 48 列
INT:隐藏奖励物品1
隐藏物品 1 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 49 列
INT:隐藏物品1奖励数量
隐藏物品 1 的数量。 空为 0。
第 50 列
INT:隐藏奖励物品2
隐藏物品 2 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 51 列
INT:隐藏物品2奖励数量
隐藏物品 2 的数量。 空为 0。
第 52 列
INT:隐藏奖励物品3
隐藏物品 3 的物品 ID。服务端 MissionReadItems 从该列起成对读(物品 ID, 数量),物品 ID 小于等于 0 时立即停止,后面的条目不再读取;客户端同样按 5 组 / 3 组成对读取。 填 0 或留空会中断该组后面的条目。
第 53 列
INT:隐藏物品3奖励数量
隐藏物品 3 的数量。 空为 0。
第 54 列
INT:后续任务INDEX
后续任务的 INDEX。服务端存为 m_nNextMission(未配置时为 INVALID_ID)。 空为 0。

常用修改实例

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

把 1050000 号护送任务的经验奖励从 25000 改成 30000

修改前:

INT	INT	INT	INT	INT	INT	INT	INT	STRING	STRING	STRING	STRING	STRING	INT	STRING	INT	STRING	INT	STRING	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT
MissionIndex	MissionId	任务类型(客户端)	是否精英(客户端)	是否显示完成(客户端)	环数(客户端)	完成任务的Npc的坐标(X)	完成任务的Npc的坐标(Y)	任务名称$1$	任务目标$1$	任务描述3$1$	任务描述4$1$	任务描述5$1$	接受任务场景ID	接受任务NpcName$1$	完成任务场景ID	完成任务NpcName$1$	护送目标的场景号	护送目标的名字$1$	护送路线ID	等级限制	前续任务Id1	前续任务Id2	前续任务Id3	AI类型	金钱奖励	经验奖励	固定物品奖励1	固定物品1奖励数量	固定物品奖励2	固定物品2奖励数量	固定物品奖励3	固定物品3奖励数量	固定物品奖励4	固定物品4奖励数量	固定物品奖励5	固定物品5奖励数量	可选物品奖励1	可选物品1奖励数量	可选物品奖励2	可选物品2奖励数量	可选物品奖励3	可选物品3奖励数量	可选物品奖励4	可选物品4奖励数量	可选物品奖励5	可选物品5奖励数量	隐藏奖励物品1	隐藏物品1奖励数量	隐藏奖励物品2	隐藏物品2奖励数量	隐藏奖励物品3	隐藏物品3奖励数量	后续任务INDEX
1050000	547	31	0	1	0	137	53	灵魂的呼唤	#{MIS_TAR_ADD_239}	#{Mis_H_Caoyan_1050000}	  你找我有什么事情吗?	  唉,好傻的丫头啊。放着好好的郡主不做,偏要做个丫鬟,偏要喜欢俺这个粗人。呵呵,那俺就不能辜负她的一番情意了。	20	萧蔷	20	阮诚	20	阿菲	0	62	546	-1	-1	6	22400	25000											10411078	1	10403067	1	10412071	1											

修改后:

INT	INT	INT	INT	INT	INT	INT	INT	STRING	STRING	STRING	STRING	STRING	INT	STRING	INT	STRING	INT	STRING	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT	INT
MissionIndex	MissionId	任务类型(客户端)	是否精英(客户端)	是否显示完成(客户端)	环数(客户端)	完成任务的Npc的坐标(X)	完成任务的Npc的坐标(Y)	任务名称$1$	任务目标$1$	任务描述3$1$	任务描述4$1$	任务描述5$1$	接受任务场景ID	接受任务NpcName$1$	完成任务场景ID	完成任务NpcName$1$	护送目标的场景号	护送目标的名字$1$	护送路线ID	等级限制	前续任务Id1	前续任务Id2	前续任务Id3	AI类型	金钱奖励	经验奖励	固定物品奖励1	固定物品1奖励数量	固定物品奖励2	固定物品2奖励数量	固定物品奖励3	固定物品3奖励数量	固定物品奖励4	固定物品4奖励数量	固定物品奖励5	固定物品5奖励数量	可选物品奖励1	可选物品1奖励数量	可选物品奖励2	可选物品2奖励数量	可选物品奖励3	可选物品3奖励数量	可选物品奖励4	可选物品4奖励数量	可选物品奖励5	可选物品5奖励数量	隐藏奖励物品1	隐藏物品1奖励数量	隐藏奖励物品2	隐藏物品2奖励数量	隐藏奖励物品3	隐藏物品3奖励数量	后续任务INDEX
1050000	547	31	0	1	0	137	53	灵魂的呼唤	#{MIS_TAR_ADD_239}	#{Mis_H_Caoyan_1050000}	  你找我有什么事情吗?	  唉,好傻的丫头啊。放着好好的郡主不做,偏要做个丫鬟,偏要喜欢俺这个粗人。呵呵,那俺就不能辜负她的一番情意了。	20	萧蔷	20	阮诚	20	阿菲	0	62	546	-1	-1	6	22400	30000											10411078	1	10403067	1	10412071	1											

按第一列定位 1050000 号任务。样本第 27 列经验奖励为 25000,改为 30000。只改第 27 列,保留 54 列。本片段含类型行、列名行与该行,不能覆盖整表。

本表没有关系值与限时列,经验奖励紧接在金钱奖励之后(第 26、27 列)。改完需要重启服务端才会生效。

验证与排查

服务端启动日志里 InitMissionHusongTable 会打印 “Load InitMissionHusongTable.txt ... OK! Count=…”。改动后重启,接取该护送任务确认目标 NPC 出现、沿护送路线移动并可按 AI 类型行动,完成或失败判定符合预期。列数必须等于 54,否则整表不加载。样本只有 6 条记录,新增时脚本号要落在 1050000-1059999。失败时恢复备份并重启。

不要照搬杀怪表的列号

本表没有关系值与限时列(m_RelationshipLoc=-1),也没有「是否循环任务」列和交接 NPC Guid 列,列数比其它任务表少很多。按杀怪表的顺序数列会全部错位。

护送路线与等级限制相邻,容易错位

源码注释特别说明:动态标记保持默认值 0,第 20 列(1 基)是护送路线 ID、第 21 列是等级限制。把这两列填反会让护送目标走错路线或等级判断出错。

客户端不解析本表的需求条目

GetMissionTableLayout 对本表给出的 demand 是 MTD_NONE,客户端不会生成击杀 / 递送 / 拾取类需求显示,只展示描述与奖励。

脚本号区间 1050000-1059999

1040000-1049999 这一段在客户端没有任何表映射,写在这个区间的脚本号会导致客户端查不到任务显示信息。

关联与依据

Public/Mission_EnterArea.txt · Public/Mission_KillMonster.txt · Public/Mission_NpcDefault.txt

其他配置及整理状态 · 服务端外网设置 · Lua 接口索引

  • Server/Server/GameServer/Server/Main/GameTable.cpp:实际加载、解析、字段使用或示例关联依据
  • Server/Server/GameServer/Server/MissionExtend/GameStruct_Mission.h:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Common/TDDBC_Struct.h:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Game/DBC/GMDataBase.cpp:实际加载、解析、字段使用或示例关联依据
  • Client/Client/Game/DataPool/GMDP_Struct_Quest.cpp:实际加载、解析、字段使用或示例关联依据
  • resources/Public/Config/Mission_Husong.txt:实际加载、解析、字段使用或示例关联依据

本页核对 InitMissionHusongTable 的 MissionOpen 列数(54)、MissionColumns 的 0 基公共列索引与 -1 占位、m_RelationshipLoc=-1 的跳过分支、护送目标的单独读取与「动态标记恒为 0」的注释,以及客户端 DBC_MISSION_HUSONG 注册项与 MTD_NONE;未启动服务端与游戏,护送流程的实际表现需要实测。