R.E.P.O.
You are viewing a potentially older version of this package. View Latest Version
Install with App

Details

Date Uploaded
Downloads
34.1K
Size
240KB
Edited · Oct 30, 2026

中途加入 Simple / LateJoinSimple

REPO 游戏交流 QQ 2群:573485890

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


如遇异常,请附日志反馈。 ⚠️ 与 LateJoinNow(原作者模组)的兼容边界(重要) 本模组可以检测 LateJoinNow 房主并按它的协议对接(HUD 显示"兼容模式"), 但本模组修掉的那些问题 —— 升级属性叠加、尸体位置、撤离点锁定、模块补发、电池电量等 —— 只在房主也使用本模组时才能完整生效。

⚠️ 兼容性说明:本版本使用 Unity 6(6000.3.17f1) 的游戏程序集编译, 仅支持 2026-10-29 之后的游戏版本。若你的游戏仍是 Unity 2022 版本,请使用更早的模组版本(0.6.0)。

📌 为什么本版回到 0.6.1 基线

本版(0.7.6)的源码取自 0.6.1,只把版本号改成 0.7.6,功能代码一行未改。 编译产物与线上 0.6.1 的 DLL 逐项比对结果:补丁注册集 57/57 一致、方法数 204/204 一致。

为什么选 0.6.1: 它是第一个做了 Unity 6 适配的版本 —— 新版游戏把 Steam 大厅逻辑 从 SteamManager 迁到了新的 SteamLobbyManager,0.6.1 通过反射访问新类 (GetSteamLobbyManagerInstance / InvokeSteamLobby),所以它本身就能在新版游戏上编译通过。 0.6.0 仍然是直接调用 SteamManager,在新版游戏上必然失效。

为什么 0.7.2 ~ 0.7.5 全部不能用:

原因 表现
基线用错(0.6.0 补丁集 + 后续新增功能,而非可用的 0.6.1) 方向从一开始就偏
凭日志误删了两个关键补丁(PlayerSpawn / LoadingUI 拦截) 卡在加载界面;角色以死亡状态落地(地上有死亡头、无 UI、不能交互)
给撤离点结算加"异常兜底",中断了游戏的销毁流程 StateComplete 每帧 NRE(单局 860 条),帧率被拖死
在 LateStart 之前强行补数据 打断游戏自身的初始化顺序
切关清空 Photon 实例化缓存 后来加入者拿不到其他玩家的对象注册,出现海量 viewID does not exist
功能 + 修复 + 兜底 + 自愈同时改 出问题后无法二分定位

本版起的工作方式: 以 0.6.1 原样源码为唯一基线,后续每次只加一项功能, 单独编译、单独出包、单独验证;任何改动都要能通过「补丁注册集与基线比对」。

📜 版权声明与使用条款

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

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. 移除或篡改版权标识、原作者声明与本条款。

四、法律依据与后果

本作品作为计算机程序(按文字作品保护)受以下法律与国际条约保护: 《中华人民共和国著作权法》《计算机软件保护条例》, 以及《伯尔尼保护文学和艺术作品公约》、TRIPS 协定第 10 条。

对上述禁止行为的实施者,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

  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 as a literary work under the Berne Convention and TRIPS Agreement, Article 10, as well as the applicable domestic law, including the Copyright Law of the People's Republic of China and the Regulations on Computer Software Protection. The rights holders (cn_xc and the upstream rights holder) may seek injunctive relief, removal of infringing copies and damages; wilful infringement for commercial advantage may also carry criminal liability under Article 217 of the Criminal Law of the PRC.

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.

⚠️ 测试版说明(v0.7.6)

这是一个公开测试版。欢迎大家继续帮忙验证:

  • 中途加入主流程已实测可用(排队 → 场景 / 物品 / 宝物 / 状态同步 → 落地动画 → 移动检测通过)。
  • 联机细节仍可能存在未知问题,欢迎反馈。
  • 反馈请附日志:BepInEx/LogOutput.log(或 BepInEx 控制台),并说明是房主端还是加入者端。
  • 本版相关修复:不再销毁带铰链的门(原版会销毁,可能导致加入者看到「只有门框、门没了」)。
  • 本版新增:房间可见性同步(需双端都装)——房主把本局已探索的房间发给中途加入者,修的是游戏内地图(DirtFinder)上的房间揭示;并新增光照守卫,拦截光照系统异常以免整片房间不发亮。
  • 「虚空门 / 缺墙 / 门框里没有门」已修复:0.3.4 起双端实测与日志中未再出现(Level Point: Not connected、Ev Destroy Failed 均已归零)。

✨ 功能

  • 随时中途加入:朋友可以在卡车 / 商店 / 关卡进行中加入你的房间,三个场景可分别用配置控制。
  • 房主权威:场景同步全部由房主执行,加入者只接收,避免状态污染。
  • 同步内容:地图模块(墙体 / 内饰连接)、贵重物品价格与发现状态、物品属性,以及 22 项场景状态(撤离点、门禁、升级台、各类陷阱与宝物等)。
  • 房间信息 HUD(房主与加入者都可见):左下角显示房间类型(含「可加入 / 已锁定」)、房间名称、当前人数、全部玩家名单(房主第一 → 其余按编号;每行 3~6 人可配)。 但本模组修掉的那些问题(升级属性叠加、尸体位置、撤离点锁定、模块补发、电池电量等)只在房主也使用本模组时才能完整生效 —— LateJoinNow 1.1.1 只做了 Unity 6 适配,未包含这些修复。
  • 内置共享升级(0.7.x,默认开启):配置项 [玩家属性] SharedUpgrades。
    • 中途加入时按房主的升级等级应用一次(会持续等待房主数据就绪,最多 60 秒)。
    • 实时共享只在「升级等级发生变化」时生效(有人买升级 → 全队立刻同步,走游戏原生 RPC,客户端无需安装本模组)。
    • ⚠️ 如果某次广播丢了,不会自动补发(游戏的升级接口是累加式的,重发会翻倍)→ 建议退出重进让"加入时同步"兜底。
    • ⚠️ 可能还有别的问题:本功能仍在观察期,如遇异常请反馈日志。
    • ⚠️ 不要与 SharedUpgradesPlus / BetterTeamUpgrades 或者其他模组的共享功能同时开启,否则会双重应用。
  • 兼容模式(0.6.0):房主仍在用 LateJoinNow 1.1.0 时,本模组会按它的协议对接,让对方把本机视为可协同客户端;HUD 上方会明确显示 兼容模式:对接 LateJoinNow 协议。
  • HUD 工作模式指示(0.6.0):玩家名单上方显示 兼容模式 / 协同模式 / 单端模式:房主 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 秒后打印本机看到的每个玩家血量/上限实际值 —— 两端对照即可判定属性是否真的收到。

📦 安装

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

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


⚙️ 配置

配置文件:BepInEx/config/cn_xc.LateJoinSimple.cfg(改完重启游戏生效)。

节 配置项 默认 说明
全局设置 传送到房主 false 新加入者直接传送到房主位置(房主死亡则传送到最近的活人)
全局设置 协同模式 true 自动:双端「版本号 + 协议号」一致才启用协同补丁,否则自动休眠为单端
场景白名单 卡车阶段允许加入 true 卡车阶段是否允许中途加入
场景白名单 商店阶段允许加入 true 商店阶段是否允许中途加入
场景白名单 关卡中允许加入 true 关卡进行中是否允许中途加入
房间信息显示 显示房间类型 true HUD 显示公开 / 私人 / 单人
房间信息显示 显示房间名称 true HUD 显示房间名
房间信息显示 HUD字号 16 10~28
房间信息显示 HUD透明度 80 20~100
房间信息显示 每行显示人数 5 3~6
虚空修复 快捷栏修复 true 补注册 InventorySpot 槽位,修复加入者无法把道具放进快捷栏
虚空修复 模块补发秒数 60 后台只补发该加入者还没收到过的模块,最多持续这么多秒(0 = 关闭)
虚空修复 血量同步 true 房主把每个玩家的血量 / 上限推给加入者
虚空修复 外观颜色同步 true 房主把每个玩家的外观颜色推给加入者
玩家属性 加入时重放升级 true 按存档重放全部升级属性(跳跃 / 体力 / 冲刺 / 力量 / 血上限等)
调试 详细调试日志 false 输出 Verbose 级日志(排查问题用)
调试 冲突检测弹窗 true 检测到同类中途加入模组时弹警告

⚠️ 已知问题

已修复(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.3.4 起,协同模式下双端实测未再出现)。若仍遇到,请先确认加入者也安装了本模组,然后把双端 LogOutput.log 发我。

Q:怎么判断是不是协同模式? A:HUD 里玩家名后显示「(优化)」即表示协同模式生效。

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


🙏 致谢

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

QQ群:573485890

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