
合作模式漏洞修复
针对《MechWarrior 5: Mercenaries》合作模式Bug的Engine.ini修复方案。无需修改二进制文件,可完全恢复原状。
查看大图Mechwarrior 5 Mercenaries Co-op Bug Fix
Engine.ini fix for the cooperative-mode replication overflow issue
⚠ 重要 — 双方玩家均需安装此文件 ⚠
此配置文件必须安装在主机和每个连接到合作游戏的客户端上。仅在一方安装无法修复错误 — 双方都必须安装此文件。
🌐 语言
请在下方展开您所使用的语言章节。
🇬🇧 英语
关于问题和测试
许多玩家在长时间战役、拥有大量库存或安装大量模组时,会遇到所谓的“合作模式 Bug”。其表现如下:客户端无法看到主机的地球物理单位、物品或金钱;客户端直接出生在机库中,无法打开菜单;开始某些任务时,难度显示为“难度:12344545”(或其他垃圾数值),任务吨位不显示,且客户端因吨位超限而无法确认准备就绪。
在阅读了 YAML Discord 及其他地方的众多消息后,用户得出结论,问题出在库存以及其中大量物品/机甲上。现今可能确实存在与库存相关的问题,但这个特定的 Bug 并不能通过这种方式解决。
测试是在一个最大限度加载了模组的安装环境(约 90 个模组)下进行的。由于模组数量众多,即使库存为空,只要合同面板上的任务超过 3 个,Bug 就会出现。我曾测试过清空库存并将物品保存到单独文件中的方法——这并没有帮助,Bug 依然存在。只有在读取完整存档文件并进行部分清理后,才能得出最终结论并找到 Bug 的根本原因。
原因是 UE4 中一个硬编码的限制,在该游戏中从 1 MB 降低到了 64 KB:当主机发送一个大于 64 KB 的复制属性时(典型的 TArray<FMissionBoardEntry> 很容易超过此大小),客户端会在反序列化中途丢弃该数据包,并从部分填充的缓冲区中读取垃圾数据,这正是客户端出现 Bug 的原因。
此修复的作用
这是一个 Engine.ini 配置文件,它在游戏启动时覆盖引擎级别的限制,将重组缓冲区从 64 KB 提高到 64 MB(1024 倍的余量)。此修复不修改可执行文件,也不触碰任何游戏文件。UE 在网络驱动启动前应用此更改,因此它会影响从第一个数据包开始的所有复制。
此外,文件中包含了对相关参数精心调整的值:
- Bunch 处理 — 客户端获得更多每帧时间来处理排队的数据包积压(3 ms → 30 ms)
- RPC 吞吐量 — 主机允许在每个网络更新中发送最多 16 个 RPC,而不是默认的 2 个
- TArray 限制 — 每次更新允许更多的更改和删除(8192 而非默认的 2048)
- 套接字缓冲区 — UDP 发送和接收缓冲区提高到 2 MB,以吸收流量峰值
- Tick 速率 — 主机 Tick 速率从 30 Hz 提高到 60 Hz,以便每个 Tick 的状态量更小
- 连接超时 (EOS) — EpicNetDriver 上的初始连接和连接超时提高到 360 秒,以防止客户端在通过 EOS 中继进行长时间初始同步时断开连接
- 带宽 — 主机的总带宽和每客户端速率提高到默认值以上
- 自适应频率 — 已禁用,以防止重要的合作角色进入休眠状态
安装
- 退出或关闭游戏。
- 打开
%LOCALAPPDATA%\MW5Mercs\Saved\Config\WindowsNoEditor文件夹。 - 如果文件夹不存在 — 启动游戏一次然后关闭。文件夹将自动创建。
- 如果
Engine.ini文件已存在,要么替换它(备份原文件后),要么将下载文件的全部内容粘贴到现有Engine.ini的末尾。 - 启动游戏。
- 请您的伙伴/朋友执行相同步骤,之后再进行连接。
重要
- 文件必须安装在会话中的每个玩家上,而不仅仅是主机。任一方都可能成为大数据包的接收方。
- 文件不修改游戏可执行文件。Steam、Epic 和 GoG 的文件完整性检查均能通过。
- 要移除修复,只需删除
Engine.ini文件。游戏将恢复至默认的 64 KB 限制。
故障排除
- 文件必须安装在会话的双方上。
- 尝试将
net.MaxConstructedPartialBunchSizeBytes提高至134217728(128 MB)以获得额外余量。
游戏更新
此配置文件位于 %LOCALAPPDATA%\...,而非游戏文件夹。Steam、Epic 或 GoG 在更新游戏时均不会触碰此文件。此修复在每次游戏更新后都会自动生效。
可选:通用的 RELIABLE_BUFFER 修补器
对于非常大的合作存档,当 Engine.ini 修复本身不足时(即 net.MaxConstructedPartialBunchSizeBytes 已被设置为最大有用值 268435456(256 MB)),将会发布一个独立的 Python 工具——reliable_buffer_patcher.py。它通过签名搜索来提高游戏可执行文件内硬编码常量 RELIABLE_BUFFER 的值。该工具适用于游戏的任何版本,并且是完全可逆的(在应用补丁前会创建一个带有时间戳的备份)。
GitHub: 暂时不可用(仍在测试中)。目前暂无需要;如果根据用户反馈确实需要,修补器将发布在 GitHub 上。
技术细节
- 启动器兼容性 — 可在 Steam、Epic 启动器、GoG 以及同一合作会话中这些启动器的任意组合上工作(所有合作流量都通过 EOS,与启动器无关)
- 性能影响 — 可忽略不计。没有预分配内存;实际成本由游戏运行时复制的内容决定。
- 游戏可执行文件修改 — 无
- 文件完整性检查 (Steam / Epic / GoG) — 通过
- 在线兼容性 — 与基于 EOS 的官方合作模式完全兼容。这是一个客户端网络缓冲区设置;传输的数据包中没有任何可观察到的变化。
问题的根源
标准 UE 4.26 附带 net.MaxConstructedPartialBunchSizeBytes = 1 048 576(1 MB)。在 MW5 中,同一个 CVar 编译后的默认值为 65 536(64 KB)——比标准 UE 4.26 低 16 倍。这已通过对游戏可执行文件的静态分析得到确认(对应的后备变量在 .data 部分中以值 0x10000 初始化)。MW5 将此 CVar 设置为 64 KB 而非 1 MB 的原因并未公开——很可能是为了在老款主机上节省内存而做出的决策。副作用是任何大于 64 KB 的复制属性(典型的如填充了任务的 Mission Board)都会被客户端丢弃,从而导致出现诸如 Difficulty = 19 274 234 之类的值和数据损坏的其他迹象。
此修复利用了标准 UE 的配置覆盖机制:引擎在初始化后、网络驱动启动前,从 Engine.ini 加载 CVar 值,因此新值会应用于从第一个数据包开始的所有复制。
如果此修复帮助了您,请考虑对其进行点赞。这将帮助其他玩家找到它!
🇷🇺 俄语
关于问题和测试
许多玩家在长时间战役、拥有大量库存或安装大量模组时,会遇到所谓的“合作模式 Bug”。其表现如下:客户端无法看到主机的地球物理单位、物品或金钱;客户端直接出生在机库中,无法打开菜单;开始某些任务时,难度显示为“难度:12344545”(或其他垃圾数值),任务吨位不显示,且客户端因吨位超限而无法确认准备就绪。
在阅读了 YAML Discord 及其他地方的众多消息后,用户得出结论,问题出在库存以及其中大量物品/机甲上。现今可能确实存在与库存相关的问题,但这个特定的 Bug 并不能通过这种方式解决。
测试是在一个最大限度加载了模组的安装环境(约 90 个模组)下进行的。由于模组数量众多,即使库存为空,只要合同面板上的任务超过 3 个,Bug 就会出现。我曾测试过清空库存并将物品保存到单独文件中的方法——这并没有帮助,Bug 依然存在。只有在读取完整存档文件并进行部分清理后,才能得出最终结论并找到 Bug 的根本原因。
原因是 UE4 中一个硬编码的限制,在该游戏中从 1 MB 降低到了 64 KB:当主机发送一个大于 64 KB 的复制属性时(典型的 TArray<FMissionBoardEntry> 很容易超过此大小),客户端会在反序列化中途丢弃该数据包,并从部分填充的缓冲区中读取垃圾数据,这正是客户端出现 Bug 的原因。
此修复的作用
这是一个 Engine.ini 配置文件,它在游戏启动时覆盖引擎级别的限制,将重组缓冲区从 64 KB 提高到 64 MB(1024 倍的余量)。此修复不修改可执行文件,也不触碰任何游戏文件。UE 在网络驱动启动前应用此更改,因此它会影响从第一个数据包开始的所有复制。
此外,文件中包含了对相关参数精心调整的值:
- Bunch 处理 — 客户端获得更多每帧时间来处理排队的数据包积压(3 ms → 30 ms)
- RPC 吞吐量 — 主机允许在每个网络更新中发送最多 16 个 RPC,而不是默认的 2 个
- TArray 限制 — 每次更新允许更多的更改和删除(8192 而非默认的 2048)
- 套接字缓冲区 — UDP 发送和接收缓冲区提高到 2 MB,以吸收流量峰值
- Tick 速率 — 主机 Tick 速率从 30 Hz 提高到 60 Hz,以便每个 Tick 的状态量更小
- 连接超时 (EOS) — EpicNetDriver 上的初始连接和连接超时提高到 360 秒,以防止客户端在通过 EOS 中继进行长时间初始同步时断开连接
- 带宽 — 主机的总带宽和每客户端速率提高到默认值以上
- 自适应频率 — 已禁用,以防止重要的合作角色进入休眠状态
安装
- 退出或关闭游戏。
- 打开
%LOCALAPPDATA%\MW5Mercs\Saved\Config\WindowsNoEditor文件夹。 - 如果文件夹不存在 — 启动游戏一次然后关闭。文件夹将自动创建。
- 如果
Engine.ini文件已存在,要么替换它(备份原文件后),要么将下载文件的全部内容粘贴到现有Engine.ini的末尾。 - 启动游戏。
- 请您的伙伴/朋友执行相同步骤,之后再进行连接。
重要
- 文件必须安装在会话中的每个玩家上,而不仅仅是主机。任一方都可能成为大数据包的接收方。
- 文件不修改游戏可执行文件。Steam、Epic 和 GoG 的文件完整性检查均能通过。
- 要移除修复,只需删除
Engine.ini文件。游戏将恢复至默认的 64 KB 限制。
故障排除
- 文件必须安装在会话的双方上。
- 尝试将
net.MaxConstructedPartialBunchSizeBytes提高至134217728(128 MB)以获得额外余量。
游戏更新
此配置文件位于 %LOCALAPPDATA%\...,而非游戏文件夹。Steam、Epic 或 GoG 在更新游戏时均不会触碰此文件。此修复在每次游戏更新后都会自动生效。
可选:通用的 RELIABLE_BUFFER 修补器
对于非常大的合作存档,当 Engine.ini 修复本身不足时(即 net.MaxConstructedPartialBunchSizeBytes 已被设置为最大有用值 268435456(256 MB)),将会发布一个独立的 Python 工具——reliable_buffer_patcher.py。它通过签名搜索来提高游戏可执行文件内硬编码常量 RELIABLE_BUFFER 的值。该工具适用于游戏的任何版本,并且是完全可逆的(在应用补丁前会创建一个带有时间戳的备份)。
GitHub: 暂时不可用(仍在测试中)。目前暂无需要;如果根据用户反馈确实需要,修补器将发布在 GitHub 上。
技术细节
- 启动器兼容性 — 可在 Steam、Epic 启动器、GoG 以及同一合作会话中这些启动器的任意组合上工作(所有合作流量都通过 EOS,与启动器无关)
- 性能影响 — 可忽略不计。没有预分配内存;实际成本由游戏运行时复制的内容决定。
- 游戏可执行文件修改 — 无
- 文件完整性检查 (Steam / Epic / GoG) — 通过
- 在线兼容性 — 与基于 EOS 的官方合作模式完全兼容。这是一个客户端网络缓冲区设置;传输的数据包中没有任何可观察到的变化。
问题的根源
标准 UE 4.26 附带 net.MaxConstructedPartialBunchSizeBytes = 1 048 576(1 MB)。在 MW5 中,同一个 CVar 编译后的默认值为 65 536(64 KB)——比标准 UE 4.26 低 16 倍。这已通过对游戏可执行文件的静态分析得到确认(对应的后备变量在 .data 部分中以值 0x10000 初始化)。MW5 将此 CVar 设置为 64 KB 而非 1 MB 的原因并未公开——很可能是为了在老款主机上节省内存而做出的决策。副作用是任何大于 64 KB 的复制属性(典型的如填充了任务的 Mission Board)都会被客户端丢弃,从而导致出现诸如 Difficulty = 19 274 234 之类的值和数据损坏的其他迹象。
此修复利用了标准 UE 的配置覆盖机制:引擎在初始化后、网络驱动启动前,从 Engine.ini 加载 CVar 值,因此新值会应用于从第一个数据包开始的所有复制。
如果此修复帮助了您,请考虑对其进行点赞。这将帮助其他玩家找到它!
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。