
一种解决《废品机械师》多人游戏中不同步问题的迂回方法 开发者已修复此问题 <3 我会将本指南留给未来的玩家,但开发者已经修复了该问题!:3 步骤1 - 设置 文件夹 在开始任何操作之前,我们需要找到文件! 保存文件 C: Users XX AppData Roaming Axolot Games Scrap Mechanic User User_XXXX Save Survival X代表你将拥有的个人数据 要访问appdata文件夹,按Windows + R,输入appdata,我想你可以轻松从那里导航 游戏文件 在游戏库中右键点击游戏 > 浏览本地文件。我们在此目录中感兴趣的文件: X: SteamLibrary steamapps common Scrap Mechanic Survival Scripts game 我们要找的是一个名为:survival_spawns.lua的脚本 【!!!创建此文件的备份!!!】工具:任何SQLite查看器,本指南中我使用DBeaver 第二步 - 重置计时计数器 接下来是较难的部分,这里会有一些截图,我的同行们可能看不懂上面的文字,但肯定能认出内容 备份你的存档文件

创建文件副本,以防我们搞砸。如上图所示,你可以随意操作,目前我们不介意。将数据库文件复制到你容易访问的位置。使用DBeaver打开存档。如前所述,你可以使用任何SQLite查看器,但以下图片以DBeaver为例。新建连接。

éćŠSQLite

选择你想要编辑的存档

编辑存档数值 现在我们已经打开了存档,只需修改一处内容。在游戏数据表中,将游戏刻钟(Gametick)更改为1。

按下Ctrl+S保存文件。将文件放回你的存档文件夹,这样我们就能启动游戏了。 先不要启动文件。 步骤3 - 奇妙时刻:3 现在我们解决了存档文件同步问题,它将能在多人游戏中正常运行且不会出现任何不同步的情况,但怪物波不会生成——让我们来修复这个问题! 编辑核心游戏Lua文件(非常安全) 此步骤将重置生物和怪物的生成计时器,不会移除你已有的生物,只是提醒一下。 现在我们需要编辑之前找到的Lua文件。请务必先备份该文件。把它复制到其他地方或重命名,随便你,只要做个副本就行。 如果你觉得麻烦,可以直接用这段内容替换你的脚本。如果你是自虐爱好者,可以用记事本打开;如果追求更好的体验,可以用Notepad++或其他文本编辑器。我推荐使用带有行计数器的编辑器,因为我会提供行号以便于导航。 我们需要复制下面这段代码(不包含开头和结尾的分隔线): for x = -64, 63 do for y = -48, 47 do -- 为当前坐标(x, y)创建单元格对象 local cell = { x = x, y = y, worldId = 1 } -- 如有必要,请添加合适的世界ID local cellKey = CellKey(cell.x, cell.y) local spawnDesc = SpawnDescriptions[tag] -- 验证生成描述是否存在 assert(spawnDesc, "该标签未附加生成描述!") -- 如果重生数据为nil则跳过处理 if spawnDesc.respawn == nil then goto continue end -- 获取当前游戏刻 local currentTick = sm.game.getCurrentTick() local loaded = { tick = currentTick } -- 如有必要,用实际加载逻辑替换此处 -- 确保currentTick有效 assert(spawnDesc.ticksBetweenRespawns, "spawnDesc中缺少ticksBetweenRespawns!") -- 在存储中保存生成状态 sm.storage.save({ spawnDesc.channel, cell.worldId, cellKey }, { tick = currentTick, storage = storage }) print('cell ', x, y, ' 已重新加载') ::continue:: end end -------------------------------------------------------------- 我们将其粘贴在两个位置(虽然有些多余,但能确保操作完成): 第477行


第540行:从重生函数中删除与上述截图不符的行。 现在保存你的文件。 步骤4 - 令人不安的时刻 :O 执行脚本:现在我们已经完成了这些更改,可以启动游戏了。 这一步是最糟糕的,请耐心忍受。 在启动存档前,先声明一下:我的脚本会导致游戏崩溃。这是预期情况,接受就好。 启动已编辑的存档:现在我们需要启动刚刚编辑的存档,什么都不用做。等待游戏加载完成——你会看到正常的画面,但由于我们注入的循环不断运行,游戏会冻结。当出现这种情况时,关闭游戏即可。相信我,脚本已经完成了它的工作。第五步 - 清理 恢复文件 现在我们已经让游戏无法运行了,接下来进行修复。我们只需移除已编辑的脚本(即重生脚本),并用原始文件替换它。这样文件就修复完成,我们应该能正常进行多人游戏了。 校验和问题 如果在其他玩家加入游戏时,出现文件校验和错误提示,只需重新安装游戏即可。 无论如何,建议重新安装游戏以确保万无一失。 为什么要这么做? 由于某些原因,游戏在运行约7小时后,多人模式会变得无法游玩。这可能是因为高滴答计数器达到了32位整数的上限(这只是一个大胆的猜测)。因此我们需要重置它。然而,生成率被硬编码在游戏中,并以一种我懒得解码的格式存储在SQL数据库中。由于代码的处理方式,任何之前以高tick值被搜刮过的区域,若加载时带有低tick值,都会导致该区域“损坏”。游戏使用字典来存储所有已加载的区域,负责此功能的代码会抛出异常,且不会将我们的区域添加到字典中。这个字典被代码的其他部分使用,主要是波次生成计算。因此,我们需要自行修复此问题,所以脚本会重置地图上每个区域的已保存tick值以确保安全。 已知问题: 我的天数计数器卡在0了。是的,这就是问题所在。或许某个没被这款游戏搞得心力交瘁的人能解决这个问题
2026-02-15 07:00:06 发布在
废品机械师
说点好听的...
收藏
0
0
