[Parity][motion-input][S1][R] 点击传送口发的是 C2S 0x09,而 1.13c 的 0x09 是 LeftSkillOnUnitHold,不是"进入传送口" #590

Closed
opened 2026-10-02 11:42:43 +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 公认行为。

来源审计项:motion-input#10 — [S1][R] 10. 点击传送口发的是 C2S 0x09,而 1.13c 的 0x09 是 LeftSkillOnUnitHold,不是"进入传送口"

  • 位置:command-mapper.ts:454-472(MoveToUnit + TakeWarp)。范围外:netproto/d2gs/registry.ts:460-461(TakeWarp → encodeC2sWarpTo)、netproto/d2gs/c2s/movement.ts:27-34(w.u8(0x09))
  • 代码:this.sendCommand({ type: 'TakeWarp', warpId: hoveredUnit.id })
  • 原版:
    • C2S 包表里 0x09 是 Rcv0x09_LeftSkillOnUnitHold,0x13 才是 Rcv0x13_InteractWithEntity(V-src PlrMsg.cpp:4201-4225)。
    • 0x09 的处理只做左手技能;对 unitType 5,sub_6FC836D0 在 :991-994 返回 2,不会施放,整条路径里没有任何传送逻辑(PlrMsg.cpp:1110-1156、950-994)。
    • 进入传送口应该发 0x13(unitType 5):距离 >4 时服务器代为走近并设置 InteractData,≤4 时调用 SUNIT_WarpPlayer(PlrMsg.cpp:605-630)。
    • 看起来是把 S2C 0x09 AssignWarp(registry.ts:233)和 C2S 混在一起了。
  • 影响:连原版 1.13c D2GS 时,点击传送口(关卡入口、洞口、楼梯)只会跑过去,永远不会切换区域;同时还多发了一个"左键技能按住"包。
  • 建议:传送口改发 Interact(0x13,unitType 5),删除 TakeWarp/WarpTo 到 0x09 的编码。
  • 已有 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 公认行为。 ### 来源审计项:`motion-input#10` — [S1][R] 10. 点击传送口发的是 C2S 0x09,而 1.13c 的 0x09 是 LeftSkillOnUnitHold,不是"进入传送口" - 位置:`command-mapper.ts:454-472`(MoveToUnit + `TakeWarp`)。范围外:`netproto/d2gs/registry.ts:460-461`(TakeWarp → `encodeC2sWarpTo`)、`netproto/d2gs/c2s/movement.ts:27-34`(`w.u8(0x09)`) - 代码:`this.sendCommand({ type: 'TakeWarp', warpId: hoveredUnit.id })` - 原版: - C2S 包表里 0x09 是 `Rcv0x09_LeftSkillOnUnitHold`,0x13 才是 `Rcv0x13_InteractWithEntity`(V-src `PlrMsg.cpp:4201-4225`)。 - 0x09 的处理只做左手技能;对 unitType 5,`sub_6FC836D0` 在 `:991-994` 返回 2,不会施放,整条路径里没有任何传送逻辑(`PlrMsg.cpp:1110-1156`、`950-994`)。 - 进入传送口应该发 0x13(unitType 5):距离 >4 时服务器代为走近并设置 InteractData,≤4 时调用 `SUNIT_WarpPlayer`(`PlrMsg.cpp:605-630`)。 - 看起来是把 S2C 0x09 AssignWarp(`registry.ts:233`)和 C2S 混在一起了。 - 影响:连原版 1.13c D2GS 时,点击传送口(关卡入口、洞口、楼梯)只会跑过去,永远不会切换区域;同时还多发了一个"左键技能按住"包。 - 建议:传送口改发 Interact(0x13,unitType 5),删除 TakeWarp/WarpTo 到 0x09 的编码。 - 已有 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#590
No description provided.