Valheim専用サーバのセーブデータについて
Valheimの専用サーバを運用する上で、どこのディレクトリに、どのようなファイルとしてセーブデータが保存されるのか、いつのタイミングで保存されるのか、何が起きると保存が正しく行われずサーバのセーブデータがロールバックしてしまうのか、それを知っておくと安心してサーバの運用ができます。
ちなみに専用サーバを立てずとも、普通にプレイヤーがホストとして起動してゲームを開始した時も、挙動としては同じことになります。
ここで取り上げるセーブデータというのは、ワールドのセーブデータです。Valheimにはキャラクターとワールドのセーブデータの2種類があり分離しています。
キャラクターのセーブデータは、キャラ名、容姿、スキルレベルやかばんの中身などが保存され、ワールドのセーブデータはマップ自体、どこの木を切って、どこに家を立てたか、というようなマップの状況すべてが保存されています。
キャラクターのセーブデータは、各プレイヤーのローカルPCに保存されますので、サーバの管理者が気にするのはワールドのセーブデータのみということになります。
セーブデータの保存場所
セーブデータは、この配下に生成されます。
# Linux ~/.config/unity3d/IronGate/Valheim/worlds/
# Windows C:\Users\ユーザ名\AppData\LocalLow\IronGate\Valheim\worlds\
セーブデータは、設定ファイルに記載した gameworld
の名前でそれぞれファイルが生成されます。例えば gameworld=test001
とした場合は、下記のようなファイルとなります。
タイミングによっては *.new
というファイルが存在する場合もあります。
test001.db test001.db.old test001.fwl test001.fwl.old
このファイルさえバックアップしておけば、何が起きても大丈夫。
セーブデータの切替方法
そのサーバが使うセーブデータは、 gameworld=
で指定したものが使われます。そして、セーブデータが依存しているファイルは ~/.config/unity3d/IronGate/Valheim/worlds
配下の *.db
と *.fwl
だけです。
そのため、簡単にセーブデータを切り替える事ができます。
例えば、下記のような設定でサーバを起動し、ゲームを進めたとします。
servername="testserver" serverpassword="testpass" gameworld="test001"
そのあと、このサーバをstopして、 gameworld="test002"
と変更して立ち上げると、サーバ名は同じままで中身はまっさらな状態で立ち上がります。
servername="testserver" serverpassword="testpass" gameworld="test002"
そしてこれをまた、 gameworld="test001"
に戻してやると、最初のtest001で進めた状態のセーブを使う事ができます。
WindowsのゲームPCで進めたセーブデータを、専用サーバに移行する方法
上記のことを知っていれば、ゲームPCで進めていたセーブデータを専用サーバに移行して動かすことも簡単です。
Windowsの C:\Users\ユーザ名\AppData\LocalLow\IronGate\Valheim\worlds\
配下にあるファイルをサーバに転送し、 ~/.config/unity3d/IronGate/Valheim/worlds/
配下に配置します。
gameworld=
を転送したファイル名と同じにして、サーバを起動するだけです。
セーブデータが保存されるタイミング
まず第一に、ゲームを終了したタイミングでセーブが走ります。
専用サーバを使わずに普通に遊んでいる場合、それはホストとなったプレイヤーがゲームを終了したタイミングです。
専用サーバの場合、Valheimサーバをstopしたタイミングです。とはいえ、専用サーバの場合そもそも24時間稼働させる事が主な目的である事が多いので、基本的にサーバをstopで終了させることも少ないでしょう。
次に、数十分間隔での自動セーブも走っています。
専用サーバの場合は、前述の通り終了したタイミングでのセーブというのはあまり起こりませんから、基本的にはこれ頼りです。
もう一つは、コンソールを使った save
コマンド実行による手動セーブもあります。
F5キーをクリックするとコンソールが表示され、 save
コマンドを実行するとそのタイミングでセーブがファイルに吐き出されます。
セーブがロールバックするパターン
上記の通り、セーブデータは常に最新の状態が書き込まれているわけではありません。最新の状態はメモリ上にしか存在しないため、サーバやゲームが異常終了した場合、数十分間隔でのオートセーブで最後に保存したタイミングまで、データは巻き戻ります。