公式サイトや以下の記事の内容を参考にしています。
この記事の想定読者は、最初はマルチプレイ(招待コード)で遊んでいたが、人数が増えた、24時間遊びたいなどの理由で専用サーバー(dedicated server)に移行したい方です。
サーバーの設定から、データ移行まで扱います。
自宅サーバーを想定していますが、VPSなどでも動作するはずです。
VPSで作る方はこちらから。
v0.1.2.0(2024/01/21現在)で作成しています。
なお、Linuxのインストール方法についてはこの記事では解説しません。
steam用のユーザーを作成
SteamCMDを安全に実行するために、steamというアカウントを新しく作成し、ユーザーを切り替えます。
$ sudo useradd -m steam
$ sudo passwd steam
$ su steam
SteamCMDのインストール
SteamCMDに必要なパッケージと、SteamCMDをインストールします。
なお、以下に示すコードはubuntuでの例です。
その他のディストリビューションをお使いの方ははこちらの方法でインストールしてください。
$ sudo add-apt-repository multiverse
$ sudo dpkg --add-architecture i386
$ sudo apt update
$ sudo apt install steamcmd
ディレクトリの作成
管理しやすくするためにパルワールド用のディレクトリを作成します。
$ mkdir ~/palworld/
専用サーバーのインストール
専用サーバーをディレクトリを指定してインストールします。
$ steamcmd
steam> force_install_dir ~/palworld/
steam> login anonymous
steam> app_update 2394010 validate
steam> exit
サーバーの起動確認
インストールディレクトリに移動し、シェルスクリプトを実行すると、サーバーが起動します。
$ cd ~/palworld/
$ ./PalServer.sh
もし下記のエラーメッセージが表示された場合
.steam/sdk64/steamclient.so: cannot open shared object file: No such file or directory
次の手順を実行してください。
$ mkdir -p ~/.steam/sdk64/
$ ln -s ~/palworld/linux64/steamclient.so ~/.steam/sdk64/
自動起動の設定
サーバーの起動と同時に実行されるように、systemdに登録します。
$ sudo nano /etc/systemd/palworld-server.service
[Unit]
Description=Palworld Dedicated Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
ExecStartPre=/home/steam/steamcmd/steamcmd.sh +force_install_dir /home/steam/palworld +login anonymous +app_update 2394010 validate +quit
ExecStart=/home/steam/palworld/PalServer.sh port=8211 players=32 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
LimitNOFILE=100000
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
Restart=always
User=steam
Group=steam
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target
以上の内容を記載して、Ctrl+S(保存)、Ctrl+X(終了)を押してください。ポート番号やユーザー名、最大プレイヤー人数などは適宜書き換えてください。専用サーバーは初期設定でUDP 8211を使用します。
ExecStartPreの行で起動前に専用サーバーを更新しています。
デーモンをリロードし、自動で起動するように設定します。先程作ったファイルを編集するたびにデーモンのリロードが必要です。
$ sudo systemctl daemon-reload
$ sudo systemctl enable palworld-server.service
サーバーの起動
上から順番に、起動、状態確認、停止のコマンドです。
$ sudo systemctl start palworld-server.service
$ systemctl status palworld-server.service
$ sudo systemctl stop palworld-server.service
ファイアウォールの設定
例としてufwの設定を行います。専用サーバーは初期設定でUDP 8211を使用します。
$ sudo ufw enable
$ sudo ufw allow 8211
$ sudo ufw reload
ポート開放の設定
お使いのルーターでポート開放をしてください。専用サーバーは初期設定でUDP 8211を使用します。
ルーターによっては設定の名称がポートマッピングやポートフォワーディング、静的NATなどの場合もあります。
サーバーへ接続
ゲームクライアントを起動し、「マルチプレイに参加する(専用サーバー)」を選択します。
下部の入力欄に『IPアドレス:ポート番号』を入れ、「接続」を押します。
自宅内から接続する場合はサーバーのローカルIPアドレス、自宅外から接続する場合はグローバルIPアドレスを入力してください。
サーバーの設定
有志の方が設定ファイルジェネレーターを作ってくれています。
これを使って生成した設定値を、以下のファイルに保存してください。
~/palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
セーブデータの引き継ぎ(サーバー側)
元々招待コードを作っていた人のパソコンにデータが保存されています。
C:\Users\{ユーザー名}\AppData\Local\Pal\Saved\SaveGames\{ユーザーID}\{ワールドID}\
「Players」「Level.sav」「LevelMeta.sav」の3つのファイルを下記のディレクトリにコピーしてください。
~/palworld/Pal/Saved/SaveGames/0/{ワールドID}/
ファイルのコピーにはWinSCPなどを使うと便利です。
なお、v0.1.2.0(2023/01/21現在)の時点では、元々招待コードを作っていた人のデータは引き継げない(?)ので、事前にチェストにアイテムを移動させたり、パルを別の人に譲渡しておいてください。
セーブデータの引き継ぎ(ローカル側)
マルチプレイに参加していた人のパソコンにも先程の場所にローカルデータが保存されています。
C:\Users\{ユーザー名}\AppData\Local\Pal\Saved\SaveGames\{ユーザーID}\{ワールドID}\
ワールドIDはサーバー側の人と共通です。
専用サーバーに一度参加したあと、マルチプレイのワールドIDのフォルダーにある「LocalData.sav」を専用サーバーのワールドIDのフォルダーにコピーしてください。
マルチプレイのホストだった人も「LocalData.sav」をコピーしてください。
コメント
サーバーを立てる予定で、招待コードを作成していた立場です。
記事の内容的には招待コード側の人はLocalData.savを移さないようですが、LocalData.savを入れるのではうまく動かないってことでしょうか?
こちらの記載漏れです。
マルチプレイのホストの人もLocalData.savをコピーしてください。
「v0.1.2.0(2023/01/21現在)の時点では、元々招待コードを作っていた人のデータは引き継げない」ってあったけどマルチプレイのホストの人もLocalData.savをコピーすれば引き継げるようになるのかな?
マルチプレイのホストの人もLocalData.savをコピーしてください。
ただし、装備やパルなどは引き継げず、チュートリアルの進行やマップなどが引き継げます。
装備やパルなどは引き継げず、チュートリアルの進行やマップなどが引き継げるとのことなのですが、レベルや振り分けたステータス情報なども引き継がれるのでしょうか。
単純にパルを含めた「所持品」のデータが無くなるという感じですか?
レベルや振り分けたステータス情報なども消えてしまいます。所持品のデータもなくなります。