Commit Graph
2 Commits
Author SHA1 Message Date
TermiNexus 2a0296d0bb feat(client): 协议层 M3 —— 压缩帧解压两端统一走 fflate.unzlibSync
真实抓包里的关键帧是 zlib 压缩的(space-100045260/s2c_0000.bin 整帧 915B → 解压后帧体 1799B;space-100073070/s2c_0004.bin 整帧 41590B → 解压后 255844B),M2 只在 Node 侧用 zlib 解、浏览器目标直接抛错。改为两端同一份纯 JS 实现 fflate 0.8.3,DecodeFrame 保持同步签名。关键修正:fflate 的 inflateSync 是「无包装 DEFLATE」,喂 zlib 流会报 unexpected EOF,zlib 包装要用 unzlibSync —— 官方客户端也正是用它(3DTank/src/module_24635.js:20 g = n.unzlibSync,来自 module_29518.js:1172),与我们同路。验收:Node 侧两个压缩帧的解压结果与 link.js 的 zlib.inflateSync SHA256 完全相同,且解压后完整解出记录(1 条 zt / 1 条 pt + 28 条 fields),M2 对照脚本仍 5 帧、一致叶子 26950 / 不一致 0;浏览器侧页面加载即自动跑自检、console 全项通过(已实际用浏览器打开确认);三个构建任务全绿;production 产物 524579 → 564689 字节(+40110,fflate 的 CJS 入口无法 tree-shake,后续可换 ESM 瘦身)。
2026-09-18 10:31:37 +08:00
TermiNexus 5644692c97 feat(client): Kotlin/JS + React 客户端脚手架(对齐游戏技术栈)
游戏本体是 Kotlin/JS + kotlin-react + kotlinx.serialization + coroutines,逆向客户端要用同一套栈重写,所以脚手架与它对齐:Kotlin 2.1.21 / kotlin-wrappers 2025.5.11-19.1.0(React 19.1.0)/ kotlinx-serialization-json 1.8.1 / kotlinx-coroutines-core 1.10.2 / kotlinx-html-js 0.12.0;Gradle 8.10.2 走腾讯镜像(services.gradle.org 与 raw.githubusercontent.com 本机不可达)。构建已验证:BUILD SUCCESSFUL,产物 build/dist/js/productionExecutable/TankIcClient.js(261KB)。注:kotlin-wrappers 自 2025 年起只发 React 19.x 的 wrapper,故 React 锁 19.1.0,与游戏的 18.3.1 不同。
2026-09-18 09:30:22 +08:00