njo

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で進めていたセーブデータを専用サーバに移行して動かすことも簡単です。
WindowsC:\Users\ユーザ名\AppData\LocalLow\IronGate\Valheim\worlds\ 配下にあるファイルをサーバに転送し、 ~/.config/unity3d/IronGate/Valheim/worlds/ 配下に配置します。
gameworld= を転送したファイル名と同じにして、サーバを起動するだけです。

セーブデータが保存されるタイミング

まず第一に、ゲームを終了したタイミングでセーブが走ります。
専用サーバを使わずに普通に遊んでいる場合、それはホストとなったプレイヤーがゲームを終了したタイミングです。
専用サーバの場合、Valheimサーバをstopしたタイミングです。とはいえ、専用サーバの場合そもそも24時間稼働させる事が主な目的である事が多いので、基本的にサーバをstopで終了させることも少ないでしょう。

次に、数十分間隔での自動セーブも走っています。
専用サーバの場合は、前述の通り終了したタイミングでのセーブというのはあまり起こりませんから、基本的にはこれ頼りです。

もう一つは、コンソールを使った save コマンド実行による手動セーブもあります。
F5キーをクリックするとコンソールが表示され、 save コマンドを実行するとそのタイミングでセーブがファイルに吐き出されます。

セーブがロールバックするパターン

上記の通り、セーブデータは常に最新の状態が書き込まれているわけではありません。最新の状態はメモリ上にしか存在しないため、サーバやゲームが異常終了した場合、数十分間隔でのオートセーブで最後に保存したタイミングまで、データは巻き戻ります。