《河洛群侠传》新版存档修改
两只土狼
2020年08月13日 16:38

前置需求

  • 能够找到游戏目录,以及目录下的特定文件

  • 安装dnSpy,并且知道如何使用dnSpy打开、搜索、编辑和保存DLL文件

  • 了解JSON文件的基本格式

  • 会一点英文,能够推测与游戏数据的对应关系

  • 能够编辑超长单行文本

  • (可选)掌握至少一种备份文件的方法

  • (可选)了解赋值、字符串等基本的编程概念

  • (可选)使用比记事本更好的文本编辑器

简要步骤

  1. 备份并修改Assembly-CSharp.dll 打开 游戏目录/J2_Data/Managed 备份Assembly-CSharp.dll,然后用dnSpy打开 编辑-搜索程序集(快捷键 Ctrl + Shift + K ),搜索 SaveDataVersion ,将 Assembly-CSharp.dll/Heluo/GameConfig 中这一变量的值改为 "TitleSave&#​34; 保存并覆盖原Assembly-CSharp.dll

  2. 备份并新建游戏存档 打开 游戏目录/SaveData 备份目标存档 打开游戏,读取目标存档,然后保存

  3. 编辑存档 找到刚刚新建的存档,用你喜欢的文本编辑器打开 最后一行就是JSON格式的游戏数据

详细说明

修改存档的思路

【可行性分析】

首先,我从网上了解到,旧存档是以文本格式存储,没有加密。 然后,我看到了一个https://tieba.baidu.com/p/6301090060的贴子,楼主的思路就是修改Assembly-CSharp.dll。

因此我判断,修改Assembly-CSharp.dll,让存档仍然以文本格式存储,是可行的。

【具体思路】

上面的贴子提到,在System.setting文件里添加  ,故尝试搜索TextSave,无果。

我们的目的很明确,与存档有关,大概率会包含关键词save,再次搜索。搜索结果中,Heluo频繁出现,加上这是开发商“河洛工作室”的拼音,虽然仍然不知道想找的东西在哪里,但是肯定在以此开头的命名空间中。

浏览以“Heluo”开头的命名空间,感觉  和  的可能性比较大。

先看  ,重复“寻找感兴趣的命名-浏览内容-判断是否为目标”的过程,找到 

很遗憾,在这里没有找到有关存档格式的代码。但是,注意到字符串型变量  ,显然,这个变量是存档路径,只有在最后写存档的时候调用。顺着这个变量,找到另一个有关存档的方法 

一路向上追溯,最终找到  ,内容大致如下:

至今有三个版本的存档方法

易得,将  的值改为  ,即可获得以UTF-8编码的文本存档文件。

使文本存档pretty的Python脚本

文本存档的最后一行JSON太长了,在可视化工具中直接处理很困难。

我写了一个Python3脚本,给JSON加入缩进、空格和换行,以提高可读性。这不会影响游戏读取存档。

(没有测试,不过理论上Python 2.7也可以)

请用自己顺手的工具来做这件事,我是因为对Python熟悉,所以用这个。稍后我会上传脚本。

【流程设计】

  1. 读取存档文件

  2. 如果不超过10行,就继续;否则,结束

  3. 备份原存档,压缩为同名ZIP文件

  4. 按照JSON格式,解析最后一行

  5. 加上缩进、空格和换行,写入存档