北境地形修复

创作者: FlorpyDorp
已更新:2026-09-14 00:45:26
127KB

关于此 MOD

修复了因地形编译器重复导致的北境深处地形改造丢失、传送门卡顿和雪地接缝问题。仅需在服务器安装;玩家无需安装(客户端可选安装)。

北境地形修复

创建者 弗洛皮多普MIT 许可。

修复了《英灵神殿》1.0 版本“极北之地”的漏洞:区域地形改造消失、当有人站在该区域时玩家会永远卡在传送门或登录界面、地形在两种形态间闪烁,以及雪地区域边界出现明显接缝的问题。

服务器服主:把它放到服务器上就行了。你的玩家不需要安装任何东西。 服务器会治愈它已有的世界,在重复的编译器和失效的笔画对象一出现时就立刻移除(在其他任何玩家看到它们之前),并且拒绝让未安装模组的游戏删除某个区域的地形改造。原版客户端照常连接;网络协议没有任何改变。玩家 可能 也可以把它装到他们自己的游戏里以获得额外内容(25秒传送门逃脱、源头预防、针对他们自己的笔画的雪脊修复),但这是可选的。一个DLL在两个地方都能用。

从1.1.x版本更新? 现在就做。1.1.x 单独在服务器上运行时,仍可能因为未安装模组的玩家而丢失某个区域的地形改造(见更新日志)。你现有的配置文件会在首次启动时迁移: 网络预算补丁 被重置为 假 一次(日志是这么说的)。没别的可做了。

它的作用

治疗存档

  • 在世界加载时、每2分钟,以及每当通过网络传来新的地形编译器时,它会查找具有多个 地形编译器 将该对象的地形数据合并到数据量最多的对象中,并移除其余对象。结果将在下一次世界保存时写入。
  • 控制台命令,用于扫描、修复、协调区域边界接缝,或重置一个区域的地形(保留建筑)。

保护 terraforming (服务器)

  • 到达的重复数据会在接收路径中被移除,绝不会转发给其他玩家。
  • 服务器拒绝客户端的请求,该请求旨在销毁持有区域地形改造数据的编译器。未安装模组的游戏在屏幕上出现重复项且自身拥有真正的编译器时,恰好会发送这一请求;原版随后会删除该区域内的所有笔画。编译器则被保留下来,并重新发送给所有人。

防止新伤害 (客户端,地形对象实际所在的位置)

  • 复用该区域已有的编译器,而不是再生成一个重复的。
  • 当两个编译器发生冲突时,保留拥有数据的那个,而不是先生成的那个,并正确移除另一个,从而避免创建/销毁循环启动。
  • 困难25秒传送超时,这样没人会困在传送门里。
  • 阻止锄头/铲子的挥动动作在跨越区域边界时,于共享列(雪地中区域边界上的一条单顶点脊线)上被重复施加。
  • 可选:提高 Steam 发送速率上限和 ZDO 预算(默认关闭),并限制每件物品的积雪同步,该同步在降雪期间的大型基地中会造成网络拥堵。

无法执行: 把原版已经删除的地形改造恢复回来。为此,你需要一份事发前世界文件夹的备份(这个模组只能阻止它再次发生;仓库里有一个离线工具,可以把备份中某个区域的地形复制到当前存档里)。

安装

  1. 安装 Valheim 的 BepInExPack 在专用服务器上(大多数主机面板都有一键安装BepInEx的选项)。
  2. 掉落 DeepNorthTerrainFix.dll 进入 BepInEx/plugins/.
  3. 重启服务器。就这样。日志(BepInEx/LogOutput.log) 显示 [载入时回复] 每修复一个区域都会生成对应文本,修复后的世界会在下一次自动保存(每30分钟一次)或管理员手动保存时写入。

玩家可以选择在自己的游戏中安装相同的DLL,以获得客户端附加功能。

首次运行前请备份你的世界文件夹。此模组会修改世界数据。

无法访问控制台?(大多数主机控制面板)

你不需要控制台。所有重要操作都是自动的:加载时治疗、到达时移除重复和失效的描边对象、保护真正的编译器,以及每两分钟进行一次后台清扫。下面的控制台命令是诊断和手动工具。

如果你确实希望他们无需控制台权限也能拥有这些,也可以在自己的游戏里安装该模组,并把你的 Steam ID 填进服务器的 管理员列表.txt (你的主机文件管理器可以编辑它;ID是服务器日志中你名字旁边打印的17位数字)。然后在游戏中按F5并输入该命令。 dntf_fix, 接缝, 重置 和 净化 被转发到服务器并在那里以管理员身份执行;其输出会写入服务器日志。 扫描, dntf_区域 和 dntf_zdos 在你的游戏上运行并在控制台打印。原版的 保存 作为管理员时,按F5也会保存服务器世界。

谁需要它。 每个修复环节都在问题所在之处运行:

问题 仅服务器 一个模组客户端 每个客户端
重复编译器正在删除地形改造 已停止:到达时移除重复项,真正的编译器受保护,不会被客户端摧毁 同时治疗了该玩家区域内的目标 也从源头阻止
困住玩家传送门的致命打击物体 一到便会被移除,并在加载时移除 在该玩家的区域中已移除 从未创建
传送门挂起逃脱(25秒超时) 不 仅该玩家 是
双重应用的边框描边(雪脊) 不 该玩家的击球仅限 是
雪地同步节流 服务器半场 那个玩家的一半 是

所以:仅服务器端就能为所有人阻止地形改造损失和传送门陷阱。所有人都安装才是完整的修复。

控制台命令

在专用服务器控制台中输入,或在本地游戏作为主机时在F5控制台中输入。加入的客户端也可以输入写入命令:这些命令会被转发到服务器,服务器只会为其管理员列表中的玩家执行这些命令(结果显示在服务器控制台/日志中)。

指令 它的作用
扫描 列出具有多个地形编译器的区域。只读,本地。
多恩特夫区域 打印你当前所在区域的坐标及其编译器。本地。
dntf_fix [nomerge] 合并并移除整个世界中的重复编译器。
dntf_seams [heights|paint|both] [zoneX zoneY radius] 使每条共享边界顶点在其所属区域之间保持一致(单侧编辑会复制到其他区域,冲突的编辑取平均值,角点只解析一次)。除非指定中心区域和半径,否则作用于整个世界。房主也可以输入 双面接缝 3 以角色为中心的3个区域。
dntf_reset <zoneX> <zoneY> 清除一个区域的地形修改。建筑保留。地形恢复为世界生成状态。
dntf_zdos <zoneX> <zoneY> [radius] 将区域中每个对象类型按运行中游戏所识别的方式列出:预制体名称、数量、其中有多少是非持久化的(从不保存)、所有者,以及在客户端上有多少卡在“已创建但已死亡”状态(即阻塞传送门的状态)。仅限本地,只读。
清除 <zoneX> <zoneY> <prefab> [radius] 移除一个预制体的非持久化对象(名称或哈希值来自 顿特夫_兹多斯) 从区域中移除。永远不会触及建筑或任何已保存的内容。

区域坐标:区域X = round(worldX / 64),区域Y = round(worldZ / 64)。 dntf_区域 帮你搞定。

配置(BepInEx/配置/FlorpyDorp.DeepNorthTerrainFix.cfg)

章节 按键 默认 笔记
治疗 载入世界时治疗 真 服务器/主机:加载后对整个世界去重
治疗 抵达时治疗 真 新区块的新编译器ZDO到达时立即去重(服务器:同步执行,在转发之前)
治疗 周期性治疗 / 治疗间隔秒数 真 / 120 服务器/主机全盘扫描
治疗 合并重复数据 真 在移除重复项之前,将其顶点合并到保留项中
治疗 可能治疗 真 也让加入的客户端运行抵达治疗和幽灵清除
治疗 清除幽灵地形行动 真 移除预制体为自毁地形操作的ZDO(加载时、到达时、定期清扫)
治疗 保护最富编译器 真 服务器:拒绝客户端销毁持有区域地形改造的编译器;保持此设置开启
地形 修复重复编译器, 去重时合并, 复用现有编译器Zdo 真 客户端预防
地形 跳过无主相邻地块扩散,修复重复应用的边界描边 真 防止接缝
地形 清理联机地形操作 真 携带网络视图的笔划对象被正确销毁,而不是留下一个阻塞“区域就绪”的死ZDO。
传送 硬超时 / 硬超时秒数 真 / 25 传送门悬挂逃脱
网络 补丁网络预算, Steam发送速率字节每秒, Zdo传输中预算字节 假 / 512000 / 30720 原版153600 / 10240;自1.2.0起默认关闭(上传速度弱的玩家可能会受影响)
雪 节流雪写 / 雪写步进 真 / 0.05 雪堆积同步

为什么会这样(通俗解释)

地图上每64米见方就有一个看不见的“地形簿”(游戏里叫地形编译器)。在这个方格内每一次锄头、镐子和雪铲的挥动都会被记录进去。每个方格应当有且只有一个。

当你在格子的边缘附近用铲子或锄头,或者有人传送进来并在游戏还没完全生成该格子里的物品时就开始操作,游戏只会在该玩家屏幕上已经生成的物品中寻找笔记本。它找不到,于是就创建一个全新的空白笔记本。现在这个格子里就有两个笔记本了。

当游戏之后同时显示两者时,它总是销毁先生成的那个,而不看哪一个持有真实数据。如果进行此操作的玩家“拥有”那本笔记本(最近的玩家拥有其周围的物体),它就会从所有人的世界中被删除:该方格内的所有地形改造都会瞬间恢复为世界生成时的样子。如果他们不拥有它,游戏就无法删除它,于是它会在下一帧重新生成,进而销毁另一个,如此每秒循环三十次。在这个循环运行期间,该方格永远不会被视为“就绪”,而传送门和登录界面会一直等待“就绪”,且没有超时。这就是那个卡在传送门里的朋友,直到拥有者走出该方格,所有权转移给他们为止。

服务器对此能做和不能做的事情。 服务器从不生成地形物体,因此它无法阻止玩家的游戏 询问 删除笔记本。它能做的,以及1.2.0所做的,是拒绝:销毁持有广场地形改造数据的笔记本的请求会被拒绝,笔记本会被直接退回。它也从一开始就不让副本到达其他玩家手中。

雪。 在遥远北方,积雪深度也记录在同一本笔记本里,每米地面存一个数值,绘制成最高两米的高度。每个方格的网格各自独立,两个方格之间的界线没有任何混合过渡。因此,只要相邻两本笔记本在共享边缘上的记录不一致,就会沿分区线出现一道笔直的台阶:要么是某本笔记本被删除了(如上所述),要么是一个方格收到一笔而另一个没收到(网络消息丢失),要么是真正的代码缺陷——一笔跨越两个方格的笔画被同时应用到了两个方格上。 和 跨境复制后,共享列就会收到两次。旧式涂装是混合模式,涂两遍几乎看不出变化;雪地涂装是叠加模式,所以第二遍涂上去会显出一道凸痕。

为什么边界接缝从未修复。 它们一直都在,只是很微弱:每个方格只根据自身的三角形计算光照,而任何编辑如果只影响到线的一侧而没影响到另一侧,就会留下一个小台阶。在1.0之前,那只是一条光照线和偶尔出现的裂缝。深北之地把涂装层变成了几何体,于是原本看不见的涂装不匹配就变成了一堵墙。

笔记

  • 基于反编译代码构建,适配英灵神殿1.0.12版本,并逐行对照验证。请反馈您遇到的 BepInEx/LogOutput.log.
  • 当服务器修复玩家正在改造的区域时,该玩家的副本会重新加载合并后的区块(短暂的地形重建),最多可能丢失一次进行中的笔刷操作。玩家在整个过程中始终保有该区域的所有权。
  • 当服务器拒绝销毁时,发起该请求的玩家会在编译器恢复时看到该区域的地形重建一次。此后其自身的笔触会被合并,而非丢失。
  • 积雪同步节流会在同步间隔期间将累积值保留在本地,因此积雪仍会堆积,大雪伤害仍会触发,只是减少了网络流量。
  • 关于完整的漏洞分析以及用于离线存档修复的 Python 工具,请参见代码仓库。
  • 作者:FlorpyDorp。欢迎在Thunderstore页面或代码仓库提交漏洞报告和反馈。

Valheim: 英灵神殿 的热门 MOD

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

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