HJM-betterdoor icon

betterdoor

Break doors and lock/unlock with keys. Fixes host/client door state synchronization. 所有人安装 0.1.6 并重启。

By HJM
Last updated 14 hours ago
Total downloads 42
Total rating 0 
Categories Tweaks & Quality Of Life AI Generated
Dependency string HJM-betterdoor-0.1.6
Dependants 0 other packages depend on this package

This mod requires the following mods to function

BepInEx-BepInExPack-5.4.2305 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2305

README

betterdoor 0.1.6

修复 0.1.5 的联机消息被丢弃:Unity NGO 的具名消息回调保留了 8 字节消息名哈希,此时 FastBufferReader.Length 为 72、Position 为 8,正文为 64。旧代码错误检查 Length == 64,导致房主本地破门成功,但远端收不到状态;客人的伤害、钥匙请求和状态补同步也会被丢弃。0.1.6 改为检查 Length - Position == 64,保持消息结构和既有门交互逻辑。

房主和所有队员都要更新为 0.1.6,并退出游戏后重新启动。将此 ZIP 通过 r2modman 的 Import local mod 导入,或把 BepInEx/plugins/HJM_betterdoor/HJM.doors.dll 替换进对应配置的旧 betterdoor 模组目录。保留同一个配置中一份门模组 DLL。此包未上传平台。

功能沿用 0.1.5:门默认 100 血,普通铲子每击 20 伤害;破门后解锁并保留正常开关交互,损坏的门锁不能重新上锁。钥匙对关闭的完整门执行锁门,对锁门执行解锁,成功后消耗钥匙。保留自定义近战工具的既有适配。门血量和伤害配置不变。

验证:两个独立 Lethal Company v81 进程通过真实 UnityTransport/NGO 消息通信,在旧 0.1.5 DLL 上复现 72/8/64 长度误判并超时;修复后请求、回复、广播、确认均通过。进一步使用实际生成的原生 DoorLock、AnimatedObjectTrigger、InteractTrigger、NavMeshObstacle 和嵌套双门预制体,运行房主破门、客人锁门、房主解锁、客人破门、双扇门、锁门交互拦截、损坏后禁止重锁、丢失缓存后补同步、补同步保留已关闭的破门状态;房主 12 项、客人 17 项检查通过。

验证边界:上述双进程检查用本地 UDP 运行真实游戏网络组件,并手动驱动网络更新;测试门设为 20 血便于每个发起人用一次真实请求覆盖同步,发行版仍默认 100 血。钥匙成功后的消费确认消息已验证送达,但测试没有执行完整玩家背包销毁流程。尚未进行真人 Steam 房间的画面、碰撞和完整钥匙背包验收;这不等于已通过全部实际游戏场景。

源码位于 src,build.py 使用本机已有 Roslyn 编译器和游戏/BepInEx 程序集构建。run_wire.py --baseline 复现旧 DLL 错误;run_wire.py 验证修复后的消息层;run_states.py 验证双方门状态。测试所需对象与运行目录均独立,不改游戏存档。

原因对应的 Unity NGO 源码:https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/blob/ngo/1.12.0/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/NamedMessage.cs