[Parity][inv-skills][S1][F/H] 联机技能栏只收录职业技能:Attack、Throw、Unsummon、Left Hand Throw 和卷轴/书技能(217–220)永远进不了 speedbar,左键选过职业技能后无法切回 Attack #679

Closed
opened 2026-10-02 11:42:54 +00:00 by troytt · 1 comment
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 公认行为。

来源审计项:inv-skills#1 — [S1][F/H] 联机技能栏只收录职业技能:Attack、Throw、Unsummon、Left Hand Throw 和卷轴/书技能(217–220)永远进不了 speedbar,左键选过职业技能后无法切回 Attack

  • 位置:
    • src/client/ui-model/hud-model.ts:612-631(sync 第 4 步)。
    • src/client/ui/hotkeys.ts:143-168(getSkillListRow):149 行把 217–220 写死为第 4 行,153 行把 0–5 和 350 写死为第 0 行。
    • src/client/ui/hotkeys.ts:52-130(resolveSkillIcon):为 0/2/3/4/217–220 写死名字和 IconCel。
    • 同类:src/client/ui/hud-manager.ts:2082-2083(离线加点路径)。
  • 代码:
    const catalogEntry = SKILLS_BY_ID[skillId]
    if (!catalogEntry) continue                                   // hud-model.ts:619-620
    if (id === 0 || id === 1 || id === 2 || id === 3 || id === 4 || id === 5 || id === 350 || ...) return 0   // hotkeys.ts:153
    
  • 原版:
    • skilldesc.txt 的 ListRow:attack #0=0、throw #2=0、unsummon #3=0、left hand throw #4=0。
    • scroll of identify #156=4(ListPool 1)、book of identify #157=4、scroll of townportal #158=4(ListPool 2)、book of townportal #159=4。
    • kick #1 和 left hand swing #5 的 ListRow 为 −1,即不在技能栏显示(V-data)。
    • skills.txt:Throw 的 itypea1=thro;Left Hand Throw 的 itypea1=thro 且 weapsel=1(V-data)。
    • SKILLS_BY_ID 只有 210 个职业技能(id 6–280),0–5 和 217–220 都不在里面(本地 tsx 遍历核对)。
    • SkillHotkeysHud.getAvailableSkillsForSide(hotkeys.ts:181-195)也不会补入 Attack。
  • 影响:
    • 联机时左键初始是 Attack,按钮能正常画出(leftSkill 由服务器下发)。但只要在左键弹出栏里选过一次职业技能(Jab、Fire Bolt 等),弹出栏里就再也没有 Attack,玩家无法切回普攻。
    • 右键选不了 Tome of Town Portal / Identify,也没法给它们绑 F 键。
    • Throw 和 Left Hand Throw 从不出现。
    • hotkeys.ts 里为这些 id 写的分支,在联机下全部是死代码。
    • getSkillListRow 还把 Kick(1) 和 Left Hand Swing(5) 排进第 0 行,与 ListRow=−1 不符。目前上游已把它们过滤掉,所以没有暴露。
  • 建议:
    • speedbar 条目直接取服务器下发的技能列表,包括通用技能和物品技能。
    • 行、池、图标分别读 skilldesc 的 ListRow、ListPool、IconCel;ListRow<0 的不显示。
    • Throw/LHT 是否可用,按 skills.txt 的 itypea*/etypea*/weapsel 和当前武器判断。
    • 查不到 skilldesc 时应报错,不要 continue。
  • 已有 issue:—(#525「五套技能管线」只讨论架构)
> **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 公认行为。 ### 来源审计项:`inv-skills#1` — [S1][F/H] 联机技能栏只收录职业技能:Attack、Throw、Unsummon、Left Hand Throw 和卷轴/书技能(217–220)永远进不了 speedbar,左键选过职业技能后无法切回 Attack - 位置: - `src/client/ui-model/hud-model.ts:612-631`(`sync` 第 4 步)。 - `src/client/ui/hotkeys.ts:143-168`(`getSkillListRow`):149 行把 217–220 写死为第 4 行,153 行把 0–5 和 350 写死为第 0 行。 - `src/client/ui/hotkeys.ts:52-130`(`resolveSkillIcon`):为 0/2/3/4/217–220 写死名字和 IconCel。 - 同类:`src/client/ui/hud-manager.ts:2082-2083`(离线加点路径)。 - 代码: ```ts const catalogEntry = SKILLS_BY_ID[skillId] if (!catalogEntry) continue // hud-model.ts:619-620 if (id === 0 || id === 1 || id === 2 || id === 3 || id === 4 || id === 5 || id === 350 || ...) return 0 // hotkeys.ts:153 ``` - 原版: - skilldesc.txt 的 `ListRow`:attack #0=0、throw #2=0、unsummon #3=0、left hand throw #4=0。 - scroll of identify #156=4(ListPool 1)、book of identify #157=4、scroll of townportal #158=4(ListPool 2)、book of townportal #159=4。 - kick #1 和 left hand swing #5 的 `ListRow` 为 −1,即不在技能栏显示(V-data)。 - skills.txt:Throw 的 `itypea1`=thro;Left Hand Throw 的 `itypea1`=thro 且 `weapsel`=1(V-data)。 - `SKILLS_BY_ID` 只有 210 个职业技能(id 6–280),0–5 和 217–220 都不在里面(本地 tsx 遍历核对)。 - `SkillHotkeysHud.getAvailableSkillsForSide`(hotkeys.ts:181-195)也不会补入 Attack。 - 影响: - 联机时左键初始是 Attack,按钮能正常画出(leftSkill 由服务器下发)。但只要在左键弹出栏里选过一次职业技能(Jab、Fire Bolt 等),弹出栏里就再也没有 Attack,玩家无法切回普攻。 - 右键选不了 Tome of Town Portal / Identify,也没法给它们绑 F 键。 - Throw 和 Left Hand Throw 从不出现。 - hotkeys.ts 里为这些 id 写的分支,在联机下全部是死代码。 - `getSkillListRow` 还把 Kick(1) 和 Left Hand Swing(5) 排进第 0 行,与 ListRow=−1 不符。目前上游已把它们过滤掉,所以没有暴露。 - 建议: - speedbar 条目直接取服务器下发的技能列表,包括通用技能和物品技能。 - 行、池、图标分别读 skilldesc 的 `ListRow`、`ListPool`、`IconCel`;`ListRow`<0 的不显示。 - Throw/LHT 是否可用,按 skills.txt 的 `itypea*`/`etypea*`/`weapsel` 和当前武器判断。 - 查不到 skilldesc 时应报错,不要 `continue`。 - 已有 issue:—(#525「五套技能管线」只讨论架构)
Author
Owner

Resolved and verified in commit 2733a72 (Batch 6 Phase 3: canonical 1.13c skills.txt/skilldesc.txt/.tbl metadata, speedbar generic/item skills & weapon gating, tooltips, character sheet dual AR/damage & stat coloring, and Attack IconCel=2).

Resolved and verified in commit `2733a72` (Batch 6 Phase 3: canonical 1.13c skills.txt/skilldesc.txt/.tbl metadata, speedbar generic/item skills & weapon gating, tooltips, character sheet dual AR/damage & stat coloring, and Attack IconCel=2).
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#679
No description provided.