救世主区域

创作者: sighsorry
已更新:2026-05-07 17:16:35
373KB

关于此 MOD

按区域归档非活跃玩家的建筑和驯养动物,保存/加载/恢复区域包,追踪玩家活跃度,配置归档排除项,并强制执行每个区域的WearNTear限制。

救世主

按区域归档不活跃玩家的建筑和驯服动物,保存/加载/恢复区域捆绑包,追踪玩家活跃度,配置归档排除项,并强制执行每个区域的WearNTear限制。



ZoneSavior是一个 Valheim 服务器维护模组,用于基于区域的清理、存档、恢复和建筑数量控制。

此来源面向瓦尔海姆 1.0.7 和BepInExPack Valheim 5.4.2350。它引用了原始游戏DLL,并包含一个固定的ServerSync兼容构建。现有的ZoneSavior配置键、RPC格式和当前捆绑格式保持不变。

它可以:

  • 将不活跃的玩家建筑归档到区域捆绑文件中
  • 将已保存的捆绑包恢复到原始位置或新区域
  • 可选重置已归档的源区域
  • 强制实施各区域的 WearNTear 限制,来自 区域.yml
  • 跟踪玩家活动以进行非活跃所有者清理
  • 提供一个可选的客户端区域界面

区域界面快捷键(默认F8)会显示当前区域边界,并在八个角各向外延伸64米。这些线条会贴合地形,每4米进行一次高度采样,以帮助估算相邻区域。

文件

ZoneSavior使用一个BepInEx配置文件夹和一个数据文件夹:

BepInEx/配置/ sighsorry.ZoneSavior.cfg ZoneSavior/ activity.yml zones.yml Diagnostics/ ZoneBundles/ tag_name/ manifest.yml bundle001_<generation>.zonebundle.yml.gz

活动.yml 存储玩家活动、扫描状态及近期扫描记录。ZoneSavior 在运行时保守重载:损坏的 YAML、脏运行时状态和活跃扫描将被忽略。

区域配置文件 存储区域限制和归档保护规则。每条规则必须声明一个非负 极限Steam ID 是最好的长期保护凭证;玩家名称虽然方便,但可能会更改。

ZoneBundles/<tag>/manifest.yml 记录存档形态。每个 bundleNNN_<generation>.zonebundle.yml.gz 将一个源区域存储为紧凑的gzip压缩YAML包。ZoneSavior直接读写这些文件;无需手动解压。只有在所有区域都成功保存后,才会通过替换清单来提交新的包文件。

先前的清单和捆绑包版本,包括未压缩的旧版区域捆绑包,不会被加载或转换。如果原始世界数据仍然可用,请使用当前版本的ZoneSavior从活动世界创建一个新的存档,然后再进行恢复。

诊断/ 包含由…编写的 YAML 报告 调试区.

配置

配置部分:

  • 01 - 通用
    • 锁定配置:让服务器控制同步设置。
  • 02 - 区域救星
    • 磨损与撕裂保存模式控制区域包存档是否包含无创建者的WearNTear。
    • 区域磨损限制: 启用区域限制,来源: 区域.yml.
    • 区域界面切换快捷键:切换客户端区域叠加层。
    • 建造计数器可见秒数控制放置计数器的可见时长。
    • 支撑填充接触公差地形接触捕获容差。必须加载源地形才能捕获精确接触。
    • 区域捆绑支持填充羽毛宽度:在恢复的支撑地形周围混合宽度。
  • 03 - 自动存档
    • 空运行只报告。
    • 存档后重置: 保存后重置符合条件的源区域。
    • 每簇最小碎片数:小集群会被跳过,或在重置运行期间不保存直接重置。
    • 未激活天数:所有者不活跃阈值。
    • 扫描间隔分钟数:自动扫描间隔。 0 禁用计划扫描。
    • 扫描器批处理大小:在生成帧之前检查了ZDOs。
    • 每局最大区域数:自动扫描中为工作预留的最大区域数量。保存或重置失败的尝试仍会消耗此配额。

归档内容

ZoneSavior保存的是玩家建造的结构,而不是随机的世界杂物。

已保存:

  • 玩家使用常规建造配方/资源消耗建造WearNTear物体
  • 已驯服的怪物,拥有 怪物AI 和 可驯服
  • 创作者元数据(存在时)
  • 已保存结构的地形支持数据

已跳过:

  • 玩家,墓碑,掉落物,投射物,布娃娃,鱼
  • 位置对象和易变世界对象
  • 原版地形组件和大多数原始地形修改器
  • 没有正常建造配方/资源成本的 WearNTear 预制件

自动归档候选检测仅从与创建者关联的 WearNTear 开始,且 创建者 != 0. 磨损破坏保存模式 = 包含无创建者 在保存步骤中可以包含附近没有创建者的磨损与撕裂对象,但仅有这些无创建者的建筑本身并不足以使该区域符合非活跃所有者清理条件。

地形恢复

区域救星使用支援填充地形恢复。

保存已加载区域时,它会采样已保存结构底部的占地范围,并在地形与结构底部足够接近的位置记录地形接触点。加载时,这些接触点可以抬升或削减地形,使结构重新获得支撑。

新的存档还会为每个接触的部件记录一个最低有效接触高度,以及与原始未修改地形之间的最低非正高度差。重新放置时,将以最常见的部件接触高度带(0.25米为一带;并列时优先选择较低的高度带)来选定代表性地板。该组合会对齐到该地板与目标位置未修改地形之间的第一个接触点,然后应用所保存的负地形偏移。大型部件与小部件一样,都只有一票。处于重叠高度带中的接触点会被保留用于对齐;支撑地形仍然使用每个单元格中的最低接触点。所有一同加载的区域共用一个放置高度; 偏移=Y 进一步调整。

现有版本3的捆绑包仍可读取。若任何参与的支持区域缺少新的放置元数据,整个加载将沿用之前的放置计算方式;请重新保存活动结构以应用新规则。原始位置 恢复 保留已保存的坐标。地形现有的±8米限制仍然适用,因此不同的坡度可能会导致部分建筑被埋或失去支撑。

如果缺少精确接触点,ZoneSavior 会回退到保存的碰撞体/占地数据,并将地形放置在合理的最低支撑面附近。该回退结果会经过钳制,以避免出现极端尖刺。

地形编辑与蓝图

ZoneSavior 不再提供地形代理预制体,也不再重放地形操作。请使用 Infinity Hammer 在蓝图中编辑并保存最终地形快照,并使用 Expand World Data 将该蓝图放置为地点。InfinityHammerAddon 是 Infinity Hammer 现有工具的独立客户端附加组件;它不依赖 ZoneSavior,也不会创建已保存的地形代理对象。

这是一次破坏性移除,不保留旧版别名、回放支持或自动世界清理。升级前请保留现有世界和蓝图的外部备份。在旧版 ZoneSavior 仍安装时,使用 Infinity Hammer 捕获最终地形,并从替换蓝图中移除旧的 ZoneSavior 代理条目。ZoneSavior 不会迁移或清理旧代理数据;当这些区域加载时,游戏本身可能会丢弃未知预制件的 ZDO。

ZoneSavior 也不再提高游戏的地形高度上限。之前保存的超出游戏正常上限的更改可能会显示不同,除非每个相关客户端都使用兼容的独立高度上限模组。保存地形快照并不会解除该要求。

区域捆绑支持填充地形恢复仍属于ZoneSavior的一部分,并独立于蓝图地形快照。

指令

存档区域

保存一个源区域或矩形源范围。

zs_savezone (x,z) tag zs_savezone (x~x,z~z) tag

示例:

zs_savezone (-21,-4) test_base zs_savezone (-21~-20,-4) old_base

手动保存命令最多接受 1,024 个区域。 存档区 不接受目标或垂直偏移。

加载区域

载入已保存的标签。

zs_loadzone tag [to (x,z)] [offset=Y] zs_loadzone tag restore zs_loadzone tag source (x,z) [to (x,z)] [offset=Y]

示例:

加载区域 auto_halla_c178 恢复 将加载区域 auto_halla_c178 设置为 (-4,0) 加载区域 auto_halla_c178 源 (-21,-4) 到 (10,3) 加载区域 test_base 到 (10,3) 偏移=2

备注:

  • 无 来源,ZoneSavior 会加载标签清单中的每个捆绑包,并保留已保存的形态。
  • 源点 (x,z) 仅从清单中加载一个已保存的源区域。
  • 恢复 将每个已保存的捆绑包加载回其原始来源区域。
  • 到 (x,z) 是目标锚点。
  • 如果 到 (x,z) 如果省略,ZoneSavior将使用本地玩家当前所在的区域。
  • 偏移=Y 在计算支撑锚点后添加垂直偏移。
  • 恢复 不接受 到 (x,z) 或偏移量。

扫描

手动运行非活跃玩家档案扫描器。

扫描 [steamID] [dry|save|reset]

示例:

zs_scan dry zs_scan save zs_scan reset zs_scan 76561198000000000 dry zs_scan steam:76561198000000000 reset

模式:

  • 干仅报告候选人。
  • 保存: 保存匹配的存档,但不重置。
  • 重置:保存匹配的档案并重置符合条件的源区域。

没有 Steam ID 时,将应用不活跃天数、存档保护、最小集群规模和自动存档配置。有 Steam ID 时,扫描对该所有者执行管理员覆盖;混合所有者的区域受到保护,不会被定向重置。

零使状态

编写一份包含最近自动归档运行的 YAML 报告。

状态

控制台会打印简短摘要以及生成的报告路径。

调试区

编写一份 YAML 诊断报告,说明一个区域的自动归档资格。

zs_debugzone (x,z)

示例:

zs_debugzone (-7,12)

报告撰写于 BepInEx/配置/区域救星/诊断/.

常用工作流

测试一个保存/读取:

zs_savezone (-21,-4) test_base zs_loadzone test_base to (10,3)

预演未启用清理:

zs_scan干zs_status

保存未激活的集群而不重置:

zs_scan 保存 zs_status

保存并重置非活跃集群:

扫描重置

在别处恢复存档:

将自动_halla_c178区域加载到(20,-3)

将存档恢复到其原始区域:

加载区域自动哈拉c178恢复

开发验证

合并后构建并更新本地游戏插件:

dotnet build ZoneSavior.csproj -c Debug -p:DeployToGame=true powershell.exe -NoProfile -ExecutionPolicy Bypass -File tests/Run-GameCompatibility.ps1

运行游戏兼容性.ps1 在已安装的 Unity Mono 运行时下,于一次性进程中运行现有的 155 项结构断言与 560 项地形放置断言,以及原始 API、Harmony 绑定、缓存访问和 ZDO 编解码检查。使用 -游戏托管 <原始专用服务器托管目录> 用于服务器程序集集。临时测试工件会被保留,并打印其路径。不会启动任何Unity场景、真实套接字、世界或原生Harmony绕行。Windows PowerShell的CLR无法加载所有新游戏类型;请使用此Mono运行器来运行完整测试套件,而不是旧的独立地形测试宿主。

独立的ServerSync源码/构建来源信息位于 库/服务器同步.兼容性.md实际客户端/主机/专用服务器的游戏玩法仍需确认:启动、F8、建造限制、保存/重置/恢复(包括传送门和容器内容)、两个斜坡方向的地形放置、非管理员拒绝、重新连接和设置同步。

GitHub

https://github.com/sighsorry1029/ZoneSavior

Valheim: 英灵神殿 的热门 MOD

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

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