パルワールドの初期サーバー構築・運用経験談
こんにちは、プログラマのTIです。
巷で大流行していた「パルワールド」について、「お前エンジニアだから立てれるだろ?」という軽いノリで運用させられております。
今回は、そうした経緯で運用させられているしている専用サーバーについて私見ながら一説書きたいと思います!
なお、私はインフラ系のエンジニアではないので、あまり専門的すぎることは分かりません。
なぜサーバーを立てるのか
パルワールドの遊び方は主に4つあります。
- 自身のマシン上でプレイする
- 公式サーバーでマルチプレイする
- コミュニティサーバーでマルチプレイする
- サーバーを立ててマルチプレイする
自身のマシン上でプレイする
いわゆるソロプレイです。
一番快適にプレイできます。
ログアウトしている間、世界の時間は止まります(生産活動は行われません)
4人までマルチプレイが可能です。
ただし、ホストがログインしていないと他の参加者は参加できません。
公式サーバーでマルチプレイする/コミュニティサーバーでマルチプレイする
公式が立てているサーバーでプレイする、もしくは有志が立てているサーバーでプレイするイメージです。
やったことないですが、ラグが発生し、瞬間的な巻き戻りで事故ったりします。
ログアウトしている間、世界の時間は進みます(生産活動が行われます)
サーバー設定によりますが、32人までマルチプレイが可能です。
ホストという概念がないので、誰でもいつでも入れます。
見知らぬ人とやる感じになります。
サーバーを立ててマルチプレイする
コミュニティサーバーを自身で運営するスタイルです。
自身が立てれるので、パスワードをかけてアクセスを制限できます。
基本的には2, 3と同じことができますが、それに加えて、管理者コマンドでinGameでコマンド送信できたり設定を自由にいじれます。
仲間内だけでやりたい場合はこの方法がベストとなります。
要件
- 同時接続人数は現状で4人程度(今後8人くらいまで視野)
- パルワールドは今後も大規模コンテンツが実装される予定
- 飽きたらやらなくなる
サーバー選定
やってみた経験上、ポイントは以下となります。
- 搭載メモリ数
- コンソールの自由度
- 拡張性
- OS
搭載メモリ
本記事で一番のポイントです。
巷では8GBとかで運用されている記事がありますが、v0.1.5.0現在、 8GBでは同接2人でもメモリ100%食い潰して落ちる可能性があります。
初期は動くかもしれませんが、このゲーム、3拠点に15体のパルを出しておく、とかすると凄まじい勢いでメモリを食います。
私感ですが、4人でやるなら最低16GBは必要と思います。
費用との兼ね合いもあるので、私は16GBで運用していますが、これでも1日1回はメモリ食い潰して落ちます。
人数にもよりますが、32GBくらい積めると理想かなと思います。
コンソールの自由度
レンタルサーバーやAWSのようなクラウドを使う前提で考えると、エンジニアとしてはある程度自由にサーバー操作できると嬉しいです。
理想は業務でも使っているAWSのようなクラウドではあるのですが、費用比較してみるとわかりますが、レンタルサーバーと圧倒的な費用の差が出ます(数倍)
パルワールドにメモリリーク問題(サーバー起動していると勝手に使用メモリが増えていく)があるという噂もあり、 cronとか使えると嬉しい感じです。
拡張性
パルワールドは今後、大人数向けコンテンツであるレイド機能を実装すると言っています。
今のメモリ効率でそんなコンテンツが出てくると、メモリがいくらあっても足りないです。
よって、当初16GBで始めたとして、32, 64と拡張できる仕組みが備わっていると望ましいです。
拡張時にデータ消滅とかすると流石に悲しいので。。
OS
現状Ubuntuじゃないと難しそう?(v0.1.3.0の時点で検討していたので現在は不明です)
結論
ConohaVPS for Gameの16GBを選択しました。
Palworldの起動テンプレートというものがあり、これを使うと何もせずとも以下の状態となります。
- 初期からパルワールドが入った状態になる
- サーバー再起動で自動的にサーバーのパルワールドをアップデートしてくれる
- Out of Memoryでパルワールドのサービスが落ちても再起動してくれる
私は即日運用開始できました。
拡張性もよく、サーバーではcronも使えてllみたいなコマンドも使えて好印象でした。
設定ファイル
PalWorldSettings.iniなるものがあり、これでゲーム設定を行います。
v0.1.3.0時点で組んだもので、最新ではありませんが、こんな感じのファイルを作って、所定の場所におきます。
[/Script/Pal.PalGameWorldSettings]
OptionSettings=(Difficulty=None,DayTimeSpeedRate=1.000000,NightTimeSpeedRate=1.000000,ExpRate=1.000000,PalCaptureRate=1.000000,PalSpawnNumRate=1.000000,PalDamageRateAttack=1.000000,PalDamageRateDefense=1.000000,PlayerDamageRateAttack=1.000000,PlayerDamageRateDefense=1.000000,PlayerStomachDecreaceRate=1.000000,PlayerStaminaDecreaceRate=1.000000,PlayerAutoHPRegeneRate=1.000000,PlayerAutoHpRegeneRateInSleep=1.000000,PalStomachDecreaceRate=1.000000,PalStaminaDecreaceRate=1.000000,PalAutoHPRegeneRate=1.000000,PalAutoHpRegeneRateInSleep=1.000000,BuildObjectDamageRate=1.000000,BuildObjectDeteriorationDamageRate=1.000000,CollectionDropRate=1.000000,CollectionObjectHpRate=1.000000,CollectionObjectRespawnSpeedRate=1.000000,EnemyDropItemRate=1.000000,DeathPenalty=All,bEnablePlayerToPlayerDamage=False,bEnableFriendlyFire=False,bEnableInvaderEnemy=True,bActiveUNKO=False,bEnableAimAssistPad=True,bEnableAimAssistKeyboard=False,DropItemMaxNum=3000,DropItemMaxNum_UNKO=100,BaseCampMaxNum=128,BaseCampWorkerMaxNum=15,DropItemAliveMaxHours=1.000000,bAutoResetGuildNoOnlinePlayers=False,AutoResetGuildTimeNoOnlinePlayers=72.000000,GuildPlayerMaxNum=20,PalEggDefaultHatchingTime=72.000000,WorkSpeedRate=1.000000,bIsMultiplay=False,bIsPvP=False,bCanPickupOtherGuildDeathPenaltyDrop=False,bEnableNonLoginPenalty=True,bEnableFastTravel=True,bIsStartLocationSelectByMap=True,bExistPlayerAfterLogout=False,bEnableDefenseOtherGuildPlayer=False,CoopPlayerMaxNum=4,ServerPlayerMaxNum=16,ServerName="",ServerDescription="",AdminPassword="",ServerPassword="",PublicPort=8211,PublicIP="",RCONEnabled=True,RCONPort=25575,Region="",bUseAuth=True,BanListURL="https://api.palworldgame.com/api/banlist.txt")
公式にiniの設定値について記載あるのでご参照ください。
https://tech.palworldgame.com/ja/settings-and-operation/configuration/
負荷を軽減したい場合、PalSpawnNumRateのような出現率系はいじっておくと軽くなるかもしれません。
以下はいじっておいた方が良いかもしれない者たちです。
- PalEggDefaultHatchingTime(ソロ環境だと2.000000のはず?)
- DeathPenalty(初期だとパル含めて全Dropという鬼畜仕様。ItemAndEquipmentくらいが妥当?)
- BuildObjectDeteriorationDamageRate(確か拠点外の建築の自動HP減少オプション。これを0にすると拠点外でもクラフトし放題)
公式から持って来れば問題ないのですが、改行が入っていると正しく動かないのでご注意ください。
サーバー運用
初めて数日で気づいたメモリ問題。
落ちても再起動してくれるのでいいじゃん、と思うかもしれませんが、パルワールドは再起動時に「パルボックスの裏にパルが移動し、ごはんを食べてくれなくて勝手に病気になる」という不具合?があります(ありました?V0.1.5.0で修正、と公式見解)
これで仲間内のパルが全員病気になり、直すのに高額な費用がかかるので捨てられる、という悲しい事件が起こっていました(私はちゃんと病気直してあげてました)。
そこで使用メモリ状況を通知するcronを組んで、1時間に1回Discordに通知するようにしていました。
が、それも限界かなと思ったので、現在は「ログアウト時病気になりたくなかったら全部パルボックスにしまう」運用にしています。
cronで回すシェルを載せようかとも思いましたが、ChatGPTにでも聞けば一瞬で出てくるので割愛します(コンソールから持ってくるのが地味に面倒。。)
最後に
今後のアップデートでどんどん改善していって、メモリ効率化も図られたら不要な記事となるかもしれません。
そうなる日に期待しつつ、初期で専用サーバーを構築した際の経験談でした。