[Parity][panels][S1][R] NPC"交谈"显示项目自编的台词和简体名字,没有用 tbl 里的语音文本 #656

Closed
opened 2026-10-02 11:42:52 +00:00 by troytt · 0 comments
Owner

1.13c 客户端保真度审计立项(基准快照:7bd1090 / main @ 77a20c7)

证据标记说明:V-data = 1.13c MPQ 数据表 (.txt / animdata.d2 / .tbl / pal.pl2);V-src = D2MOO 逆向源码;V-bin = 1.13c DLL 反汇编;K = 1.13c 公认行为。

来源审计项:panels#2 — [S1][R] NPC"交谈"显示项目自编的台词和简体名字,没有用 tbl 里的语音文本

  • 位置
    • src/client/ui/world-panels.ts:1170-1194(openNpcSpeech → getLocalizedNpcGreetings)
    • :1279-1293(talk_quest 取 Object.values(desc.questLines)[0])
    • :1315-1321
    • :3011-3035(对话框 340×156,最多 6 行,超出截断)
    • src/client/ui-model/hud-model.ts:1556-1561
    • src/common/units/npc-table.ts:1393(NPC_GREETING_ZH_BY_KEY)、:1497-1542(NPC_NAME_ZH_BY_KEY)、:1544-1571
    • 各 descriptor 的 greetingLines / gossipLines / questLines(如 :1009-1012、:1053-1055、:1138-1140)
  • 代码:const lines = textOverride ? … : getLocalizedNpcGreetings(descriptor, this.lang);CHI 名字取 NPC_NAME_ZH_BY_KEY[lowerKey] ?? resolveTblKey(tblKey, 'CHI'),自定义表优先于 tbl。
  • 原版(V-data,tbl)
    • NPC 台词全部来自 tbl,例如 #0 WarrivAct1IntroGossip1、#24 KashyaIntroGossip1、#26-35 KashyaGossip1..10、expansionstring #20068-20076 QualKehkGossip1..9、A1Q1SuccessfulAkara 等。
    • 每条开头的数字是滚动时长(如 "45\n…")。播放哪一条由任务状态决定(intro / gossip / quest)。
    • 菜单子项字符串也在 tbl 里:#3386-3391 important news / tell me more、#3394 leave、#3395 gossip、#3399 introduction。代码从来不生成 talk_intro / talk_gossip / talk_quest 这些子项。
    • NPC 名字(tbl CHI):Gheed = 基得(代码"基德")、DeckardCain = 迪卡.凱恩(代码"迪卡·凯恩")、Jamella = 賈梅拉(代码"贾梅拉")。原版是繁体,代码是自译简体。
    • 原版对话框是按时长向上滚动的文本(K高);代码是固定 6 行,多余的截掉。
  • 影响(正常游玩可见):所有 NPC 对白都是项目自写的英文或简体中文,和任务进度无关;繁体客户端里 NPC 名字显示成简体或别的译名。
  • 建议:按服务器的任务状态选 tbl key(intro / gossip / quest 各自的 key 规则);名字一律走 monstats NameStr → tbl;按开头数字实现滚动;删除 NPC_GREETING_ZH_BY_KEY、NPC_NAME_ZH_BY_KEY 和 descriptor 里的自编文本。
  • 已有 issue:—
> **1.13c 客户端保真度审计立项**(基准快照:`7bd1090` / `main @ 77a20c7`) > 证据标记说明:`V-data` = 1.13c MPQ 数据表 (`.txt` / `animdata.d2` / `.tbl` / `pal.pl2`);`V-src` = D2MOO 逆向源码;`V-bin` = 1.13c DLL 反汇编;`K` = 1.13c 公认行为。 ### 来源审计项:`panels#2` — [S1][R] NPC"交谈"显示项目自编的台词和简体名字,没有用 tbl 里的语音文本 - **位置** - `src/client/ui/world-panels.ts:1170-1194`(`openNpcSpeech` → `getLocalizedNpcGreetings`) - `:1279-1293`(`talk_quest` 取 `Object.values(desc.questLines)[0]`) - `:1315-1321` - `:3011-3035`(对话框 340×156,最多 6 行,超出截断) - `src/client/ui-model/hud-model.ts:1556-1561` - `src/common/units/npc-table.ts:1393`(`NPC_GREETING_ZH_BY_KEY`)、`:1497-1542`(`NPC_NAME_ZH_BY_KEY`)、`:1544-1571` - 各 descriptor 的 `greetingLines` / `gossipLines` / `questLines`(如 `:1009-1012`、`:1053-1055`、`:1138-1140`) - **代码**:`const lines = textOverride ? … : getLocalizedNpcGreetings(descriptor, this.lang)`;CHI 名字取 `NPC_NAME_ZH_BY_KEY[lowerKey] ?? resolveTblKey(tblKey, 'CHI')`,自定义表优先于 tbl。 - **原版**(V-data,tbl) - NPC 台词全部来自 tbl,例如 #0 WarrivAct1IntroGossip1、#24 KashyaIntroGossip1、#26-35 KashyaGossip1..10、expansionstring #20068-20076 QualKehkGossip1..9、A1Q1SuccessfulAkara 等。 - 每条开头的数字是滚动时长(如 "45\n…")。播放哪一条由任务状态决定(intro / gossip / quest)。 - 菜单子项字符串也在 tbl 里:#3386-3391 important news / tell me more、#3394 leave、#3395 gossip、#3399 introduction。代码从来不生成 `talk_intro` / `talk_gossip` / `talk_quest` 这些子项。 - NPC 名字(tbl CHI):Gheed = 基得(代码"基德")、DeckardCain = 迪卡.凱恩(代码"迪卡·凯恩")、Jamella = 賈梅拉(代码"贾梅拉")。原版是繁体,代码是自译简体。 - 原版对话框是按时长向上滚动的文本(K高);代码是固定 6 行,多余的截掉。 - **影响**(正常游玩可见):所有 NPC 对白都是项目自写的英文或简体中文,和任务进度无关;繁体客户端里 NPC 名字显示成简体或别的译名。 - **建议**:按服务器的任务状态选 tbl key(intro / gossip / quest 各自的 key 规则);名字一律走 monstats `NameStr` → tbl;按开头数字实现滚动;删除 `NPC_GREETING_ZH_BY_KEY`、`NPC_NAME_ZH_BY_KEY` 和 descriptor 里的自编文本。 - **已有 issue**:—
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: troytt/diablo2-web#656
No description provided.