[Parity][inv-skills][S3][H] 技能元数据用写死的列表和上限,不读 skills.txt 的对应列 #688

Closed
opened 2026-10-02 11:42:55 +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#11 — [S3][H] 技能元数据用写死的列表和上限,不读 skills.txt 的对应列

  • 位置:
    • src/common/skills/skills-meta.ts:PASSIVE_SKILL_IDS、LEFT_USABLE_SKILL_IDS、Paladin 光环列表,以及按 tab 推断光环。
    • src/client/ui/skill-tree-panel.ts:323-331(canAllocate):328 行 if (cur >= 20) return false。
    • src/client/ui/hotkeys.ts:143-168(getSkillListRow):用 tabIndex + 1 代替 ListRow。
  • 原版:
    • 对应 skills.txt 的 passive/leftskill/aura/maxlvl 列,以及 skilldesc 的 ListRow。
    • 本地 tsx 对比(V-data):
      • 被动技能集合一致。
      • 左键可用集合对所有主动技能一致;差异只在 leftskill=1 的被动技能(9、13、18、23、29、33、37、61、63、65、79、89、263),这些会被过滤掉。
      • 光环差异为 127/128/129(表中 aura=1 且为被动)。
      • 以上目前都没有可见影响。
    • maxlvl 在原版表中全为 20;服务器端 D2MOO D2Game/src/PLAYER/PlrMsg.cpp:2969-2973 读 wMaxLvl,≤0 时取 20(V-src)。
    • "reqlevel + 当前等级"和"前置技能 hard>0"两条规则与 D2MOO D2Common/src/D2Skills.cpp:2293 起的 SKILLS_CheckRequiredSkills 一致(V-src)。
    • 代码缺少属性需求检查(原版各 req* 列均为 0,没有可见影响)。
  • 影响:数值与表一致,只是绕开了数据表;改表或做 mod 时会出错。
  • 建议:直接读 skills.txt / skilldesc.txt 的对应列。
  • 已有 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#11` — [S3][H] 技能元数据用写死的列表和上限,不读 skills.txt 的对应列 - 位置: - `src/common/skills/skills-meta.ts`:`PASSIVE_SKILL_IDS`、`LEFT_USABLE_SKILL_IDS`、Paladin 光环列表,以及按 tab 推断光环。 - `src/client/ui/skill-tree-panel.ts:323-331`(`canAllocate`):328 行 `if (cur >= 20) return false`。 - `src/client/ui/hotkeys.ts:143-168`(`getSkillListRow`):用 `tabIndex + 1` 代替 `ListRow`。 - 原版: - 对应 skills.txt 的 `passive`/`leftskill`/`aura`/`maxlvl` 列,以及 skilldesc 的 `ListRow`。 - 本地 tsx 对比(V-data): - 被动技能集合一致。 - 左键可用集合对所有主动技能一致;差异只在 `leftskill`=1 的被动技能(9、13、18、23、29、33、37、61、63、65、79、89、263),这些会被过滤掉。 - 光环差异为 127/128/129(表中 `aura`=1 且为被动)。 - 以上目前都没有可见影响。 - `maxlvl` 在原版表中全为 20;服务器端 D2MOO `D2Game/src/PLAYER/PlrMsg.cpp:2969-2973` 读 `wMaxLvl`,≤0 时取 20(V-src)。 - "reqlevel + 当前等级"和"前置技能 hard>0"两条规则与 D2MOO `D2Common/src/D2Skills.cpp:2293` 起的 `SKILLS_CheckRequiredSkills` 一致(V-src)。 - 代码缺少属性需求检查(原版各 req* 列均为 0,没有可见影响)。 - 影响:数值与表一致,只是绕开了数据表;改表或做 mod 时会出错。 - 建议:直接读 skills.txt / skilldesc.txt 的对应列。 - 已有 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#688
No description provided.