存档损坏/修复/备份

0 点赞
Dungeons of Dredmor
转载

你的存档损坏了?想要修复,或者更好的是,想要预防这种情况发生?又或者只是想在游戏过程中自动备份存档?只需花费阅读本指南的时间,你就能获得所有这些功能,甚至更多! 预防:存档损坏/丢失 按照以下所有步骤操作,你就能尽情享受《地下城冒险》的游戏生活……至少在你传送进入一个充满喝了酸性饮料的怪物的怪物动物园之前是这样。 禁用Steam云同步。 在Steam库中右键点击游戏 点击“属性” 点击“更新”选项卡 取消勾选底部写着“为《地下城冒险》启用Steam云同步”的方框

创建新角色后,请立即手动保存并进行完整备份,尤其是复制的模组文件。如果存档损坏,大多数情况下实际上是因为存档专用的模组文件副本出现问题。用备份文件替换损坏的文件可以修复问题,而无需回滚实际的存档数据。 如果你使用本指南底部的自动备份脚本,可以在保存新角色后执行“会话首次备份”(即“完整”备份),让系统自动完成此过程……只需确保尽快执行,以便立即获得可用的模组文件副本。如果在一个会话中创建多个角色,请确保每次都重新启动自动备份工具。手动操作方法: 进入你的存档文件夹(Windows系统下路径为“C: Users <你的用户名> Documents Gaslamp Games Dungeons of Dredmor <你的角色名>.dredmorsave”) 将所有“mod<数字>.dat”文件备份到其他位置(通常也需要备份其他所有文件,但此初始备份专门针对这些mod文件)

请经常备份整个“C: Users <你的用户名> Documents Gaslamp Games Dungeons of Dredmor”文件夹,或者至少备份你特定角色的子文件夹。 再次强调,我强烈建议使用本指南底部的自动备份脚本。 始终保留多个“完整”和“最小化”备份,因为你永远不知道需要回滚损坏存档到多早的版本。 手动频繁保存!自动备份脚本会配合游戏内的自动保存工作,但自动保存总像是一场冒险……它们还会相互覆盖。为了100%确保你的存档应用到正确的角色,你应该手动进行保存。 大约每小时重启一次游戏。游戏在运行一段时间后会在某个时刻停止更新存档……通过减少此类情况的发生频率,更重要的是在不知情的情况下避免其发生(因为即使有备份,当这种情况发生时也无济于事)来“解决”这个问题。 如果你有特别珍视的存档,请在物理介质和云存储介质上进行冗余备份。你可以轻松设置Dropbox(及类似服务),以便在存档备份文件夹发生变化时自动更新你的云存储。这将比Steam的游戏专用云存储更加可靠和有用(如果你正确遵循本指南,就应该已禁用该云存储!)。 修复:已损坏的存档 如果存档损坏与复制的mod文件损坏有关,即使你没有“mod<数字>.dat”备份,也有机会修复损坏的存档。如果你的存档突然消失,或者存档本身出现损坏,那么备份是你唯一的解决办法,你可以跳过此部分(以及替代方法部分)。 如果你认为问题出在损坏的模组文件上,请继续阅读…… 首先,前往你的存档位置:“C: Users <你的用户名> Documents Gaslamp Games Dungeons of Dredmor <你的角色名>.dredmorsave”。在该文件夹中,你需要检查是否有任何“mod<数字>.dat”文件的大小为0 KB。 如果有,请按照下面的“常规方法”操作。如果没有,则需要使用“替代方法”中的一种。 常规方法 非常重要的注意事项:以下步骤假设你没有取消订阅(或重新订阅)在该特定存档中使用的任何模组。游戏对模组列表的排序(以及我们将要尝试修复的模组文件编号)是基于你的订阅日期顺序,而非名称、原始上传日期或其他因素。这意味着任何100%新订阅的模组都没问题,因为它们无论如何都会排在列表底部,但其他任何改动都会干扰此过程。 如果你无法确定你的存档使用的是相同的模组顺序,请阅读此方法,但最终请跳至本部分底部并使用【替代方法】。 记录0 KB文件的编号(即“mod<此处为编号>.dat”中的编号)。 打开【地下城冒险】并进入【模组】菜单。从模组列表顶部开始(向下),从零开始计数已启用的模组(注意:是从零开始,不是从一开始!)。直到你找到你记下的数字。这意味着类似“mod5.dat”的文件会是列表中第6个(已启用的)模组。在Steam创意工坊中查找该模组,以获取工坊页面URL末尾的ID数字。如果你启用了Steam的URL地址栏会更方便(在Steam中,前往查看->设置->界面,勾选“在可用时显示Steam URL地址栏”)。要注意,工坊上的模组名称可能与游戏内的不完全相同,因此你可能需要灵活搜索。进入你的“C: Users <你的用户名> Documents Gaslamp Games Dungeons of Dredmor steam_workshop subscribed”文件夹,然后查找。找到与相关模组对应的dat文件。文件名的第一部分是创意工坊ID(即“<idishere>-<anotherlongnumber>.dat”……你需要关注的是“idishere”部分)。 复制该dat文件,并将其粘贴到你的存档文件夹中(与0 KB的“mod<numberhere>.dat”文件位于同一位置)。 将刚粘贴的dat文件重命名,使其与空的“mod<numberhere>.dat”文件名称一致。当然,你需要先移动或删除那个0字节的文件。

如果操作正确,你现在已经用新的副本替换了损坏的模组文件,你的存档应该可以正常使用了! 修复:替代方法 你的模组加载顺序与创建角色时不同?或者你可能在确定需要修复哪个模组时遇到了其他问题。无论哪种情况,你都可以采用类似的方法,只是需要更精确的排查。这些方法的目的是找出所有“mod<数字>.dat”格式的模组名称。 在进行任何操作之前,请务必阅读上述“常规方法”,了解所需的工具和部分操作流程。完成了吗?好的,继续! 替代方法一:在你的存档位置,右键点击并使用文本编辑器打开“savegame.dat”文件。你可能需要手动选择要使用的程序……记事本或Notepad++就足够了。 文件内部看起来会有很多奇怪的符号,但我们只需要关注文件的顶部。你应该会看到一些与你的角色存档文件夹相关的人类可读文本。在那之后,其余的可读文本将是你为该存档使用的所有模组的列表,并且按适当的顺序排列!格式可能有些奇怪,但这就是游戏期望的“mod<数字>.dat”文件的顺序。 将这些(记住要从0开始计数,而不是1!!)与你的“mod<数字>.dat”文件关联起来,并使用“常规方法”的第3-6步来替换任何损坏的文件。

如果此方法无效,请尝试“替代方法 #2”。注意:切勿手动修改“savegame.dat”文件,否则会立即损坏该文件,届时只能通过备份恢复。 替代方法 #2 如果第一种替代方法因故无效,可尝试以下步骤(这是较为繁琐但也是最后的希望): 1. 在存档位置找到首个“mod<数字>.dat”文件,用7zip打开(这些特定的.dat文件其实是重命名的.zip文件)。 2. 在7zip中进入“mod”文件夹。根据模组不同可能还有其他文件夹,但我们只需关注此文件夹。 3. 右键点击其中的“mod.xml”文件,从下拉菜单中选择“查看”。 4. 此时记事本应已打开。找到如下格式的行: <name text="某个模组名称"/> 记录下名称以及“mod<数字>.dat”文件名中对应的数字。 对文件夹中每个“mod<数字>.dat”文件重复此操作,跳过(但要记录模组编号)任何0 KB和/或无法打开(即损坏)的文件。 如果存在0 KB和/或无法打开的“mod<数字>.dat”文件: 将你记录的模组列表与整体模组列表进行对比,找出缺失的模组,然后用新副本替换该模组(按照上述“常规方法”的步骤3-6操作)。 如果不存在: 将所有模组都替换为新副本,以确保其中某个模组可能只是需要刷新。再次,对每个模组文件按照上述“常规方法”的第3-6步进行操作。

脚本:自动备份 你已经做好了所有设置来确保存档安全,但却厌倦了手动操作,对吧?这里有一个简单粗暴的解决方案。以下是一个脚本,你可以(也应该)在游戏运行时使用它,它会每隔X分钟自动备份你的存档。

功能说明:在每个游戏会话的首次运行时,它会立即备份整体存档文件夹中所有与存档相关的内容,包括每个角色所使用的模组副本!之后(即在同一会话中进行后续备份时),它将仅备份存档文件本身。原因在于:没有必要持续备份模组副本,因为它们不会发生变化……除非出现损坏情况。 请保留已知可用的“完整”备份版本,当模组文件损坏时,这些备份将包含你所需的内容。最小化备份仅用于存档文件本身损坏或丢失的情况。 配置方法:如果尚未安装7-zip,请下载并安装。这是用于打包存档文件夹的工具。将以下代码复制到文本文档中。建议使用类似记事本++的软件。 在脚本顶部修改以下变量以满足你的需求(代码中提供了示例格式): ZIPLOCATION = 7zip可执行文件的完整路径。如果你的7zip是标准安装且选择了64位版本,保持默认值可能即可。 ZIPQUALITY = 压缩级别。取值可以是0、1、3、5、7或9。0=存储(即无压缩),5=普通,9=极限等。选择你的电脑在不导致游戏卡顿的情况下能够处理的级别即可。最小化的存档非常非常小,因此建议使用0。 FOLDERTOBACKUP = 实际需要备份的文件夹的完整路径。在这儿不需要那些花里胡哨的城里话。 问:你的自动备份脚本太烂了! 答:某种程度上,是的。它能完成它该做的事。我曾为《泰拉瑞亚》做过一个非常非常深入的脚本变体(带有菜单、ANSI艺术效果等等!),但为了这个目的重新调整它实在太费功夫了。而且我目前对大型编程项目也没什么兴趣。确实有更多……“高效”(理解为:使用更少字符/行数)的方法来制作我这个脚本,但这只是个权宜之计。 问:指南里的【此处插入信息】有误/解释不清等! 答:告诉我,我会尽快修复! 问:没有英文,求指南。 答:用自动翻译工具,然后自求多福吧。 问:你的自动备份脚本对其他游戏有用吗? 答:有用!不过你需要进行一些调整。具体来说:【存档文件夹位置】。还有其他一些【地城英雄】特有的内容,但它们应该不会对其他方面造成太严重的影响。 问:你能帮忙为其他游戏修改脚本吗? 答:也许可以,但自己学会这样做才是能持续受益的能力。如果你能提供关于存档存储位置以及哪些文件需要或不需要的具体信息,那么我或许能帮你想办法解决。 问:嘿,你不就是那个曾参与过Gaslamp Games其他项目的人吗? 答:嘘。有时候过去的事就让它过去是有原因的。在这种情况下,你需要使用“我的文档”中的“Gaslamp Games Dungeons of Dredmor”文件夹。 TIMER = 脚本运行时进行备份的间隔时间(以分钟为单位)。默认是每15分钟一次。 将文件保存为“任意名称.bat”,重要的是“.bat”扩展名。备份文件将存储在此文件的同一位置,因此建议创建一个“DoD Backups”文件夹来存放所有文件。之后,你可以在桌面上创建该.bat文件的快捷方式。 会打开一个命令提示符窗口,首先会进行一次“完整”备份,然后开始运行后续“增量”备份的计时器。 完成第一次备份后,你应该仔细检查生成的文件,以确保一切正常运行。脚本:@SETLOCAL ENABLEDELAYEDEXPANSION @ECHO OFF :: ---- 你需要根据自己的设置修改的内容 ----- set "ZIPLOCATION=C: Program Files 7-Zip 7z.exe" set "ZIPQUALITY=0" set "FOLDERTOBACKUP=C: Users yourusernamehere Documents Gaslamp Games 地下城冒险 " set "TIMER=15" :: ---- --------------------------------------- ----- :: ------ 除非你清楚自己在做什么,否则不要修改以下任何内容 ------ :: ----- 说真的! ---- set "FIRSTTIME=TRUE" :: 启动程序! goto :DoTimer :DoBackup :: 获取时间 for /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') do ( if not "%%~F"=="" ( set /A SortDate = 10000 * %%F + 100 * %%D + %%A set YEAR=!SortDate:~0,4! set MON=!SortDate:~4,2! set DAY=!SortDate:~6,2!设置 /A SortTime = 1000000 + 10000 * %%B + 100 * %%C + %%E 设置 HOUR=!SortTime:~1,2! 设置 MIN=!SortTime:~3,2! 设置 SEC=!SortTime:~5,2! ) ) 如果 !FIRSTTIME!==TRUE ( 设置 "TEMPFILENAME=!YEAR!!MON!!DAY!-!HOUR!!MIN!!SEC!-IncludesModData.7z" "!ZIPLOCATION!" a -mx!ZIPQUALITY! "!TEMPFILENAME!" "!FOLDERTOBACKUP!" 设置 "FIRSTTIME=FALSE" -xr^^!steam_workshop -xr^^!mods ) 否则 ( 设置 "TEMPFILENAME=!YEAR!!MON!!DAY!-!HOUR!!MIN!!SEC!.7z" "!ZIPLOCATION!" a -mx!ZIPQUALITY! "!TEMPFILENAME!" "!FOLDERTOBACKUP!" -xr^^!steam_workshop -xr^^!mods -xr^^!mod*.dat ) 回显. 回显 ------------------------------- 回显 备份已创建: !TEMPFILENAME! 回显 ------------------------------- 回显. 回显 #################################################### 回显 ############ 最小化备份开始...问题:游戏一直提示缺少模组,这是怎么回事? 回答:那是因为你缺少相应的“mod<数字>.dat”文件。如果你正在从本指南中的自动备份脚本恢复备份,你需要从“完整”备份(即末尾附加了“IncludesModData”的那个备份)中获取这些文件。其他较小的备份仅包含存档信息,因此你必须将两者合并。 问:我的存档仍然损坏! 答:很遗憾听到这个消息。本指南并不能保证解决问题,但它应该有助于减轻存档损坏带来的打击,尤其是如果你在损坏发生前已按照所有步骤操作的话。 问:我甚至没有使用模组,存档还是损坏了? 答:不幸的是,对于“真正的”存档损坏,备份是目前唯一的补救方法。如果你没有任何备份,那么这次你可能就运气不佳了。 问:如果我有非创意工坊模组,该如何使用本指南? 答:这是我需要研究的内容,未来可能会添加到指南中。总体思路应该是相同的,但具体的分步细节显然会有所不同。Q:自动备份花费时间过长,并且/或者导致我的游戏卡顿! A:降低压缩质量。将其设置为“0”(零)将完全不进行压缩,这是速度最快、资源占用最少的方式。文件大小不会变小,但除非你有大量角色,否则备份文件不会太大。 Q:当我执行<此处插入非常具体的操作>时,游戏不断崩溃,是我的存档损坏了吗? A:有可能,但我更倾向于猜测这更可能是你正在使用的某个特定模组中存在bug。例外情况是,如果地牢的某个特定楼层损坏,而你一直试图进入该楼层。 Q:这是否适用于自动存档? A:是的,但你应该经常手动存档,以100%确保你的存档应用到了正确的角色上。问:我的自动存档出问题了,该如何修复? 答:你可以按照相同的一般步骤操作,但不是使用“<characternamehere>.dredmorsave”文件夹,而是使用“autosave.dredmorsave”文件夹。 问:本指南对解决崩溃问题有帮助吗? 答:没有,除非崩溃是由加载损坏的存档直接导致的。 问:这在Linux/MAC系统上有效吗? 答:不完全有效,但也有一定作用。除脚本外的一般操作和整体方法是适用的,但路径会有所不同。而脚本则需要一些调整才能使用。特别是我用于生成唯一文件名日期的方法依赖于特定的Windows系统功能,并且命令可能与终端语法并非完全匹配。不过,你应该可以很容易地对其进行调整……这事儿其实没那么复杂。 问:为什么游戏会出现这种情况? 答:谁知道呢。就算在最好的情况下,编程也是件棘手的事,何况这还是他们的第一款游戏。游戏里有很多动态部分和海量数据……一个小小的输入错误都可能导致整个游戏出问题。 问:你能帮我解决[此处插入其他类型的问题]吗? 答:我不能保证,但如果你能提供关于问题原因的具体信息(尤其是如果你知道是哪个模组导致的),我或许可以查看代码来了解情况。 问:你为什么用批处理编写脚本? 答:因为我喜欢批处理!它的功能虽然有限,但能实现一些非常奇特的效果,而且(最重要的是)它是强制开源的。像这种用途的编译脚本总让我心里发毛。