修复存档错误 缓冲区溢出 [B42.13]

0 点赞
Project Zomboid
转载

如果安装了许多模组,你可能会在服务器或单人游戏中遇到存档错误(角色回档)。 问题核心 该问题是保存角色数据时出现的缓冲区溢出(BufferOverflowException)。当尝试将字符串写入大小有限的ByteBuffer时,WriteStringUTF方法会发生错误。 当角色的物品栏中包含过多物品(尤其是带有大量元数据的物品,如文献)、许多已学习的配方、已阅读的日记和书籍时,待保存数据的总大小会超过分配的64KB缓冲区。对于添加了许多制作配方的模组的游戏而言,这一限制非常严格。 解决方法 增大缓冲区大小以修复服务器上的角色存档错误: 1. 前往游戏文件夹并打开projectzomboid。使用WinRAR(或任何压缩软件)打开jar文件。 *对于专用服务器,路径为Project Zomboid Dedicated Server java projectzomboid.jar 2. 找到ServerPlayerDB$NetworkCharacterData.class文件。它位于zombie savefile中。 3. 从压缩包中提取此文件,并使用Recaf程序打开——这是一款字节码编辑器,无需进行反编译等复杂操作即可编辑文件。你可以从GitHub下载Recaf,运行它需要Java(任何版本)。 4. 在左侧工作区部分双击ServerPlayerDB$NetworkCharacterData(如果没有显示,说明你未完成步骤3)。右键点击ServerPlayerDB$NetworkCharacterData,然后点击“以汇编器编辑类”。 5.查找以下代码行: ldc 65536(此处数字可能不同) invokestatic java/nio/ByteBuffer.allocate (I)Ljava/nio/ByteBuffer; 6. 将 ldc 65536(64KB)更改为你自己的值,例如 1048576(1MB)。修改后应如下所示: ldc 1048576 invokestatic java/nio/ByteBuffer.allocate (I)Ljava/nio/ByteBuffer; 7. 按 CTRL+S 保存更改。 8. 再次在工作区左侧右键点击 ServerPlayerDB$NetworkCharacterData,并将保存的文件导出到任意文件夹。 9. 用修改后的文件替换原始文件。 你很棒! *你无需在客户端执行这些操作,只需在服务器端进行即可。