以前、AWSでPALWORLD用のサーバーを建てる方法を紹介しました。本記事ではPALWORLDサーバー内の設定を説明します。
Qiita: 最大32人 パルワールド Linux 専用サーバの建て方 (AlmaLinux)にわかりやすくまとめられていますが、Amazon Linux 2に設定する場合だと若干コマンドが違ったりしたのでパルワールドサーバーを設定した方法を公開します。
目次
サーバーへ接続
SSMセッションマネージャを使用して接続します。
$ aws ssm start-session --target <EC2インスタンスのID>
SteamCMDのインストール
Valve Developer Comunityを参考に設定していきます。
以下コマンドで必要なパッケージのインストールをします。
$ sudo yum install glibc.i686 libstdc++.i686
続いてSteamユーザの作成をしてパスワードを変更します。
$ sudo useradd -m steam
$ sudo passwd steam
rootユーザのままsteamcmdを起動することはセキュリティリスクがあるのでご注意ください。この手順にあるようにrootとは別のユーザで実行するようにしましょう。
Steamユーザにスイッチ します。
$ sudo -u steam -s
ホームディレクトリに移動して、作業ディレクトリを作成します。
$ cd /home/steam
$ mkdir ~/Steam && cd ~/Steam
以下コマンドでLinux用のSteamCMDをダウンロードします。
$ curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
インストール用のスクリプトを実行します。
$ ./steamcmd.sh
プロンプトにSteam>
と表示されれば成功です。
exitコマンドで一旦抜けておきます。
> exit
パルワールドサーバーのダウンロードと起動
ここからはパルワールドのテックガイドを参考に設定します。
下記コマンドで専用サーバーをダウンロードします。
/home/steam/Steam/steamcmd.sh +login anonymous +app_update 2394010 validate +quit
ダウンロードしたディレクトリに移動します。通常は以下にダウンロードされています。
cd ~/Steam/steamapps/common/PalServer
サーバーを起動します。
./PalServer.sh
steamclient.soに関するエラーが表示された場合
サーバー起動のコマンドを試してみると以下のエラーが表示されました。
/home/steam/.steam/sdk64/steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Sys_LoadModule failed to load: /home/steam/.steam/sdk64/steamclient.so
パルワールドのテックガイドにも次の通り案内があります。
この手順をサーバー運用後に実施するとキャラクター再作成からゲームがスタートします。 すでにプレイ中のサーバーでは実施しないことをおすすめします。
https://tech.palworldgame.com/dedicated-server-guide#windows-steamcmd
以下のコマンドで修正できるようですが、すでにプレイ中のサーバーで実施しないようご注意ください。
$ mkdir -p ~/.steam/sdk64/
$ /home/steam/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit
$ cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/
このあとサーバー起動するとエラーは出ていますが、問題なく動作しました。
$ ./PalServer.sh
Shutdown handler: initalize.
- Existing per-process limit (soft=65535, hard=65535) is enough for us (need only 65535)
Increasing per-process limit of core file size to infinity.
sh: xdg-user-dir: command not found
dlopen failed trying to load:
steamclient.so
with error:
steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/steam/.steam/sdk64/steamclient.so' OK. (First tried local 'steamclient.so')
CAppInfoCacheReadFromDiskThread took 2 milliseconds to initialize
dlmopen steamservice.so failed: steamservice.so: cannot open shared object file: No such file or directory
Setting breakpad minidump AppID = 2394010
[S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface STEAMAPPS_INTERFACE_VERSION008 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamNetworkingUtils004 before SteamAPI_Init succeeded.
ポートは以下の記事でセキュリティグループで解放済みですので、このままPALWORLDサーバーに接続可能です。
PALWORLDから接続してみよう
設定したサーバーに対して、PALWORLDからアクセスしてみます。
サーバーの グローバルIP(EC2のパブリックIP):8211
を入力して、接続します!
正常に動作していれば接続できるはずです!
もし接続できない場合は接続先のIPアドレスが正しいか、また、サーバー上でなにかエラーが出ていないかを確認します。
OS起動時にパルワールドサーバーが自動起動するようにする
steamユーザである場合は一度exitして、rootユーザになっておきます。
viでサービス定義ファイルを作成します。
sudo vi /etc/systemd/system/palworld-server.service
ファイルの中身は以下の内容を設定します。
以下をコピーします。vi上でp
キーを押してペーストし、下記を貼り付け、:wq
と入力して書き込んで閉じることができます。
[Unit]
Description=Palworl Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
ExecStart=/home/palworld/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
デーモンをリロード
sudo systemctl daemon-reload
自動起動の設定
sudo systemctl enable palworld-server.service
サービスの起動
sudo systemctl start palworld-server.service
サービス状態の確認
sh-4.2$ sudo systemctl status palworld-server.service
● palworld-server.service - Palworl Server
Loaded: loaded (/etc/systemd/system/palworld-server.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2024-01-24 17:44:31 UTC; 16s ago
Main PID: 1623 (PalServer.sh)
CGroup: /system.slice/palworld-server.service
├─1623 /bin/sh /home/steam/Steam/steamapps/common/PalServer/PalServer.sh port=8211 players=32 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
└─1631 /home/steam/Steam/steamapps/common/PalServer/Pal/Binaries/Linux/PalServer-Linux-Test Pal port=8211 players=32 -useperfthreads -NoAsyncLoadingThrea...
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: steamclient.so
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: with error:
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: steamclient.so: cannot open shared object file: No such file or directory
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: [S_API] SteamAPI_Init(): Loaded '/home/steam/.steam/sdk64/steamclient.so' OK. ...t.so')
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: CAppInfoCacheReadFromDiskThread took 2 milliseconds to initialize
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: Setting breakpad minidump AppID = 2394010
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: [S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init...eeded.
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: [S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_I...eeded.
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: [S_API FAIL] Tried to access Steam interface STEAMAPPS_INTERFACE_VERSION008 be...eeded.
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: [S_API FAIL] Tried to access Steam interface SteamNetworkingUtils004 before St...eeded.
Hint: Some lines were ellipsized, use -l to show in full.
active (running) となっていますね!起動できたようです
Qiita: 最大32人 パルワールド Linux 専用サーバの建て方 (AlmaLinux)にはこの他自動アップデートの設定や、セーブデータのバックアップ方法など、有益な情報がまとまっていますのでぜひご一読ください!
ゲームバランスを調整する
ここからはパルワールドテックガイドにある内容を今回の記事向けに説明します。
Steamユーザにスイッチ します。
$ sudo -u steam -s
今回はLinuxを使っていますので、SteamCMDの設定ファイルは以下にあります。サーバーを一度起動しないと生成されない点に注意です。
~/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
デフォルト設定は以下にあります。
~/Steam/steamapps/common/PalServer/DefaultPalWorldSettings.ini
パルワールドのテックガイドにはデフォルト設定を設定ファイルにコピーしたのち、必要な設定のみ変更することをおすすめされていますので、従います。デフォルト設定に戻したい場合はコピーして上書きします。
$ cp -ip ~/Steam/steamapps/common/PalServer/DefaultPalWorldSettings.ini ~/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
viエディタ等でコピー先のファイルの内容を変更します。
$ vi ~/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
ファイル内に設定値できる値の説明は以下のとおりです。
パラメータ | 説明 |
---|---|
Difficulty | ゲームの難易度 |
DayTimeSpeedRate | 昼の経過速度 |
NightTimeSpeedRate | 夜の経過速度 |
ExpRate | 経験値の入手倍率 |
PalCaptureRate | 捕獲確率の倍率 |
PalSpawnNumRate | パル出現倍率 ※パフォーマンスに影響します |
PalDamageRateAttack | パルの与えるダメージ倍率 |
PalDamageRateDefense | パルの受けるダメージ倍率 |
PlayerDamageRateAttack | プレイヤーの与えるダメージ倍率 |
PlayerDamageRateDefense | プレイヤーの受けるダメージ倍率 |
PlayerStomachDecreaceRate | プレイヤーの満腹度減少倍率 |
PlayerStaminaDecreaceRate | プレイヤーのスタミナ減少倍率 |
PlayerAutoHPRegeneRate | プレイヤーのHP自然回復倍率 |
PlayerAutoHpRegeneRateInSleep | プレイヤーの睡眠時HP回復倍率 |
PalStomachDecreaceRate | パルの満腹度現象倍率 |
PalStaminaDecreaceRate | パルのスタミナ減少倍率 |
PalAutoHPRegeneRate | パルのHP自然回復倍率 |
PalAutoHpRegeneRateInSleep | パルの睡眠時HP回復倍率(パルボックス内) |
BuildObjectDamageRate | 建築物に対するダメージ倍率 |
BuildObjectDeteriorationDamageRate | 建築物の劣化速度倍率 |
CollectionDropRate | 採集アイテムの入手量倍率 |
CollectionObjectHpRate | 採集オブジェクトのHP倍率 |
CollectionObjectRespawnSpeedRate | 採集オブジェクトのリスポーン間隔 |
EnemyDropItemRate | ドロップアイテム量の倍率 |
DeathPenalty | デスペナルティ None : ロスト無し, Item : 装備品以外のアイテム, ItemAndEquipment : すべての装備品とアイテム, All : 全ての装備品と装備品と手持ちパル |
GuildPlayerMaxNum | ギルドの最大人数 |
PalEggDefaultHatchingTime | キョダイタマゴの孵化にかかる時間(h) |
ServerPlayerMaxNum | サーバーに参加できる最大人数 |
ServerName | サーバー名 |
ServerDescription | サーバー説明 |
AdminPassword | AdminPassword |
ServerPassword | サーバーパスワード |
PublicPort | 外部公開ポート |
PublicIP | 外部公開IP |
RCONEnabled | RCONの有効化 |
RCONPort | RCONで使用するポート |
将来のアップデート用に予約されたパラメータ(現時点では未実装)も存在しています。
サーバーを再起動します。
sudo systemctl restart palworld-server.service
再度接続して、設定が反映されたことを確認します。
まとめ
本記事ではAmazon Linux 2をパルワールドサーバーとして設定する方法を説明しました。
個人的には意外と簡単にインストールできる印象でした。
専用サーバーでは32人の大人数でプレイできたり、ゲーム設定を好みで調整できるなど、メリットがありますのでぜひサーバー構築にチャレンジしてみてください!