itemdesc_translate_zh.tsv maps the English description/summary text to Chinese (1,788 entries, every itemdesc row covered). build_zh_locale.py replaces the cells and wraps Chinese into 26-byte lines joined by ' |', which 40250's Western SplitDescription turns into forced line breaks; the 50307 overlay row is wrapped the same way. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
60 lines
4.5 KiB
Markdown
60 lines
4.5 KiB
Markdown
# 40250 服务端名称快照
|
||
|
||
2026-09-28 从 `192.168.21.203` 的 `player.item_proto` 与 `player.mob_proto` 只读导出
|
||
`vnum, HEX(gb2312name)`,按 GBK 解码为本目录的 UTF-8 TSV。导出时服务端配置为
|
||
`LOCALE=newcibn`、`DB_NAME_COLUMN=gb2312name`。客户端原型只修改 `szLocaleName`,
|
||
游戏属性和 VNUM 仍取自 40250 客户端原型。
|
||
|
||
| 文件 | 条数 | SHA-256 |
|
||
| --- | ---: | --- |
|
||
| `item_names_zh.txt` | 5,743 | `5604985d7f11039f3d3e38d4e2c07995e80ca3e4f6deb01fe57cd772e9cd0f70` |
|
||
| `mob_names_zh.txt` | 1,334 | `fdbfe4b3f3367d5842c0e9bbe0b5e5ea2dbe99fb6e566ef5789f65d3794eab5c` |
|
||
|
||
线上字段里的 1,608 个物品名及 346 个怪物/NPC 名不含汉字,本快照原样保留。
|
||
它们的审核译文(2026-09-28 确认)单独放在 `item_names_zh_overlay.txt`、
|
||
`mob_names_zh_overlay.txt`,界面回退键译文在 `locale_game_zh_overlay.txt`;
|
||
`scripts/build_zh_locale.py` 构建时以 overlay 覆盖快照同 VNUM / 同键的值。
|
||
旧的龙驹中文表与线上表有 21 个相同 VNUM 不同名;不把旧表覆盖到服务端。
|
||
服务端名称若再更新,需重新只读导出并核对差异后更新本快照。
|
||
|
||
## 任务文本(translate.lua)
|
||
|
||
40250 的任务文本都通过 `gameforge.<任务>.<键>` 引用。game 启动时从 `share/locale/<locale>/translate.lua` 读取这些文本(questlua.cpp),
|
||
所以换文件后重启即可生效,不用重新编译 quest。
|
||
|
||
- 译文放在 `quest_translate_zh.tsv`,每行一条:`<任务>.<键>`、制表符、中文,UTF-8 编码。
|
||
- 译文里的 `[ENTER]` 是有意的换行;构建时每行按 50 列(汉字算 2 列)重新折行。
|
||
- 英文原文相同的其他键会共用同一条译文。
|
||
- 还没有译文的键保留英文。
|
||
- 构建:`python3 scripts/build_zh_translate_lua.py build <输出>`,输出 GBK 编码。
|
||
- 构建逐行保留英文文件的结构(包括嵌套表),只替换字符串值。
|
||
- GBK 双字节字符的第二个字节可能是 0x5C(反斜杠),构建时会把它写成两个。
|
||
- 查看待译条目:`python3 scripts/build_zh_translate_lua.py todo <目录> --quests <命名空间,...>`。
|
||
- 部署到 203:覆盖 `/usr/metin2/server/share/locale/newcibn/translate.lua`,然后重启。英文原件备份在同目录的 `translate.lua.en-20260930`。
|
||
|
||
## 技能名称与说明(skilldesc.txt)
|
||
|
||
`scripts/build_zh_locale.py` 以 40250 的 `skilldesc.txt` 为底,逐行取龙驹同 VNUM 的名称、说明和条件列(2–8)
|
||
以及效果列(17/20/23)。客户端把效果列当作 `_snprintf` 格式串传入最小值、最大值,所以效果列只有在格式参数与英文一致时才替换。
|
||
`skilldesc_zh_overlay.txt` 按 `VNUM\t列号\t译文` 覆盖龙驹缺的或者不对的格。例如 126–128 在龙驹里叫吴/蜀/魏国方言,
|
||
这里改成盛唐语、秦皇语、汉武语;骑马技能的说明补上等级要求。
|
||
|
||
## 整行覆盖(item_list.txt、itemdesc.txt)
|
||
|
||
`item_list_zh_overlay.txt`、`itemdesc_zh_overlay.txt` 每行是目标文件的一整行(UTF-8,第一列 VNUM),
|
||
`build_zh_locale.py` 用它替换同 VNUM 的行(`ROW_FILES`),其余行字节不变;VNUM 不存在就报错。
|
||
用于服务端改了用途的物品,例如 50307 小狩猎套装礼包(`tools/server/hunt-set`)换成礼盒图标和中文说明。
|
||
|
||
## 物品说明(itemdesc_translate_zh.tsv)
|
||
|
||
40250 `itemdesc.txt` 的说明列(第 3 列)和摘要列(第 4 列,“Potion production”“Research”)按英文原文整句翻译,
|
||
一共 1,788 条,放在 `itemdesc_translate_zh.tsv`(英文、制表符、中文,UTF-8)。英文原文完全相同的物品共用同一条译文。
|
||
第 2 列物品名不改:客户端显示的名称来自 `item_proto`(见上文名称快照)。
|
||
|
||
- 客户端的 tooltip 走的是 40250 的西文路径(`uitooltip.SplitDescription`):只在空格处断行,每行最多 35 字节,
|
||
遇到 `|x` 这种词会另起一行。构建时会把中文折成东方路径的宽度,也就是每行 26 字节(一个汉字算 2 字节),再用 ` |` 连接各行。
|
||
- 断行优先放在标点后面,标点不放在行首;英文单词和数字不会被拆开。
|
||
- 如果最后一行只剩一两个字,会把前面的行收窄一些重新折。
|
||
- 表里没有的格子保留英文,`zh-locale-report.json` 里的 `itemdesc.txt translation.english_rows` 会列出这些 VNUM。
|
||
- `itemdesc_zh_overlay.txt` 的整行覆盖在翻译之后执行,它的说明列也用同样的方式折行。
|