[M20-P2] 实装 D2GS 1.13c 握手、下行 Huffman 解压、包长分帧与分发核心 (D2Net.dll / D2Client.dll) #510
Labels
No Label
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: troytt/diablo2-web#510
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景与目标
实现客户端与 D2GS(TCP 4000)的底层通信层:完成进房握手、心跳保活、下行流固定码表 Huffman 解压、1.13c 权威包长表分帧与严格 fail-fast 的包分发框架。
核心内容与 1.13c Ground Truth 对标 (
D2Net.dll&D2Client.dll)0xAF(压缩模式协商)→ 发送上行0x68 D2GS_GAMELOGON(携带MCP_JOINGAME的 GameHash、GameToken、角色职业、版本号0x0D与固定常量)→ 接收0x5C/0x01 D2GS_WALKTOLOCATION(难度、竞技场标志、资料片标志)→ 发送0x6B D2GS_ENTERGAMEENVIRONMENT→ 接收0x02 D2GS_LOGONSUCCESS。0x6D D2GS_PING(携带GetTickCount相对毫秒),处理下行0x8F D2GS_PONG计算 RTT。D2Net.dll):D2Net.dll内置的静态字符频率 Huffman 树与首字节/双字节变长包头解码。D2Client.dll):D2Client.dll下行包大小查表(0x00..0xAE定长表 +0x26聊天、0x9C/0x9D物品、0xAA/0xAB/0xAC单位属性/怪物等变长包长度计算函数),从一个解压帧中精确切分出多条 D2GS 逻辑包。验收标准
.d2cap抓包样本执行离线回放,Huffman 解压与包切分 100% 零错误通过。MCP_JOINGAME令牌连入真实 D2GS,成功收到0x01 / 0x02 / 0x03 / 0x07 / 0x59等初始包并保持 60 分钟心跳不断线。