R.E.P.O.
Install with App

Details

Latest version
0.9.1
Last Updated
First Uploaded
Downloads
30.2K
Likes
4
Size
256KB
Dependants
Edited · Nov 9, 2026

中途加入 Simple / LateJoinSimple

REPO 游戏交流 腾讯频道:#pd77525911

感谢各位玩家长期以来的使用与支持。本模组的所有优化与修复,均基于本人随机加入房间、逐局查阅运行日志的实测排查;由于联机环境复杂,仍可能存在未覆盖的情况,欢迎反馈以便持续改进。

💡 加入不稳定?先试「最小可用模式」

让房主在 BepInEx/config/cn_xc.LateJoinSimple.cfg 里把 [同步精简] 最小可用模式 改成 true,然后重启游戏。

  • 只补:地图模块连接 + 房间探索(地图可见性)
  • 跳过:宝物、物品属性、22 项场景状态、血量、电池、外观、属性
  • 适合「客机大多是原版客户端」或网络较差的环境,是最稳的加入方式
  • 代价:被跳过的内容不会由模组补发,加入者那边可能仍看到默认值(例如宝物价值 / 物品属性的初值),需要等游戏自身刷新或重新拾取
  • 房主与加入者都装本模组且版本一致时效果最好
  • 开启后 HUD 第一行会显示「精简模式」,可据此确认已生效

想恢复完整同步,把它改回 false 并重启即可。


🎬 演示

走出商店(商店外区域)

演示1

演示2

演示3


🆕 最新更新(v0.9.0)

变更

  • 「商店外区域」拆分为独立模组(暂时没有上传)(cn_xc.ShopOutsideSimple 0.1.0) 本模组只保留「稳定中途加入」,商店相关功能全部移出。
  • 新增 [同步精简] 最小可用模式(默认关闭) 开启后只补模块连接,最稳定,适合客机多为原版的情况。
  • 新增 [同步精简] 补发撤离点(默认关闭) 撤离点激活状态与锁定同步都改由该项控制;实测不补也正常(交易一下就会刷新)。
  • 商店阶段中途加入(含原版客户端)可用 房主主动补发 AllPlayerSpawnedRPC 让客机结束加载;[场景白名单] 商店阶段允许加入 默认 开启。
  • 中途加入更快:加载完成由房主在状态同步后立即补发,不再白等一个超时周期(以前 8~30 秒)。
  • 「模块已齐」判据改用游戏自己的连接计数,避免采样失真导致误跳过墙体兜底重发。
  • 网络事件码 171 → 174 / 175 避开与 LateJoinNow 等模组的撞码;协议号升级为 2,不再兼容 0.8.1 及更早版本。

默认值调整

  • [玩家属性] 加入时重放升级 → false(重放会导致属性叠加)
  • [虚空修复] 外观颜色同步 → false(原版客机会报 RPC 不存在)

修复

  • 补丁注册失败(ExtractionPoint.StateComplete Finalizer 位置错误)→ 已修,59 项全注册。
  • FieldAccessException: PlayerAvatar:rb 每 2 秒刷屏 → 改反射读取。
  • 「虚有的人」误伤正常翻滚 / 被拎起 → 阈值与冷却调整。
  • 有人中途加入时全场被传送回卡车 → 只拦掉原版「把所有人挪到出生点」那一步,死亡头等仍由原版完成。
  • 客机 avatar 有时不被创建 → 恢复放行原版 PlayerSpawn。
  • 配置项可以填负数 → 四项加范围限制并在读取处兜底钳制。
  • 撤离点锁定事件可被伪造 → 接收端要求必须来自房主并做类型校验。
  • 客机侧协同修复以前根本没执行(PlayerAvatar.Start 时机状态还不是 Main,且只触发一次)→ 现在进入主状态后补跑一次。
  • 已使用当前游戏版本(2026-10-29 Unity 6 更新后)的 Assembly-CSharp.dll 重新编译(0 错误),并在多人实测中使用。

📜 版权声明与使用条款

应原作者要求,现补充说明如下。

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.

三、未经书面许可明确禁止

  1. 反编译、反汇编、逆向工程、脱壳,或提取本作品新增/修改部分的实现逻辑;
  2. 复制、改编、翻译、演绎,或基于本作品创作衍生作品;
  3. 二次打包、重新分发、上架第三方平台,或用于商业用途;
  4. 移除或篡改版权标识、原作者声明与本条款。

四、法律依据与后果

本作品作为计算机程序受以下法律与国际条约保护:

  • 国内法:《中华人民共和国著作权法》《计算机软件保护条例》。
  • 国际条约:本作品在下列条约的缔约方内均受保护(中国、美国、欧盟均为缔约方):
    • 《伯尔尼保护文学和艺术作品公约》:国民待遇、复制权、发行权、公开传播权; 需说明的是,伯尔尼 1971 年巴黎文本未直接列出计算机程序 —— “计算机程序按文字作品保护”系由 WCT 第 4 条(伯尔尼公约的特别协议) 与 TRIPS 第 10 条第 1 款予以明确。
    • 《与贸易有关的知识产权协定》(TRIPS):确认计算机程序按文字作品保护, 并确立“保护表达、不保护思想、程序、操作方法或数学概念”(第 9 条第 2 款)。
    • 《世界知识产权组织版权条约》(WCT):明确计算机程序(含目标代码形态) 作为文字作品受保护,并赋予发行权与向公众传播权。
  • 责任与救济:对上述禁止行为,cn_xc 与上游权利人可依 《著作权法》第五十二条主张停止侵害、消除影响,并依第五十四条主张赔偿损失; 《著作权法》第五十三条为损害公共利益时的行政处理与刑事移送规定。
  • 刑事责任:依《刑法》第二百一十七条,违法所得数额较大或者有其他严重情节的, 可能构成侵犯著作权罪(该条已不要求“以营利为目的”)。

说明:部分司法辖区(如欧盟 2009/24/EC 指令第 6 条)允许“为互操作性”的 有限反编译;《计算机软件保护条例》第十七条亦允许为学习研究软件内含设计思想与原理 而“使用”软件。本条款旨在明确作者的授权边界,不排除法律强制赋予的权利。 上述条约经各缔约国国内法实施,实际维权以该国国内法及法院管辖为准。

五、致谢

  • 感谢 Zichen 创作 LateJoinNow 并授权本项目继续维护。
  • 感谢所有在腾讯频道与反馈中帮助测试的玩家。


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

  1. Decompiling, disassembling, reverse engineering, unpacking, or extracting the implementation of the portions added or modified here;
  2. Copying, adapting, translating or creating derivative works;
  3. Repacking, redistributing, publishing on third-party platforms, or any commercial use;
  4. 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: Tencent Channel #pd77525911, or leave a message on the mod page.


✨ 功能

  • 随时中途加入:朋友可以在卡车 / 商店 / 关卡进行中加入你的房间,三个场景可分别用配置控制。
  • 房主权威:场景同步全部由房主执行,加入者只接收,避免状态污染。
  • 同步内容:地图模块(墙体 / 内饰连接)、贵重物品价格与发现状态、物品属性,以及 22 项场景状态(撤离点、门禁、升级台、各类陷阱与宝物等)。
  • 房间信息 HUD(房主与加入者都可见):左下角显示房间类型(含「可加入 / 已锁定」)、房间名称、当前人数、全部玩家名单 (房主第一 → 作者 → 其余按编号;每行 1~10 人可配)。可在配置里整体关闭(显示HUD,默认开启)。
  • 身份标记:作者显示黄色(模组作者)、房主显示红色(房主); 模组测试员(指定 SteamID)显示为紫色并追加(模组测试员) —— 仅改颜色与标记,不改变名单顺序。
  • 哪些修复需要双端都装:本模组修掉的那些问题(升级属性叠加、尸体位置、撤离点锁定、模块补发、电池电量等) 只在房主也使用本模组时才能完整生效 —— LateJoinNow 1.1.1 只做了 Unity 6 适配,未包含这些修复。
  • 兼容模式(对接 LateJoinNow):房主仍在用 LateJoinNow 时,本模组按它的协议对接,让对端把本机视为可协同客户端;HUD 上方会显示 兼容模式。
  • HUD 工作模式指示:玩家名单上方显示 协同模式 / 兼容模式 / 单端模式:房主 vX / 本机 vY,一眼看出当前状态。
  • 与房主的计数对比:HUD 首行显示 【房主】/【加入者】 房间 N,与房主上报的数量对比 —— 一致打 ✓,不一致显示 (房主N);加入者还会附带 (已同步 N 个房间)。可据此判断两边世界是否一致(虚空排查)。(墙 / 门 计数自 0.5.20 起不再显示。)
  • 中途加入进度显示:等待连接 / 排队中 / 加载中 / 已中途加入。
  • 公开房名自动前缀:创建公开房时自动加 [中途加入-小菜 v版本号] 前缀,方便对端确认版本是否一致。
  • 切关冷却保护:切换场景时自动临时锁房,防止过渡阶段有人撞入。
  • 双端协同:房主与加入者都装本模组时自动启用(加载更快、外观与语音自动刷新),HUD 玩家名单上方会显示 协同模式。
  • 虚空兜底:地图分帧重发 + 20 秒移动检测,尽量避免加入者卡在虚空。
  • 房间可见性同步(需双端都装):房主把本局已探索的房间发给中途加入者,让你的游戏内地图(DirtFinder)与团队一致(与「缺墙」不是同一条线)。
  • 光照守卫:拦截光照系统的异常,避免中途加入时房间整片发黑。
  • 中途加入稳健性:模块连接对每个加入者只发一次(避免抬高客户端的 ModulesSpawned)、后台只补发「没收到过」的模块、快捷栏槽位自动补注册、以及若干游戏侧 NRE 守卫。本模组不会改动任何墙 / 门 / 通路的开关。
  • 冲突自检:检测到其它「中途加入」类模组时弹窗警告。
  • 升级属性重放(0.5.0):中途加入者会错过历史上所有「购买升级」的网络 RPC,导致跳跃/体力/冲刺/力量/抓取范围/投掷/攀爬/翅膀/血上限等属性停留在默认值。现在加入后按 StatsManager 存档调用游戏自带的 PunManager.Update*RightAway 重放一次。

    ⚠️ 该功能默认已关闭(加入时重放升级 = false):游戏原版本身会应用存档,重放会导致属性叠加。

  • OwnerOnlyRPC 异常兜底(0.4.1):对象没有 owner 时,游戏自己的 SemiFunc.OwnerOnlyRPC 会在内部抛 NRE(导致抓取链接 / 地图工具等 RPC 失败)。现在捕获后放行并只记一次日志。
  • [玩家视图] 诊断(0.4.1,只读):加入后比对「房间人数」与「本机可见 avatar 数」,若本机 avatar 少于房间人数会明确提示 —— 用于定位「属性同步不了」是否其实是玩家视图缺失。
  • [属性快照] / 目标信息诊断(0.4.3,只读):房主推送时打印目标与数量;加入者落地 12 秒后打印本机看到的每个玩家血量/上限实际值 —— 两端对照即可判定属性是否真的收到。

📦 安装

  1. 确保已安装 BepInExPack。
  2. 将 LateJoinSimple.dll 放入 BepInEx/plugins。
  3. 启动游戏,模组会自动生成配置文件。

强烈建议:房主与加入者都装本模组(协同模式),可避免单端模式的已知问题(见下)。


⚙️ 配置

配置文件:BepInEx/config/cn_xc.LateJoinSimple.cfg(改完重启游戏生效)。本版配置项已全部中文化。

节 配置项 默认 说明
全局设置 传送到房主 false 新加入者直接传送到房主位置(房主死亡则传送到最近的活人)
全局设置 协同模式 true 双端「版本号 + 协议号」一致才启用协同补丁,否则休眠为单端模式(HUD 会显示当前模式)
场景白名单 卡车阶段允许加入 true 卡车阶段是否允许中途加入
场景白名单 商店阶段允许加入 true 商店阶段是否允许中途加入
场景白名单 关卡中允许加入 true 关卡进行中是否允许中途加入
房间信息显示 显示房间类型 true HUD 显示公开 / 私人 / 单人
房间信息显示 显示房间名称 true HUD 显示房间名
房间信息显示 显示HUD true 左下角信息框总开关(关闭后完全不显示)
房间信息显示 HUD字号 16 范围 8~40(越界值会被自动修正)
房间信息显示 HUD透明度 80 范围 5~100(越界值会被自动修正)
房间信息显示 每行显示人数 5 范围 1~10(越界值会被自动修正)
虚空修复 快捷栏修复 true 补注册 InventorySpot 槽位,修复加入者无法把道具放进快捷栏
虚空修复 模块补发秒数 60 后台只补发该加入者还没收到过的模块,最多持续这么多秒(0 = 关闭)
虚空修复 血量同步 true 房主把每个玩家的血量 / 上限推给加入者
虚空修复 外观颜色同步 false 房主把每个玩家的外观颜色推给加入者(对端是原版客户端时该 RPC 不存在,会刷日志)
同步精简 最小可用模式 false 开启后只补「模块连接」,其余同步全部跳过,最稳定
同步精简 补发撤离点 false 撤离点激活状态与锁定同步开关;实测不补也正常(交易一下就刷新)
玩家属性 加入时重放升级 false 按存档重放全部升级属性(重放会与游戏自身应用叠加,导致数值翻倍)
调试 详细调试日志 false 输出 Verbose 级日志(排查问题用)
调试 冲突检测弹窗 true 检测到同类中途加入模组时弹警告

⚠️ 键名从英文改成中文后,旧 cfg 里的英文键会被忽略(设置回到默认值)。如需保留,请手动对应改名。

如遇异常,请附日志反馈。

✅ 商店阶段中途加入(原版客户端也能进)

结论:商店阶段允许中途加入,未安装本模组的原版客户端也能正常加入(2026-11-07 多人实测确认)。

机制说明:

  1. 商店场景没有 LevelGenerator,游戏自身不会给客机发 AllPlayerSpawnedRPC;
  2. 本模组由房主主动补发 AllPlayerSpawnedRPC(该 RPC 的守卫是 MasterOnlyRPC,房主发送能通过), 客机收到后把 LevelGenerator.AllPlayersReady 置为 true,从而结束加载;
  3. 同一次补救里还会补发 LoadingLevelAnimationCompletedRPC,但它的守卫是 SemiFunc.OwnerOnlyRPC (要求发送者 == 该 avatar 的所有者),由房主代发会被游戏拒绝,因此这一条实际不生效—— 不影响加入结果,属于历史遗留调用。

因此:

  • [场景白名单] 商店阶段允许加入 默认开启;
  • 若在极端情况下遇到卡加载,把该项关闭、再从 卡车 / 关卡 阶段加入即可。

🔧 商店外区域的使用建议

  • 不要在商店外使用 Q 翻滚:补出来的地面碰撞是「盒体」,翻滚时可能穿过它而掉落。
  • 走在商店外时正常走路即可;需要跳跃也尽量别在边缘翻滚。
  • 离开商店后补出来的碰撞会自动销毁,回卡车/关卡不受影响。

🔧 已知未解决

  • 中途加入时,若已有玩家死亡:

    1. 死亡玩家的尸体/头可能出现在卡车门口(而不是死亡地点);
    2. 加入者无法抓取/交互那个头;
    3. 加入者可能听到只有死亡玩家才该听到的死亡语音。

    说明:这是已知问题,正在排查(与死亡状态同步相关)。目前不影响中途加入的其他功能 (物品 / 属性 / 撤离点 / 电池同步均正常)。遇到时请附双方日志反馈,便于定位。

已修复(0.3.x)

  • ✅ 虚空门 / 缺墙 / 门框里没有门 —— 已修复。0.3.4 之后的双端实测与日志中未再出现(Level Point: Not connected 从 31 归到 1 且仅剩入口点、Ev Destroy Failed 从 122 归零)。
  • ✅ 快捷栏限制(加入者无法把武器放进快捷栏)—— 已修复(FixInventorySlots:关卡生成后把场景里的 InventorySpot 补注册进 Inventory)。

以上修复都需要加入者也安装本模组(协同模式)。加入者是原版客户端时,本模组无法修正其表现。

混合模式 / 单端模式仍可能存在的问题(本模组无法修正)

以下两种情况本模组都无法修正 —— 「客户端协同补丁」需要房主也运行本模组才会启用:

  1. 房主没装任何中途加入模组,只有加入者装了本模组。
  2. 房主装的是 LateJoinNow(Zichen 原版),加入者装的是本模组 —— 两边房间属性键不同(LateJoinNow.* vs LateJoinSimple.*),协议不通,等效单端。本模组检测到这种房主时会打一行明确提示。

表现(属预期,非 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:当前版本不推荐。虽然设计上支持「兼容模式」,但自 0.7.7 起为保证稳定性已暂时停用与 LateJoinNow 的协议对接;此时对端会把本机视为普通客户端,本模组的修复(属性叠加、撤离点、电池、模块补发等)不生效。要完整体验请让房主也改用本模组。

Q:怎么判断当前是不是双端协同? A:看 HUD 玩家名单上方:显示 协同模式 = 双端同版生效;显示 单端模式:房主 vX / 本机 vY = 两端不一致(功能性修复不生效)。

Q:改了配置没生效? A:配置在启动时读取,改完请重启游戏。版本更新不会清空你的设置(0.3.5 起);若要还原默认,删除 BepInEx/config/cn_xc.LateJoinSimple.cfg 后重启即可。


🙏 致谢

  • ( Zichen) —— 原作「中途立即加入 / LateJoinNow」的作者。本模组的全部核心逻辑、场景同步思路与踩坑经验均来自其 1.1.0 版本,并在其授权下继续维护。
  • 本模组的核心同步思路源自原作文档;README 中的功能说明与「已知局限」记录均出自本模组维护过程中的实测与日志排查。
  • 测试协助:感谢所有帮忙做双端联机测试与日志反馈的玩家。

腾讯频道:#pd77525911

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.