
LateJoinSimple
中途加入:让任何人在卡车 / 商店 / 关卡进行中随时加入你的房间。基于 Zichen 的 LateJoinNow,在其授权下接手修复「本版移除内置共享升级等新增功能,回到 0.6.1 稳定基线」、电池电量同步、撤离点锁定、死亡玩家尸体位置、虚空/模块同步修复、LateJoinNow 兼容。模组问题交流QQ群573485890。中途加入 Simple / LateJoinSimple
REPO 游戏交流 QQ 2群:573485890
感谢各位玩家长期以来的使用与支持。本模组的所有优化与修复,均基于本人随机加入房间、逐局查阅运行日志的实测排查;由于联机环境复杂,仍可能存在未覆盖的情况,欢迎反馈以便持续改进。
🆕 最新更新(v0.7.9)
修复
- 双端同版本却显示「单端模式」:把「LJN 对接」开关误套在「协同模式」总开关上, 导致协同补丁全部不启用。现已拆成两个独立开关。
- 房主同时装了本模组和 LateJoinNow 时被误判为「兼容模式」:改为先看房主是否有
LateJoinSimple.Version,有则按「本模组房主」处理(正确显示 协同 / 单端)。 - Steam 好友、邀请无法加入:锁定房间时不再设
IsOpen=false、不再调用 SteamLockLobby(那会让所有人都进不来),改为只隐藏可见性(列表搜不到,邀请/好友仍可进)。 切关后的冷却从 600 秒缩短到 30 秒。 - 尸体出现在卡车门口、无法交互:补建尸体时校验位置(
y>1000视为隐藏位,改用死亡地点), 并补调Setup()/SetColliders(true);存活玩家的补建头改为隐藏。
新增
- 诊断日志:
[加入诊断](3/12/25 秒,含本机角色 / 玩家视图 / 房主属性 / 本地尸体明细)、[地图接收]、[状态重置]、[死亡诊断]。
调整 / 隐私
- 恢复与 LateJoinNow 的协议对接(兼容模式);房主是 LJN 时 HUD 显示「兼容模式」。
- DLL 中不再保存明文 SteamID(作者与测试员改为 SHA-256 前 16 位哈希比对), 日志中的 SteamID 也全部脱敏(只输出「已设置 / 为空」)。
⚠️ 必须双端安装:本模组修的问题只在房主与加入者都装了本模组时完整生效。 ⚠️ 已知未解决:中途加入时若已有玩家死亡,尸体位置 / 头部交互 / 死亡语音仍有问题(详见「已知问题」)。
📜 版权声明与使用条款
应原作者要求,现补充说明如下。
Supplemented at the original author's request.
一、作品来源
本项目为衍生作品(derivative work):
- 上游原作:中途立即加入 / LateJoinNow,作者 Zicheh,版本 1.1.1。
- 本作品:LateJoinSimple,由 cn_xc 在上游基础上接手修复与继续维护, 已取得原作者本人许可后发布,并非原作官方发行。
- 本声明仅覆盖 cn_xc 新增与修改的部分,不改变上游原作的著作权归属。
原作者声明(照录,未做修改):
本模组为独家原创作品,禁止未经授权进行代码复制、二次打包移植, 反编译,或转载,违者将依法进行维权投诉。
二、授权范围
仅授权在 R.E.P.O.(REPO)游戏内以未经修改的形式运行本作品。 Licence granted: a limited, non-exclusive, non-transferable licence to run this work, unmodified, inside the game "R.E.P.O." only.
三、未经书面许可明确禁止
- 反编译、反汇编、逆向工程、脱壳,或提取本作品新增/修改部分的实现逻辑;
- 复制、改编、翻译、演绎,或基于本作品创作衍生作品;
- 二次打包、重新分发、上架第三方平台,或用于商业用途;
- 移除或篡改版权标识、原作者声明与本条款。
四、法律依据与后果
本作品作为计算机程序受以下法律与国际条约保护:
- 国内法:《中华人民共和国著作权法》《计算机软件保护条例》。
- 国际条约:本作品在下列条约的缔约方内均受保护(中国、美国、欧盟均为缔约方):
- 《伯尔尼保护文学和艺术作品公约》:国民待遇、复制权、发行权、公开传播权; 需说明的是,伯尔尼 1971 年巴黎文本未直接列出计算机程序 —— “计算机程序按文字作品保护”系由 WCT 第 4 条(伯尔尼公约的特别协议) 与 TRIPS 第 10 条第 1 款予以明确。
- 《与贸易有关的知识产权协定》(TRIPS):确认计算机程序按文字作品保护, 并确立“保护表达、不保护思想、程序、操作方法或数学概念”(第 9 条第 2 款)。
- 《世界知识产权组织版权条约》(WCT):明确计算机程序(含目标代码形态) 作为文字作品受保护,并赋予发行权与向公众传播权。
- 责任与救济:对上述禁止行为,cn_xc 与上游权利人可依 《著作权法》第五十二条主张停止侵害、消除影响,并依第五十四条主张赔偿损失; 《著作权法》第五十三条为损害公共利益时的行政处理与刑事移送规定。
- 刑事责任:依《刑法》第二百一十七条,违法所得数额较大或者有其他严重情节的, 可能构成侵犯著作权罪(该条已不要求“以营利为目的”)。
说明:部分司法辖区(如欧盟 2009/24/EC 指令第 6 条)允许“为互操作性”的 有限反编译;《计算机软件保护条例》第十七条亦允许为学习研究软件内含设计思想与原理 而“使用”软件。本条款旨在明确作者的授权边界,不排除法律强制赋予的权利。 上述条约经各缔约国国内法实施,实际维权以该国国内法及法院管辖为准。
五、致谢
- 感谢 Zichen 创作 LateJoinNow 并授权本项目继续维护。
- 感谢所有在 QQ 群与反馈中帮助测试的玩家。
English Version
1. Origin of this work
This project is a derivative work:
- Upstream original: LateJoinNow 1.1.1 by Zichen (王子晨).
- This work: LateJoinSimple, maintained by cn_xc, derived from the upstream original and published with the original author's permission. It is not an official release of the upstream project.
- The terms below cover only the portions added or modified by cn_xc; they do not alter the copyright ownership of the upstream original.
Original author's notice, quoted unchanged:
本模组为独家原创作品,禁止未经授权进行代码复制、二次打包移植,反编译, 或转载,违者将依法进行维权投诉。
(This mod is an original work. Unauthorised copying of code, repacking or porting, decompilation, or redistribution is prohibited; infringements will be pursued in accordance with the law.)
2. Licence granted
A limited, non-exclusive, non-transferable licence to run this work, unmodified, inside the game R.E.P.O. only.
3. Prohibited without prior written permission
- Decompiling, disassembling, reverse engineering, unpacking, or extracting the implementation of the portions added or modified here;
- Copying, adapting, translating or creating derivative works;
- Repacking, redistributing, publishing on third-party platforms, or any commercial use;
- Removing or altering this notice, the original author's notice, or any copyright identifier.
4. Legal basis and consequences
This work is a computer program protected by the Copyright Law of the People's Republic of China and the Regulations on Computer Software Protection, and — in the parties to each treaty — by the following international treaties:
- Berne Convention: national treatment, reproduction, distribution and communication to the public. Note: the 1971 Paris Act does not itself mention computer programs; the rule that programs are protected as literary works is set out in WCT Article 4 and TRIPS Article 10(1).
- TRIPS: confirms protection of programs as literary works and that copyright protects expression, not ideas, procedures, methods or mathematical concepts (Article 9(2)).
- WIPO Copyright Treaty (WCT): programs (including object-code form) are protected as literary works, with a right of distribution and a right of communication to the public.
The rights holders (cn_xc and the upstream rights holder) may seek injunctive relief and removal of infringing copies under Article 52 of the PRC Copyright Law and damages under Article 54 (Article 53 concerns administrative handling and referral for prosecution). Under Article 217 of the Criminal Law of the PRC, infringement is criminal where the illegal gains are relatively large or other serious circumstances exist (intent to profit is no longer required). These treaties are implemented through domestic law; enforcement is governed by the law and courts of the relevant jurisdiction.
Note: some jurisdictions (e.g. EU Directive 2009/24/EC, Article 6) permit limited decompilation for interoperability. This notice states the author's licensing boundary and does not exclude rights granted by mandatory law.
5. Credits
- Thanks to Zichen for creating LateJoinNow and for allowing this project to continue its maintenance.
- Thanks to all players who helped test and report issues.
Contact: QQ group 573485890, or leave a message on the mod page.
✨ 功能
- 随时中途加入:朋友可以在卡车 / 商店 / 关卡进行中加入你的房间,三个场景可分别用配置控制。
- 房主权威:场景同步全部由房主执行,加入者只接收,避免状态污染。
- 同步内容:地图模块(墙体 / 内饰连接)、贵重物品价格与发现状态、物品属性,以及 22 项场景状态(撤离点、门禁、升级台、各类陷阱与宝物等)。
- 房间信息 HUD(房主与加入者都可见):左下角显示房间类型(含「可加入 / 已锁定」)、房间名称、当前人数、全部玩家名单
(房主第一 → 作者 → 其余按编号;每行 3~6 人可配)。可在配置里整体关闭(
显示HUD,默认开启)。 - 身份标记:作者显示黄色
(模组作者)、房主显示红色(房主); 模组测试员(指定 SteamID)显示为紫色并追加(模组测试员)—— 仅改颜色与标记,不改变名单顺序。 但本模组修掉的那些问题(升级属性叠加、尸体位置、撤离点锁定、模块补发、电池电量等)只在房主也使用本模组时才能完整生效 —— LateJoinNow 1.1.1 只做了 Unity 6 适配,未包含这些修复。- 中途加入时按房主的升级等级应用一次(会持续等待房主数据就绪,最多 60 秒)。
- 实时共享只在「升级等级发生变化」时生效(有人买升级 → 全队立刻同步,走游戏原生 RPC,客户端无需安装本模组)。
- ⚠️ 如果某次广播丢了,不会自动补发(游戏的升级接口是累加式的,重发会翻倍)→ 建议退出重进让"加入时同步"兜底。
- ⚠️ 可能还有别的问题:本功能仍在观察期,如遇异常请反馈日志。
- ⚠️ 不要与 SharedUpgradesPlus / BetterTeamUpgrades 或者其他模组的共享功能同时开启,否则会双重应用。
- 兼容模式(对接 LateJoinNow):房主仍在用 LateJoinNow 时,本模组按它的协议对接,让对端把本机视为可协同客户端;HUD 上方会显示
兼容模式。 - HUD 工作模式指示:玩家名单上方显示
协同模式/兼容模式/单端模式:房主 vX / 本机 vY,一眼看出当前状态。 - 与房主的计数对比:HUD 首行显示你本机地图的「房间 / 墙 / 门」数量,并与房主上报的数量对比 —— 一致打
✓,不一致显示(房主N),可据此判断两边世界是否一致(虚空排查)。 - 中途加入进度显示:等待连接 / 排队中 / 加载中 / 已中途加入。
- 公开房名自动前缀:创建公开房时自动加
[中途加入-小菜]前缀。 - 切关冷却保护:切换场景时自动临时锁房,防止过渡阶段有人撞入。
- 双端协同:房主与加入者都装本模组时自动启用(加载更快、外观与语音自动刷新),HUD 玩家名单上方会显示
协同模式。 - 虚空兜底:地图分帧重发 + 20 秒移动检测,尽量避免加入者卡在虚空。
- 房间可见性同步(需双端都装):房主把本局已探索的房间发给中途加入者,让你的游戏内地图(DirtFinder)与团队一致(与「缺墙」不是同一条线)。
- 光照守卫:拦截光照系统的异常,避免中途加入时房间整片发黑。
- 中途加入稳健性:模块连接对每个加入者只发一次(避免抬高客户端的
ModulesSpawned)、后台只补发「没收到过」的模块、快捷栏槽位自动补注册、以及若干游戏侧 NRE 守卫。本模组不会改动任何墙 / 门 / 通路的开关。 - 冲突自检:检测到其它「中途加入」类模组时弹窗警告。
- 升级属性重放(0.5.0):中途加入者会错过历史上所有「购买升级」的网络 RPC,导致跳跃/体力/冲刺/力量/抓取范围/投掷/攀爬/翅膀/血上限等属性停留在默认值。现在加入后按
StatsManager存档调用游戏自带的PunManager.Update*RightAway重放一次。 OwnerOnlyRPC异常兜底(0.4.1):对象没有 owner 时,游戏自己的SemiFunc.OwnerOnlyRPC会在内部抛 NRE(导致抓取链接 / 地图工具等 RPC 失败)。现在捕获后放行并只记一次日志。[玩家视图]诊断(0.4.1,只读):加入后比对「房间人数」与「本机可见 avatar 数」,若本机 avatar 少于房间人数会明确提示 —— 用于定位「属性同步不了」是否其实是玩家视图缺失。[属性快照]/ 目标信息诊断(0.4.3,只读):房主推送时打印目标与数量;加入者落地 12 秒后打印本机看到的每个玩家血量/上限实际值 —— 两端对照即可判定属性是否真的收到。
📦 安装
- 确保已安装 BepInExPack。
- 将
LateJoinSimple.dll放入BepInEx/plugins。 - 启动游戏,模组会自动生成配置文件。
强烈建议:房主与加入者都装本模组(协同模式),可避免单端模式的已知问题(见下)。
⚙️ 配置
配置文件:BepInEx/config/cn_xc.LateJoinSimple.cfg(改完重启游戏生效)。本版配置项已全部中文化。
| 节 | 配置项 | 默认 | 说明 |
|---|---|---|---|
| 全局设置 | 传送到房主 |
false | 新加入者直接传送到房主位置(房主死亡则传送到最近的活人) |
| 全局设置 | 协同模式 |
true | 双端「版本号 + 协议号」一致才启用协同补丁,否则休眠为单端;房主是 LateJoinNow 时走「兼容模式」 |
| 场景白名单 | 卡车阶段允许加入 |
true | 卡车阶段是否允许中途加入 |
| 场景白名单 | 商店阶段允许加入 |
true | 商店阶段是否允许中途加入 |
| 场景白名单 | 关卡中允许加入 |
true | 关卡进行中是否允许中途加入 |
| 房间信息显示 | 显示房间类型 |
true | HUD 显示公开 / 私人 / 单人 |
| 房间信息显示 | 显示房间名称 |
true | HUD 显示房间名 |
| 房间信息显示 | 显示HUD |
true | 左下角信息框总开关(关闭后完全不显示) |
| 房间信息显示 | HUD字号 |
16 | 10~28 |
| 房间信息显示 | HUD透明度 |
80 | 20~100 |
| 房间信息显示 | 每行显示人数 |
5 | 3~6 |
| 虚空修复 | 快捷栏修复 |
true | 补注册 InventorySpot 槽位,修复加入者无法把道具放进快捷栏 |
| 虚空修复 | 模块补发秒数 |
60 | 后台只补发该加入者还没收到过的模块,最多持续这么多秒(0 = 关闭) |
| 虚空修复 | 血量同步 |
true | 房主把每个玩家的血量 / 上限推给加入者 |
| 虚空修复 | 外观颜色同步 |
true | 房主把每个玩家的外观颜色推给加入者 |
| 玩家属性 | 加入时重放升级 |
true | 按存档重放全部升级属性(跳跃 / 体力 / 冲刺 / 力量 / 血上限等) |
| 调试 | 详细调试日志 |
false | 输出 Verbose 级日志(排查问题用) |
| 调试 | 冲突检测弹窗 |
true | 检测到同类中途加入模组时弹警告 |
⚠️ 键名从英文改成中文后,旧 cfg 里的英文键会被忽略(设置回到默认值)。如需保留,请手动对应改名。
如遇异常,请附日志反馈。
⚠️ 已知问题
🔧 已知未解决(正在排查)
-
中途加入时,若已有玩家死亡:
- 死亡玩家的尸体/头可能出现在卡车门口(而不是死亡地点);
- 加入者无法抓取/交互那个头;
- 加入者可能听到只有死亡玩家才该听到的死亡语音。
说明:这是已知问题,正在排查(与死亡状态同步相关)。目前不影响中途加入的其他功能 (物品 / 属性 / 撤离点 / 电池同步均正常)。遇到时请附双方日志反馈,便于定位。
已修复(0.3.x)
- ✅ 虚空门 / 缺墙 / 门框里没有门 —— 已修复。0.3.4 之后的双端实测与日志中未再出现(
Level Point: Not connected从 31 归到 1 且仅剩入口点、Ev Destroy Failed从 122 归零)。 - ✅ 快捷栏限制(加入者无法把武器放进快捷栏)—— 已修复(
FixInventorySlots:关卡生成后把场景里的InventorySpot补注册进Inventory)。
以上修复都需要加入者也安装本模组(协同模式)。加入者是原版客户端时,本模组无法修正其表现。
混合模式 / 单端模式仍可能存在的问题(本模组无法修正)
以下两种情况本模组都无法修正 —— 「客户端协同补丁」需要房主也运行本模组才会启用:
- 房主没装任何中途加入模组,只有加入者装了本模组。
- 房主装的是 LateJoinNow(Zichen 原版),加入者装的是本模组 —— 两边房间属性键不同(
LateJoinNow.*vsLateJoinSimple.*),协议不通,等效单端。本模组检测到这种房主时会打一行明确提示。
表现(属预期,非 bug):日志可能出现 Received RPC "ModuleConnectionSetRPC" for viewID … but this …、Received RPC "DollarValueSetRPC" …、KeyNotFoundException: The given key '6024' —— 房主在同步「加入者本地并不存在」的对象;部分门 / 建筑物件与宝物数据可能缺失。
另有 部分建筑不可见:早期版本偶有反馈;0.3.4 之后的双端日志中未再出现,但未专门验证是否已完全消除。
规避办法:房主与加入者使用同一个中途加入模组(推荐都用本模组 → 协同模式)。
中途加入者的「玩家属性」同步
已覆盖的(房主在加入者落地后推送,并 4 秒后补一次):
- ✅ 血量 / 血上限(0.3.9)——
PlayerHealth.UpdateHealthRPC。开关PlayerHealthSync。 - ✅ 外观颜色(0.4.0)——
PlayerCosmetics.SetupColorsRPC(该 RPC 仅房主可发)。开关PlayerCosmeticsSync。 - 两个开关互相独立,只关一个不影响另一个。
游戏本身没有同步通道的属性(不存在"没同步"这回事):
- 升级属性:速度 / 力量 / 体力上限 / 攀爬 / 翅膀 / 电池 / 地图人数 / 蹲伏恢复 —— 这些在游戏里没有任何 PunRPC,是各客户端按本地存档计算的;其他玩家本来就不会看到你的升级数值(只能看到动作表现)。
尚未覆盖:
- 装扮(帽子等):其 RPC(
SetupCosmeticsRPC)需要int[],而本地字段是List,需要做一次转换,留待后续版本。
说明:PlayerHealth.Update 在「头像引用为空」时仍会跳过该组件的更新,以避免每帧刷 NRE(日志里的 PlayerHealth.Update 的头像引用为空… 即此),属于防崩措施,与本修复不冲突。
其它
- 过渡期禁入:最后一个提取点完成 → 下一关加载完成前,模组会临时拒绝新玩家加入,这是设计行为。
- 网络要求:房主未开加速器时,加入者可能连接超时或卡在加载界面。
- 人数上限:建议与 MorePlayersSimple 搭配;房间人数上限的修改只在创建房间前生效。
- 日志里的 Level Point: Not connected 可忽略:这是游戏自身提示,与外观无关。协同模式实测:该提示出现 1 / 15 / 31 条时,均未观察到虚空墙、门框没门或通路堵塞。
❓ 常见问题
Q:这个能和 Zichen 的 LateJoinNow 一起装吗? A:不能。两者 GUID 与房间属性键都不同,同时启用会出现重复 RPC 与缓存清理,导致卡加载 / 地图异常。请只保留一个。
Q:加入者的门框里没有门怎么办? A:可以。房主用 LateJoinNow 时,本模组会以「兼容模式」对接;但要注意两点:① 两边房间属性键不同,不会互相污染;② 本模组自己的修复(属性叠加、撤离点、电池等)在兼容模式下不生效,要完整体验请让房主也改用本模组。
Q:怎么判断当前是不是双端协同?
A:看 HUD 玩家名单上方:显示 协同模式 = 双端同版生效;显示 单端模式:房主 vX / 本机 vY = 两端不一致(功能性修复不生效)。
Q:改了配置没生效?
A:配置在启动时读取,改完请重启游戏。版本更新不会清空你的设置(0.3.5 起);若要还原默认,删除 BepInEx/config/cn_xc.LateJoinSimple.cfg 后重启即可。
🙏 致谢
- ( Zichen) —— 原作「中途立即加入 / LateJoinNow」的作者。本模组的全部核心逻辑、场景同步思路与踩坑经验均来自其 1.1.0 版本,并在其授权下继续维护。
- 本 README 中的功能说明与「已知局限」记录同样来自原作文档。
- 测试协助:感谢 排排坐 食果果(绊倒铁盒) 与 Sunshine° 帮忙做双端联机测试与日志反馈。
QQ群:573485890