[Parity][panels][S1][H] npc-table 的 hcIdx 和别名写错,Act3 Meshif、Hadriel、Kaelan 等 NPC 没有菜单或弹错菜单 #658

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#4 — [S1][H] npc-table 的 hcIdx 和别名写错,Act3 Meshif、Hadriel、Kaelan 等 NPC 没有菜单或弹错菜单

  • 位置:src/common/units/npc-table.ts。不在本区目录,但直接决定本文件的 NPC 菜单,所以列出。

    • :1015 kaelan hcIdx: 203
    • :1058 meshif2 hcIdx: 258
    • :1101 natalya hcIdx: 256
    • :1143 hadriel hcIdx: 259
    • :1228-1232 HCIDX_ALIASES = { 297: 'natalya', 521: 'tyrael1', 534: 'cain1' }
  • 原版(V-data monstats.txt)

    代码 monstats 里这个 hcIdx 实际是 正确的 hcIdx
    meshif2 = 258 tentacle1 WaterWatcherLimb 264(#264)
    hadriel = 259 tentacle2 navi = 266
    kaelan = 203 act2guard1,NameStr "Dummy" act2guard2 = 331
    natalya = 256 izual 297(靠别名补救)
    别名 534 → cain1 act5pow,NameStr "POW" —
    别名 521 → 代码里的 'tyrael1' tyrael3(#522,Act5 Tyrael) —
    • 代码里的 'tyrael1' 实际挂在 hcIdx 367 上,带"Travel to Harrogath"和复活。原版 tyrael3(#37 @0x6fba4143)只有 talk。
    • 146(cain1,Tristram 笼中的 Cain)在原版只有 talk(#2 @0x6fba3bee);代码当成城镇 Cain 显示鉴定。
    • 缺少这些 NPC 的 descriptor(原版静态表都有 talk):406 izualghost、408 malachai、377/378 act2guard4/5、527 drehyaiced(#44 @0x6fba4254)、537-539 ancientstatue1-3。
    • 我用 npx tsx 实测 getTownNpcDescriptorByHcIdx(264) 返回 undefined。
  • 影响:Act3 码头的 Meshif(264)点了没有菜单,不能"sail west"(tbl #3385,原版 #30 @0x6fba4032:talk + sail west);Hadriel、Kaelan、Izual 的灵魂、冰冻的 Anya、远古雕像等都没有菜单;被救出的野蛮人俘虏、Act5 的 Tyrael 会弹出错误的菜单。

  • 建议:hcIdx 全部按 monstats hcIdx 列生成,不要手写;删除错误的别名;补上缺失的 NPC。

  • 已有 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#4` — [S1][H] npc-table 的 hcIdx 和别名写错,Act3 Meshif、Hadriel、Kaelan 等 NPC 没有菜单或弹错菜单 - **位置**:`src/common/units/npc-table.ts`。不在本区目录,但直接决定本文件的 NPC 菜单,所以列出。 - `:1015` kaelan `hcIdx: 203` - `:1058` meshif2 `hcIdx: 258` - `:1101` natalya `hcIdx: 256` - `:1143` hadriel `hcIdx: 259` - `:1228-1232` `HCIDX_ALIASES = { 297: 'natalya', 521: 'tyrael1', 534: 'cain1' }` - **原版**(V-data `monstats.txt`) | 代码 | monstats 里这个 hcIdx 实际是 | 正确的 hcIdx | |---|---|---| | meshif2 = 258 | tentacle1 WaterWatcherLimb | 264(#264) | | hadriel = 259 | tentacle2 | navi = 266 | | kaelan = 203 | act2guard1,NameStr "Dummy" | act2guard2 = 331 | | natalya = 256 | izual | 297(靠别名补救) | | 别名 534 → cain1 | act5pow,NameStr "POW" | — | | 别名 521 → 代码里的 'tyrael1' | tyrael3(#522,Act5 Tyrael) | — | - 代码里的 'tyrael1' 实际挂在 hcIdx 367 上,带"Travel to Harrogath"和复活。原版 tyrael3(#37 @0x6fba4143)只有 talk。 - 146(cain1,Tristram 笼中的 Cain)在原版只有 talk(#2 @0x6fba3bee);代码当成城镇 Cain 显示鉴定。 - 缺少这些 NPC 的 descriptor(原版静态表都有 talk):406 izualghost、408 malachai、377/378 act2guard4/5、527 drehyaiced(#44 @0x6fba4254)、537-539 ancientstatue1-3。 - 我用 `npx tsx` 实测 `getTownNpcDescriptorByHcIdx(264)` 返回 `undefined`。 - **影响**:Act3 码头的 Meshif(264)点了没有菜单,不能"sail west"(tbl #3385,原版 #30 @0x6fba4032:talk + sail west);Hadriel、Kaelan、Izual 的灵魂、冰冻的 Anya、远古雕像等都没有菜单;被救出的野蛮人俘虏、Act5 的 Tyrael 会弹出错误的菜单。 - **建议**:hcIdx 全部按 monstats `hcIdx` 列生成,不要手写;删除错误的别名;补上缺失的 NPC。 - **已有 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#658
No description provided.