[M20-P1] 实装 BNCS + MCP 登录、选角与建房/进房协议链,接线 bnet.html #509

Closed
opened 2026-09-28 13:10:05 +00:00 by troytt · 0 comments
Owner

背景与目标

实现 Battle.net 经典登录协议(BNCS,TCP 6112)与 Realm 角色/房间管理协议(MCP,TCP 6113),将 bnet.html(src/frontend/flow-state.ts)的 bnet_connecting、bnet_login、char_create、char_select、bnet_lobby 五个前置阶段从本地 mock 切换到真实 PvPGN 服务端。

核心内容与 1.13c Ground Truth 对标

  1. BNCS 协议 (bnetd, TCP 6112):
    • 协议头 [0xFF, packetId, uint16LE length] 分帧与编解码。
    • SID_AUTH_INFO (0x50)、SID_PING (0x25)、SID_AUTH_CHECK (0x51)(1.13c CheckRevision 与 D2 Classic + LoD 双 CD-Key 哈希)、SID_LOGONRESPONSE2 (0x3A) / 账号注册、SID_QUERYREALMS2 (0x40)、SID_LOGONREALMEX (0x3E)(获取 MCP Cookie、IP、端口与 UniqueName)。
  2. MCP 协议 (d2cs, TCP 6113):
    • 协议头 [uint16LE length, packetId] 分帧与编解码。
    • MCP_STARTUP (0x01)、MCP_CHARLIST2 (0x19)(解析角色列表与 statstring)、MCP_CHARCREATE (0x02)、MCP_CHARLOGON (0x07)、MCP_CREATEGAME (0x03)、MCP_JOINGAME (0x04)(获取 D2GS IP、GameHash 与 GameToken)、MCP_GAMELIST (0x05)。
  3. bnet.html 前置 UI 与角色外观接线:
    • 将 flow-state.ts 各阶段状态转换绑定到真实 BNCS/MCP 请求与错误码提示。
    • 解析 MCP_CHARLIST2 返回的 1.13c 角色 statstring(职业、等级、资料片/专家级标志、16 部位装备外观字节),驱动 8 槽选角界面渲染真实角色外观。

验收标准

  • 通过 Node headless 与浏览器 bnet.html 走通:登录账号 → 创建/选择角色 → 创建游戏 → 拿到 MCP_JOINGAME 返回的 D2GS 连接凭据(GameHash / GameToken)。
  • 在原版 Game.exe 中创建并穿戴装备的角色,在 bnet.html 选角界面的等级、职业与外观显示一致。
## 背景与目标 实现 Battle.net 经典登录协议(BNCS,TCP 6112)与 Realm 角色/房间管理协议(MCP,TCP 6113),将 `bnet.html`(`src/frontend/flow-state.ts`)的 `bnet_connecting`、`bnet_login`、`char_create`、`char_select`、`bnet_lobby` 五个前置阶段从本地 mock 切换到真实 PvPGN 服务端。 ## 核心内容与 1.13c Ground Truth 对标 1. **BNCS 协议 (`bnetd`, TCP 6112)**: - 协议头 `[0xFF, packetId, uint16LE length]` 分帧与编解码。 - `SID_AUTH_INFO (0x50)`、`SID_PING (0x25)`、`SID_AUTH_CHECK (0x51)`(1.13c CheckRevision 与 D2 Classic + LoD 双 CD-Key 哈希)、`SID_LOGONRESPONSE2 (0x3A)` / 账号注册、`SID_QUERYREALMS2 (0x40)`、`SID_LOGONREALMEX (0x3E)`(获取 MCP Cookie、IP、端口与 UniqueName)。 2. **MCP 协议 (`d2cs`, TCP 6113)**: - 协议头 `[uint16LE length, packetId]` 分帧与编解码。 - `MCP_STARTUP (0x01)`、`MCP_CHARLIST2 (0x19)`(解析角色列表与 statstring)、`MCP_CHARCREATE (0x02)`、`MCP_CHARLOGON (0x07)`、`MCP_CREATEGAME (0x03)`、`MCP_JOINGAME (0x04)`(获取 D2GS IP、GameHash 与 GameToken)、`MCP_GAMELIST (0x05)`。 3. **`bnet.html` 前置 UI 与角色外观接线**: - 将 `flow-state.ts` 各阶段状态转换绑定到真实 BNCS/MCP 请求与错误码提示。 - 解析 `MCP_CHARLIST2` 返回的 1.13c 角色 statstring(职业、等级、资料片/专家级标志、16 部位装备外观字节),驱动 8 槽选角界面渲染真实角色外观。 ## 验收标准 - [ ] 通过 Node headless 与浏览器 `bnet.html` 走通:登录账号 → 创建/选择角色 → 创建游戏 → 拿到 `MCP_JOINGAME` 返回的 D2GS 连接凭据(GameHash / GameToken)。 - [ ] 在原版 `Game.exe` 中创建并穿戴装备的角色,在 `bnet.html` 选角界面的等级、职业与外观显示一致。
troytt added this to the [M20] D2GS 纯客户端:接入 PvPGN + D2GS 1.13c 服务端联机 (1.13c Ground Truth) milestone 2026-09-28 13:10:05 +00:00
Sign in to join this conversation.
No Label
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#509
No description provided.