火焰蒸汽工坊补丁器

创作者: VerdantsAscent
已更新:2026-05-16 08:42:05
117KB

关于此 MOD

FiresGhettoNetworking 的 BepInEx 预加载器补丁:补全缺失的 Steamworks 接收缓冲区枚举成员,并提高 ZDOMan.SendZDOs 队列上限,使 FGN 的调优参数充分发挥作用。只要安装了 FGN,无论服务端还是客户端都可运行。

火焰蒸汽工厂补丁器

为《英灵神殿》1.0版本更新。

BepInEx预加载补丁器,对Valheim的捆绑程序集进行两处精准修改,以便 火焰贫民区网络 可以使用它自带的Steam网络调节参数和ZDO队列大小配置。 把它安装到 FGN 运行的任何地方——专用服务器和每个客户端。

FiresGhettoNetworking 是必需的,但未列为依赖项。 此包的早期版本将 FGN 列为依赖项,这固定了特定的 FGN 版本:每次 FGN 更新都意味着需要发布新的补丁程序,而过时的版本锁定可能会拉入一个在当前游戏上已无法运行的旧版 FGN。该依赖项已被移除,因此当 FGN 更新时,补丁程序无需随之更改。 你仍然需要安装FGN,这个补丁才能生效 - 没有它,补丁程序只会写一行日志,什么也不修补。

此包仅在以下情况下生效 两者 这些条件在机器上均为真:

  1. 格托网络 已安装(一个 *GhettoNetwork*.dll 存在于以下任意位置之下 BepInEx/plugins/)
  2. BepInEx 在预加载时加载补丁程序(即 DLL 位于 BepInEx/补丁器/)。

如果FGN不存在,补丁程序只会写入一行日志,其他什么都不改——它本身没有任何效果,也没有可供调整的配置文件。

需要帮助、发现漏洞或想要新功能? https://discord.gg/H9uKGcAujs


修复内容

目标 它的作用
Steam网络配置值 (在 com.rlabrecque.steamworks.net.dll) 添加四个缺失的枚举字面量—— 接收缓冲区大小 (47), 接收缓冲区消息 (48), 最大接收消息大小 (49), 每包接收最大分段数 (50). Valheim 附带的是较旧版本的 Steamworks SDK,未公开这些内容;若没有它们,FGN 的接收缓冲区配置选项会报错 缺少字段异常 当它通过反射查找它们时。
ZDOMan.SendZDOs (在 assembly_valheim.dll) 定位出站发送队列上限常量(原版中为10240字节)附近的一个 获取发送队列大小 将其调用并重写为 102400(10×)。FGN 的每对等方发送速率层级可将 Steam 推送速率配置得远超原版上限;但 10 KB 的队列会封顶这一上限,无论 Steam 愿意接受多少。这次提升让队列真正能容纳一帧高层级流量。

两处修改都是在预加载阶段通过Cecil完成的——在Harmony出现之前,在任何插件Awake之前。这两个补丁都没有Harmony等效方案:

  • Steamworks 枚举成员缺失于 瓦爾海姆船隻類型,所以没有Harmony补丁能让它们显现出来——你没法 __instance.SomeField = … 如果加载的程序集中不存在该字段。
  • ZDO队列上限是一个const-int加载(加载常量整数4在IL分支内。Harmony可以转译它,但转译器的IL搜索和重新发射比在预加载时重写一个常量更重。

在哪些方面有帮助——服务器 和 客户端

早期版本仅将此补丁程序限制用于专用服务器。自 1.1.0 它可以在任何安装了FGN的地方运行,因为这两处修改在客户端也同样发挥作用:

  • 专用服务器 — 重载出站发送端:它每刻将 ZDO 更新推送给每个对等端,并为每个连接配置一个 Steam 套接字。recv-buffer 枚举用于设定其从对等端接收的缓冲区大小,以及 发送ZDO 队列上限在初始同步洪峰期间提高其出站上限。
  • 客户端 ——接收高吞吐量服务器(FGN 的 HyperBoost 或高 AutoTune 档位会远超原版速率)的客户端需要匹配的接收余量,否则会在数据摄入环节形成瓶颈。recv-buffer 枚举正是让 FGN 能够扩大客户端接收缓冲区以跟上节奏的机制。 发送ZDO 队列容量上限在客户端侧的收益较小——客户端发送的数据相对较少——但这并无害处,并且在客户端确实拥有并推送更多数据的情况下仍然适用。

没有这个补丁,FGN 依然可以运行:其接收缓冲区设置只是停留在 Steam 的默认上限,而不会报错。这个补丁的作用是在两端解锁完整的接收上限。

外籍囚犯监区大门

补丁程序扫描中 BepInEx/plugins/ 递归查找任何名称匹配的DLL 贫民窟网络.dll如果没有匹配项:

  1. 目标DLL 返回一个空列表,所以 BepInEx 永远不会为 Steamworks / assembly_valheim 加载 Cecil。
  2. 防御, 补丁() 如果它还是被调用了,也会短路。
  3. 写入一条日志行: 未检测到FiresGhettoNetworking……将不会修补任何程序集。

这扇门之所以存在,是因为如果没有 FGN 读取它们,枚举新增项就是惰性的,而单独提高队列上限效果也很小——真正的收益来自将两者与 FGN 的发送速率层级配对。把修补程序发布到非 FGN 安装环境最多也只是空操作,所以这扇门防止它悄悄改变其他网络模组的余量。

门禁在每个进程中只评估一次并缓存——一个 获取文件(… 所有目录) 启动时还有,之后就没了。


安装

安装到 每台运行FGN的机器 — 专用服务器和每个客户端:

  1. 安装 BepInEx——该 BepInExPack_Valheim 在Thunderstore上是标准版本。
  2. 安装 黑帮网络火并 你自己——模组管理器不会替你添加它,因为它故意未被列为依赖项,没有它这个补丁程序什么也做不了。
  3. 安装此包。该 补丁程序/ 从压缩包中拖放出来的文件夹 BepInEx/ 所以DLL落在 BepInEx/patchers/<author>-FiresSteamworksPatcher/patchers/FiresSteamworksPatcher.dll.r2modman / Thunderstore Mod Manager 会自动处理这个。
  4. 重新开始游戏/服务器。

预加载补丁程序没有配置文件——没什么可调的。要么FGN存在,两个补丁生效,要么FGN不存在,补丁程序空转。

安装位置

侧面 要安装补丁程序吗?
专用服务器 ✓ — 调整接收缓冲区大小以接受来自对等方的数据,并提高出站队列上限
客户端 ✓ — 调整客户端接收缓冲区大小,以跟上高吞吐量服务器
监听服务器主机(通过游戏内菜单托管) ✓ — 同时作为服务端和客户端;像安装普通客户端一样安装它

兼容性

  • 枪火贫民窟网络 —— 专为此设计。如果已安装 FGN,修补程序会激活;否则不执行任何操作。
  • 更好的网络 / 服务端模拟 / 任何其他网络大修 ——FGN 网关确保我们不会意外修改它们。如果你卸载 FGN 去尝试另一个模组,此修补程序会检测到它已不存在,并在下次启动时停止修补。
  • 其他预加载补丁程序 — 共存。Cecil的加载顺序是确定性的(按补丁文件夹的字母顺序)。我们的修改是追加式的(一组新枚举成员、一处常量重写),据我所知不会与任何内容冲突。

许可证

麻省理工学院——见 许可.

问题 / 疑问

https://discord.gg/H9uKGcAujs

Valheim: 英灵神殿 的热门 MOD

探索适用于 Valheim: 英灵神殿 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 Valheim: 英灵神殿 的全部潜力 — 今天就探索这些顶级 MOD!