概述
本项目旨在探索为单机游戏《Kenshi》添加多人协作功能的可行路径。采用 DLL 注入与内存 Hook 技术,在不修改游戏本体文件与 MOD 系统的前提下,实现主机-客户端架构的角色状态同步。目前处于基础框架验证阶段(v0.1.0)。
技术路线
联机核心通过 C++ 实现,以 CMake 构建,利用 miniupnp 库进行 NAT 穿透:
- KenshiMultiplayer.exe — 启动器,负责注入并管理联机会话
- KenshiMP_Core.dll — 注入游戏的联机核心,通过内存偏移读写实现状态同步
当前已实现的功能
| 功能 | 说明 |
|---|---|
| 网络连接与 MOD 校验 | 主机/客户端连接,强制 MOD 列表一致 |
| 角色读取 | recordStatus Hook + GameWorld 回退,无需开启 C 面板 |
| 角色位置/HP 同步 | 主机广播选中角色状态,客户端可应用 |
| 金钱读写 | 依赖选中角色,通过指针链实现 |
| 世界时间同步 | 读取 getTimeStamp,客户端写入 TimeManager |
| 断线重连 | 90 秒超时,按 IP 持久化,跨日恢复 |
| 崩溃防护 | SEH 异常处理 + minidump |
局限与后续方向
当前实现仅为基础框架验证,尚不支持完整的游戏世界状态同步。后续工作可能涉及更细粒度的实体同步、战斗状态同步与延迟优化。
参考
偏移数据来源优先级为 KenshiLib > RE_Kenshi > Cheat Engine 表。项目基于 AGPL-3.0 许可。