省流:这篇文章主要面向linux系统自部署帕鲁服务、发生坏档问题,有一定linux指令基础的盒友们
事情的来源是官方更新1.40版本,我升级ubuntu上部署的服务端,和朋友重进发现工会还在,人物却需要重建,差点想弃坑,但在摸索了下救回了一点,所以写这篇也希望给大家一点借鉴, 防止大家的心血因为官方的bug付之一炬。
最近幻兽帕鲁的爆火,很多想和朋友一起玩,却官方服务器不稳定、外挂,自建主但要一直开机的限制,很多云厂商对此推出了对应的私服套餐,也提供了很多一键部署解决方案,看情况开1-3个月确实挺实惠的(虽然我上学时已经把阿里云、腾讯云、华为云都白嫖过了)。上面一键部署大部分是windows系统的,但我逛黑盒这么多年,发现计算机或相关专业的学生很多,无论是看上linux系统占用内存比windows小很多,还是想锻炼下动手能力,还是有部分使用linux部署帕鲁服务的玩家的。
部署的部分就不多说了,网上的攻略可太多了,主要还是存档的问题,我使用的是ubuntu22,没有使用docker,想用docker的也可以参考pal-server-docker。
首先我们看下存档结构 在自己安装steam cmd的文件夹相对路径下 Steam/steamapps/common/PalServer/Pal/Saved/SaveGames/0/
存档路径
可能会有多个世界,目前服务服务启动的世界名参考下图相对路径下
如果是更新导致多世界的问题, 大家可以参考这个fix-palworld-server-update-wiping-player-progress来解决
可惜上面链接并没解决我的问题,我进一步排查发现是Guid不一致导致的,可以通过将新建人物Guid写到旧存档,再将旧存档替换新存档即可(这样可以回复你的装备、帕鲁们、解锁的科技,但是等级、科技点、抓捕强化回不来,想要回来需要修改Level.sav,这文件有些字段我还没摸清,比较复杂),但我孵的4金宠都回来了。下面大致说一下改法。
先看下当前世界存档目录结构,这边文章主要讲改玩家存档,可以看下面是我和我小伙伴们的存档, 可能是SteamID哈希的名字吧,但名字问题不大。
帕鲁世界存档结构
很重要的一点,恢复需要之前的备份存档!linux服务器这边是没自动的备份存档的!大家一定要养成更新前手动备份文件的习惯,我是写了个脚本每小时滚动保存存档,清理较久的存档(一些云服务器磁盘有限,防止磁盘满)。
备份存档里面玩家存档的名字和新版的文件名一样,所以就是就是要将新存档的Guid覆盖同名旧存档的Guid。存档是二进制,需要先将他转为json格式,推荐这个palworld-save-tools
将新旧存档都转换为json文件
vim打开新存档json,搜索InstanceId 找到如下图的value,将这个value复制,找到老存档的相同字段替换即可
将新存档的这个值覆盖老存档
修改完老存档,再用上面的工具将json转回.sav,再将转好的老存档覆盖新存档即可。
老存档转回,覆盖新存档
大功告成,帕鲁们都回来了,等级、科技点、抓捕强化其实也可以改,但Level.sav一些字段我还没摸太清,就不误导大家了。
额外说下,pal服务器运行内存泄露,内存泄漏可以通过定期重启,如果挂了ssd的话,可以开swap的,比如我就开了50G的,运行一到二天完全没问题,写脚本定期重启就行,主要还是帕鲁服务端没怎么优化,运行在单核之上,人多单核主频不高容易掉帧
最后,每天工作比较晚,10-11点才下班,当时下班比较晚,凌晨修的这个问题,我朋友说你比帕鲁还帕鲁啊,玩个游戏还得自己解决运维,这不把服务器起起来让帕鲁们24小时干活。