
保存备份
存档文件自动滚动备份,并在读取游戏界面增加“备份”标签页。恢复时会连同MOD数据一并还原,实现快照即可完整复原所有内容。
查看大图SaveBackups
模组化的游戏有时会损坏存档。本模组会持续保留存档的滚动副本,并允许你在游戏内恢复任意一版。
Load Game 界面的 Save Info 面板上会出现一个 Backups 按钮。它会列出该存档的所有备份,包括创建时间及内容概要,每一行都带有恢复(Restore)和删除(Delete)选项。
备份面板
每份备份文件中的金钱、岛屿和游玩时间都会被读取出来,因此你可以直接判断需要哪个备份,而不是仅凭时间戳去猜测。
何时进行备份
每次游戏保存时(包括五分钟自动保存)都会自动进行备份;当你选择一个存档进行加载时同样会备份,因此你始终保留着本次游戏开始时的状态。你也可以通过 立即备份 按钮随时手动备份。
完全相同的存档会被跳过,因此挂机不会让历史记录堆满相同内容的副本。这意味着你保留下来的槽位都是真正不同的状态。
恢复安全可靠
恢复操作会首先为当前文件创建一个备份,标记为手动备份,因此恢复操作本身也是可撤销的。如果选错了备份,你也不会丢失任何东西。
手动备份永远不会被自动删除。只有自动备份会进行轮换,保留最新的几个。这一点很重要:如果手动备份也被清理,那么出错后的几次自动保存可能会悄悄删除你所依赖的良好副本。
该模组也拒绝备份或恢复空文件,因为空存档通常是损坏的表现,将其复制到你的历史记录中会毁掉你需要的备份。
模组数据同样包含在内
有些模组会将自身的存档数据保存在单独的文件中。如果只回滚原版存档,你最终会得到一个不匹配的世界:基础状态来自快照,模组状态却来自当前。
因此,快照会将存档和任何已注册的模组文件保存在一起,并作为一个整体进行恢复。含有模组数据的行会带有 + 标记和数量。将鼠标悬停在上方可以查看该快照中具体包含哪些模组。
悬停查看模组文件数量
如果你恢复的快照对应模组已经不在安装列表中,存档仍会照常恢复,面板会告诉你哪些数据被跳过了。
保留重要的备份
每一行都有一个星标。点击后该备份会被固定到列表顶部,并且无论之后堆积多少自动保存,它都不会被删除以腾出空间。
收藏的备份固定在顶部
这适用于你想回来继续游玩的存档:安装高风险模组之前的进度,或你确认状态良好的档。取消星标后它将重新加入正常的轮换,手动删除仍然正常可用。
写给模组作者
如果你的模组为每个存档写入独立文件,只需两行代码即可让它加入每次快照。
添加一个软依赖,使你的模组在没有 SaveBackups 时仍能运行:
[BepInDependency("dazed.howtofish.savebackups", BepInDependency.DependencyFlags.SoftDependency)]
即使 API 不再需要这个特性,也值得添加该特性标记。BepInEx 会按插件 ID 顺序启动插件,如果没有它,你的模组很可能会在本模组之前启动。
然后在 Awake 中注册,为给定的存档名称返回绝对路径,如果该存档没有对应文件则返回 null:
SaveBackups.Companions.Register(
"yourmodid",
"Your Mod Name",
saveName => Path.Combine(
Paths.ConfigPath,
"YourMod",
"Saves",
SaveBackups.Companions.SanitiseSaveName(saveName) + ".json"));
传入的存档名称与游戏存储时完全一致,包括标点符号。如果你的文件名基于清理过的名称,请调用 SaveBackups.Companions.SanitiseSaveName,而不要自己编写规则,这样你的文件名始终与本模组查找的名称一致。
这就是完整的集成流程。SaveBackups 在快照时复制文件,在恢复时写回文件,并根据需要创建目录。文件缺失是正常情况,不会被视为错误。
如果你完全不想引用 SaveBackups,所有调用都可以通过反射针对 SaveBackups.Companions 类型完成。注册前请检查 IsAvailable 确认类型是否正确解析。
文件存放位置
%USERPROFILE%\AppData\LocalLow\Dazed Games\How to Fish\SaveBackups\<存档名称>\<时间戳>\
save.txt
companion.<modid>.json
snapshot.json
这些文件只是真实文件的直接副本,因此你也可以手动复制回来。菜单中的 打开文件夹 可以直接带你到该目录。
1.1.0 版本之前创建的备份是单个文件而非文件夹。这些备份仍会被列出并能够恢复,作为仅存档快照。不会有任何数据迁移或重写。
配置
BepInEx/config/dazed.howtofish.savebackups.cfg
| 设置项 | 默认值 | 功能说明 |
|---|---|---|
BackupOnSave |
true | 每次保存时进行备份,包括自动保存 |
BackupOnLoad |
true | 当选择存档进行加载时进行备份 |
SkipUnchanged |
true | 不存储与最新备份完全相同的副本 |
MaxAutomaticBackups |
10 | 每个存档保留的自动备份数量。0 表示保留全部 |
MaxPreRestoreBackups |
5 | 每个存档保留的安全快照数量,在每次恢复前自动创建。0 表示保留全部 |
BackupsPerPage |
6 | 每页显示的备份数量。使用底部的箭头访问更早的备份 |
ButtonGap |
14 | 存档信息面板上删除、加载和备份按钮之间的间距 |
DeferCapture |
true | 在帧结束时复制文件,以便模组数据与存档同步捕获 |
磁盘占用很小。存档文件体积小,10 个存档备份通常远小于 1MB。
注意事项
单人游戏和托管存档均可正常工作,因为这些是服务器的存档文件。只有主机才有这些文件,因此加入他人的游戏时没有可备份的内容。
在复制之前不会覆盖任何文件,也不会修改任何游戏文件。移除模组后,你的存档保持原样,备份文件夹可随意删除。
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。