省流:這篇文章主要面向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小時幹活。