Valheim效果列表兼容

创作者: Ntxfloy
已更新:2026-09-25 06:45:05
15KB

关于此 MOD

Valheim 1.0(Unity 6)兼容性桥接:恢复 EffectList.Create 五参数转发、Character.Message 四参数转发(修复 OdinStorage),并修复 ZNetScene.RemoveObjects 空引用异常连锁问题。

英灵神殿兼容桥梁

Thunderstore Version License: MIT Target: Valheim 1.0 (Unity 6)

一个轻量且稳定的双组件兼容性模组,旨在恢复旧版模组的兼容性并消除破坏游戏的问题 空引用异常 大量涌入 英灵神殿 1.0(Unity 6).


该模组解决的问题

当Iron Gate将《英灵神殿》升级至 1.0(Unity 6000),两个关键的破坏性变更破坏了数十个现有模组,并导致扇区卸载不稳定:

1. 缺少方法异常 开启 创建效果列表

在《英灵神殿》1.0版本中,Iron Gate添加了第6个参数(目标ZDO) 到 创建效果列表:

// 旧版签名(被数十个现有模组使用):EffectList.Create(Vector3 pos, Quaternion rot, Transform baseChild, float scale, int itemVariant) // Valheim 1.0 签名:EffectList.Create(Vector3 pos, Quaternion rot, Transform baseChild, float scale, int itemVariant, ZDOID targetZDO)

任何针对旧版英灵神殿编译的模组都会抛出:

System.MissingMethodException: 未找到方法:EffectList.Create

2. 发现多个匹配项 和谐共处

当存在多个重载但缺乏正确的参数区分时,Harmony按方法名进行查找会失败,并出现:

System.Reflection.AmbiguousMatchException:EffectList.Create 找到不明确的匹配项

3. Unity 6 ZNetScene.RemoveObjects 空引用异常级联(每场会话5000+错误)

在Unity 6中,原生C++对象的销毁和托管引用的生命周期行为发生了变化。当对象离开玩家区域时, ZNetScene.RemoveObjects 迭代 实例值如果外部模组摧毁了一个 网络视图 或其关联的 游戏对象 在游戏过程中,原版代码会解引用已死亡的对象:

空引用异常:对象引用未设置为对象的实例,位于 ZNetScene.RemoveObjects(System.Collections.Generic.List`1[ZDO] currentNearObjects,System.Collections.Generic.List`1[ZDO] currentDistantObjects),位于 ZNetScene.CreateDestroyObjects(),位于 ZNetScene.Update()

这会导致每帧产生数千个空引用异常的无限循环、严重卡顿、内存泄漏,以及实体消失功能失效。


工作原理

此包提供了一个清晰的双层架构:

 Valheim 游戏启动
│
├──► 1. 预加载补丁器 (ValheimEffectListCompat.dll)
│    ├─ 在游戏程序集加载前通过 Mono.Cecil 注入
│    ├─ 添加旧版 5 参数 EffectList.Create 转发方法
│    └─ 安装 Harmony 解析器钩子以支持按名称补丁
│
└──► 2. 运行时场景插件 (ValheimSceneCompat.dll)
     ├─ 拦截 ZNetScene.RemoveObjects
     ├─ 阶段 1:清理 m_instances 中的失效/损坏键值
     ├─ 阶段 2:安全卸载离开活动区域的实体
     ├─ 阶段 3:清理 ZDOMan 中非持久化的自有 ZDO
     └─ 在 CreateDestroyObjects 和 RemoveObjects 上安装安全终结器

组件1:塞西尔预加载器(瓦爾海姆效果列表兼容.dll)

  • 位置: BepInEx/patchers/Ntxfloy-ValheimEffectListCompat/ValheimEffectListCompat.dll
  • 目标: netstandard2.0 与 零 对游戏程序集的依赖。
  • 效果列表转发器: 注入一个轻量级IL包装器,将5参数调用转发到原生的6参数方法,并使用默认值 无.
  • 和谐解算器: 自动引导模糊和声 效果列表.创建 按元数据令牌顺序对主游戏实现进行补丁。

组件2:运行时场景插件(瓦尔海姆场景兼容.dll)

  • 位置: BepInEx/plugins/Ntxfloy-ValheimSceneCompat/ValheimSceneCompat.dll
  • 目标: netstandard2.1 标准 基础Unity插件.
  • 安全字典清理: 在遍历之前,清理并移除空值/已销毁的键和失效引用。
  • 保底移除: m_instances.Remove(zdo) 保证在 终于 格挡,确保区域切换顺畅。
  • 非持久化ZDO的原版一致性: 通过以下方式正确注销临时拥有的实体(箭矢、投射物、瞬态视觉特效): ZDO管理器.销毁ZDO 在隔离区块内,防止世界数据库泄露。
  • 安全终结者: 捕获并抑制所有异常错误 创建销毁对象 和 移除对象,确保游戏主循环永不中止。
  • 智能错误节流: 记录每个唯一异常签名的首次出现,立即输出完整堆栈跟踪,之后将后续出现节流为每 10 秒一次。

配置

设置保存在 BepInEx/config/ntxfloy.valheimscenecompat.cfg:

分类 选项 默认 描述
网络场景 启用安全移除对象 真 启用词典清理并确保移除于 ZNetScene.RemoveObjects.
网络场景 启用创建销毁终结器 真 安装安全终结器于 创建销毁对象 捕获未处理的第三方异常。
网络场景 防止双重ZNet视图幽灵ZDO 假 实验性:销毁重复项 网络视图 在预制体上添加组件,而不是创建未托管的幽灵ZDO。

安装

通过 r2modman / Thunderstore Mod Manager 安装(推荐)

  1. 安装 r2modman 或 Thunderstore 应用。
  2. 搜索 瓦尔海姆效果列表兼容 由 尼特弗洛伊 点击 下载.

手动安装

  1. 确保 BepInExPack 英灵神殿 已安装。
  2. 下载并解压最新的发布压缩包(例如 Ntxfloy-ValheimEffectListCompat-0.1.7.zip)。
  3. 复制 BepInEx 将压缩包中的文件夹直接解压到你的英灵神殿游戏目录中:
    • 补丁程序前往: Valheim/BepInEx/patchers/Ntxfloy-ValheimEffectListCompat/ValheimEffectListCompat.dll
    • 插件前往: Valheim/BepInEx/plugins/Ntxfloy-ValheimSceneCompat/ValheimSceneCompat.dll

从源码构建

需要 .NET SDK 以及英灵神殿的游戏引用。

# 克隆仓库 git clone https://github.com/Ntxfloy/valheim-effect-list-compat.git cd valheim-effect-list-compat # 构建解决方案 dotnet build -c Release # 或打包用于Thunderstore powershell -ExecutionPolicy Bypass -File .\package.ps1

授权

本项目遵循以下许可协议: MIT许可证.

Valheim: 英灵神殿 的热门 MOD

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

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