工程参考/武器坐骑外观配置

来自天龙知识库
Waylee​(留言 | 贡献)2026年10月26日 (一) 21:39的版本 (新增武器坐骑外观配置(幻饰武器 6 表、坐骑 2 表、染色、飞行坐骑))
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航跳到搜索
武器坐骑外观配置
服务端 9 表 · 幻饰武器、武器升级、装备动作、聊天表情、坐骑、染色、飞行坐骑

这一组是装备与坐骑的外观体系:幻饰武器换皮肤、坐骑换模型与速度、染色抽款式、飞行坐骑登记。服务端三个加载器分别位于 Common/ExteriorWeaponTables.h、Common/ExteriorRideTables.h、Common/DressColor.h 与 Common/MountFlightMounts.h,全部在 GameServer 启动时加载校验。

幻饰武器:Exterior_Weapon.txt(13 列,70 行)=

列 内容 说明
1 武器外观 ID 主键,正数不重复。
2 名称 字符串。
3 图标 字符串。
4 描述 字符串。
5 排序权重 越大越前。
6 品质
7 阶段数 1..4,超出直接加载失败。
8 类型 0..7。
9 关联装备 正数;指向使用此外观的装备。
10–13 四阶视觉 阶段数内的每一阶都必须是正数;阶段数之外的列仍要有值但按阶段取。

激活与升级

Exterior_WeaponItem.txt(5 列,87 行)

物品→外观的激活映射。列为 物品编号、外观 ID、小时数、剩余标记。约束:物品与外观都必须为正;小时数要么 -1(永久)要么 >0;剩余标记只能 0 或 1。

ExteriorWeaponLevelUp.txt(10 列,67 行)

三组升级费用,列为 外观 ID,随后每组三列(金钱、物品、数量)共 9 列。主键只查重,不校验数值范围——填错不会在启动时报,只会在升级时扣不到或扣错。

EquipMoodAction.txt(10 列,409 行)

装备动作表只消费被武器外观实际引用的行:加载器逐行检查该行是否为某个 equipment 匹配、且 visual[level] 命中当前外观的阶段视觉,未引用的行直接跳过。第 4 列必须为 0;第 5–10 列是六个动作 ID。不要按动作列判断归属,否则编号时装会被误判成幻饰武器动作。

ChatMood.txt(14 列,59 行)

聊天表情。14 列有三种历史布局,加载器按类型行判别(实现位于 Common/ChatMoodRecord.h 的 GetLayout):官服旧版 11 列、项目扩展 14 列、经典 14 列——两种 14 列的差别在第 7 列是整数还是字符串,看错布局会把整数当指针。列为 编号、指令、三条消息文本、状态标记,随后是 开始/循环/结束/图标/提示 与排序。

WeaponVisualLocator.txt(5 列,6 行)

背部视觉定位表,样本仅 6 行。

坐骑:Exterior_Ride.txt(26 列,113 行)=

列 内容 说明
1 坐骑外观 ID 主键。
2 类型
3 等级 ≥0。
4 品质
5 是否上架 1 才允许选用。
6 排序权重
7 门派限制 负数为全门派。
8 名称 字符串。
9 图标 字符串。
10 描述 字符串。
11 坐骑编号 ≥0,对应坐骑数据。
12 速度 必须 >0。
13 豪华标记
14 反向兑换物品
15 坐骑卡专属 注意:这一列是坐骑卡专属标记,不是 10% 加成。
16–25 十档速度加成 按速度档位取,见下。

速度档位写死在 ExteriorRideTables.h:{10, 20, 40, 60, 70, 75, 80, 85, 90, 95}。当前速度命中某一档才取该档的加成列,命中不到返回 -1。改速度档位要改代码。

Exterior_ExchangeItem.txt(4 列,1085 行)

兑换物品→坐骑外观映射。只收第 3 列等于 3 的行,其余整行跳过;有效行按 物品编号(第 2 列)→ 外观 ID(第 4 列)建索引,物品必须为正、外观必须已存在、不允许重复物品。

染色:DressColorRate.txt(33 列,31 行)=

武道二配表的十组款式,加载器 TableInit::InitDressColorRate(实现位于 Server/GameServer/Server/Main/GameTable.cpp),必须正好 33 列。列为 材料物品编号,随后十组(视觉、权重):

  • 第 1 组(默认款式):视觉必须 0..65535,权重必须为 -1;默认款不参与累计权重抽取。
  • 第 2–10 组:视觉 -1..65535、权重 0..100000;视觉填 -1 时权重必须为 0;十组内视觉不能重复;累计权重不得超过 100000,且总权重必须 >0。
  • 抽取:输入 roll ∈ [1, 总权重],按权重逐项扣减,包含最后一种颜色。

相关常量写死在 Common/DressColor.h:款式数 10、金钱 50000、材料 30503140、NPC 脚本 157。

飞行坐骑:MountFlightMounts.txt(5 列,49 行)=

全 INT 五列,最多 512 行。列为 坐骑编号(0..511)、采集点(>0)、借用坐骑、借用加成(>0)、来源(≥0)。坐骑编号重复即失败;CanFly(坐骑号) 为真才允许飞行(实现位于 Common/MountFlightMounts.h)。

饰品与背景装饰:Exterior_BG / Exterior_TS / Exterior_BGTSitem / ItemOrnamentsVisual

背景装饰与头饰共用加载器 TLBBOrnaments(实现位于 Common/OrnamentsTables.h)。列数只要求不低于下限,样本背景 26 列、头饰 28 列都通过。

表 最少列数 样本规模 内容
Exterior_BG.txt 26 32 行 背景装饰定义:名称、图标、描述、视觉号、动作号、三轴位置范围(最小值≥0、最大值≤255、最小≤最大)、男女各一组位置与缩放、可调标记。
Exterior_TS.txt 27 74 行 头饰定义,比背景多两列:大头标记与关联物品(均限 0/1 或正数)。
Exterior_BGTSitem.txt 4 151 行 物品→装饰激活:第 2 列装饰类型必须有效、第 3 列装饰 ID 必须已存在、小时数 >0 或 -1。
ItemOrnamentsVisual.txt 9 — 装饰模型:男女各一组 模型/材质(第 1–4 列),第 5–8 列四个文本值。

装饰定义表的主键 ID 上限 65535;每行的默认位置必须落在自身 min/max 范围内,否则启动失败;缩放值必须是有限数(拒绝 NaN/Inf)。客户端另有一份校验路径(Valid(client=true) 会检查每条定义的视觉号都有对应模型)。

飞行地图:MountFlightMaps.txt(纯文本,54 行)

这不是 DBC 表,是带首行标头的纯文本,由 Map.cpp 的 ReadMountFlightFile 与 Common/MountFlight.h 的 MapList::Load 解析:

  • 首行必须恰好是 MountFlightMaps 1(制表符分隔)。
  • 之后每行五列,用空格分隔:运行时地图号、资源号、地图名(stem)、宽、高。
  • 地图名只允许小写字母、数字与下划线,1–63 字符——不能带路径(../ 会被拒)。
  • 宽高 1..MAX_GRID;运行时地图号不允许重复;同资源号+地图名的条目宽高必须一致。
  • 文件不超过 64KB、不能含 NUL,条目不超过 1024 条且不能为空。

修改清单

  • 加幻饰武器:Exterior_Weapon 加行(阶段数 1..4、类型 0..7、每阶视觉为正),再用 Exterior_WeaponItem 登记激活物品,需要升级就在 ExteriorWeaponLevelUp 加费用行。
  • 加坐骑:Exterior_Ride 加行(速度必须 >0),兑换入口在 Exterior_ExchangeItem 加行且第 3 列必须是 3。
  • 加染色款式:DressColorRate 对应行补一组(视觉,权重),保持视觉不重复、总权重 ≤100000。
  • 加背景装饰或头饰:Exterior_BG / Exterior_TS 加行,激活物品登记在 Exterior_BGTSitem,模型资源写进 ItemOrnamentsVisual。
  • 这三组表的行数列数都是启动硬校验,动结构前先备份。