このガイドでは、Legion Hosting でホストされている Project Zomboid サーバーの高度な Mod トラブルシューティングについて説明します。まだ Mod をインストールしていない場合は、まず基本的な Mod インストールガイドから始めてください。この記事では、WorldDictionary の破損、Mod 形式のエラー、ロード順序の競合、サーバーとクライアント間のバージョン不一致など、Legion Hosting のサポートチケットで見られる最も一般的な Mod 関連の問題を取り上げます。
始める前に
- GPanel にログインし、Project Zomboid サーバーを選択します。
- 設定やファイルを変更する前に、サーバーを停止してください。
- 修正を試みる前に、SFTP または GPanel 経由でワールドセーブフォルダ (
/.cache/saves/multiplayer/) をバックアップしてください。ファイル転送に慣れていない場合は、SFTP ガイドを参照してください。 - サーバーの
.iniファイルパスを準備しておきます:/.cache/server/<servername>.ini(例:servertest.ini)。
1. Mod 形式のエラー (B42 と B41)
Mod の読み込みに失敗する最も一般的な理由は、サーバーの .ini ファイルの Mods= 行における誤った形式です。Build 42 と Build 41 は異なる構文を使用しており、これらを混同すると Mod の読み込みが暗黙的に失敗します。
B42 形式 (現在のデフォルト)
Build 42 では、Mods= 行の各 Mod ID の前にバックスラッシュのプレフィックスが必要です:
Mods=\ModID1;\ModID2;\ModID3;
DLMP 形式は、Workshop ID と Mod ID をバックスラッシュ区切りで組み合わせます:
Mods=2392987841\ModID1;1550458773\ModID2;2786383654\ModID3;
WorkshopItems= 行は、両方のビルドで同じセミコロン区切りの形式を使用します:
WorkshopItems=2392987841;1550458773;2786383654
B41 形式 (レガシー)
Build 41 はバックスラッシュなしの通常のセミコロン区切りの Mod ID を使用します:
Mods=ModID1;ModID2;ModID3
Mods= 行全体をバックスラッシュのプレフィックスを含むように再フォーマットする必要があります。
修正方法
- GPanel ファイルマネージャーで
/.cache/server/<servername>.iniを開きます。 Mods=行を見つけ、上記の例と照らし合わせて形式を確認します。- ビルドバージョンに対して形式が間違っている場合は修正します。Legion Hosting Mod Organizer を使用すると、正しくフォーマットされた行を自動的に生成できます。
- ファイルを保存してサーバーを起動します。
2. WorldDictionary の破損
WorldDictionary は、アイテム名を内部の数値 ID にマッピングするファイル (WorldDictionary.bin) です。Mod が追加または削除されると、ディクショナリが破損し、起動時に WorldDictionaryException でサーバーがクラッシュすることがあります。
症状
- コンソールまたは
debug.logにWorldDictionaryExceptionまたはWorldDictionaryのエラーが表示される。 - 起動中、特にワールドの読み込み中にサーバーが即座にクラッシュする。
- Mod の追加、削除、または更新後にクラッシュが始まった。
リスクの理解
復旧手順
- GPanel でサーバーを停止します。
- SFTP 経由でセーブフォルダ全体をバックアップします:
/.cache/saves/multiplayer/<YourWorldName>/ディレクトリ全体をローカルマシンにダウンロードします。 - まず、エラーの原因となった Mod の変更を単純に元に戻してみてください。Mod を追加したばかりの場合は、
.iniファイルのMods=とWorkshopItems=の両方からそれを削除します。Mod を削除したばかりの場合は、再度追加します。サーバーを起動して、クラッシュが解決したか確認します。 - Mod の変更を元に戻しても解決しない場合は、SFTP 経由で接続し、
/.cache/saves/multiplayer/<YourWorldName>/に移動します。 WorldDictionary.binを削除します。- サーバーを起動します。Project Zomboid は起動時にディクショナリを再生成します。
- サーバーに参加し、破損したアイテム、消えた車両、または壊れたインベントリがないかワールドを調べます。ワールドが深刻に損傷している場合は、手順 2 で作成したバックアップから復元します。
3. Authentic Z Mod の競合
Authentic Z は最も人気のある Project Zomboid Mod コレクションの 1 つですが、互いに競合する複数のサブ Mod が含まれているため、サポートチケットの頻繁な原因となっています。
ルール
Authentic Z - Current です。
よくある間違い
Authentic Z - CurrentとAuthentic Z - Litemodeを同時に追加すること。- シングルプレイヤー向けに設計された Authentic Z サブ Mod を、マルチプレイヤー版と並べて追加すること。
- 異なる Authentic Z サブ Mod が同じ Workshop ID を共有しているが異なる Mod ID を持っていることに気づかず、Workshop のダウンロードは成功するものの、サーバーが競合する Mod ファイルを読み込むこと。
修正方法
- GPanel ファイルマネージャーで
/.cache/server/<servername>.iniを開きます。 Mods=行からAuthenticまたはAuthenticZを含むすべてのエントリを検索します。- Authentic Z のサブ Mod を1 つだけ残します (推奨:
Authentic Z - Current)。他のすべての Authentic Z エントリをMods=とWorkshopItems=の両方の行から削除します。 - ファイルを保存してサーバーを再起動します。
4. Linux の大文字小文字の区別の問題
Legion Hosting のサーバーは Linux 上で動作し、ファイル名やフォルダ名は大文字小文字が区別されます。MyMod.lua と mymod.lua という名前のファイルは、まったく別の 2 つのファイルとして扱われます。これは、Mod 作者が Windows (大文字小文字を区別しない) 上で開発し、その Mod に一致しないファイル参照が含まれている場合に問題を引き起こします。
症状
- Mod が Windows PC のシングルプレイヤーでは完璧に動作するが、サーバーでは失敗する。
- コンソールまたは
debug.logに、Mod 内の Lua スクリプトやテクスチャを参照するFileNotFoundExceptionまたはcan't find fileのエラーが表示される。 - エラーは Mod フォルダ内に実際に存在するファイルを指しているが、大文字小文字が異なる (例: コードが
Items.txtを参照しているが、実際のファイル名はitems.txtである)。
診断方法
- コンソールまたは
/.cache/Logs/のログファイルで、エラーに記載されている正確なファイルパスを確認します。 - SFTP 経由で接続し、Mod のフォルダ
/steamapps/workshop/content/108600/<WorkshopID>/に移動します。 - ディスク上のファイル名と、エラーメッセージで参照されているファイル名を比較します。大文字小文字の違いを探します。
修正方法
- ファイル名を変更できる場合: SFTP 経由で接続し、Mod のコードが期待する大文字小文字に一致するようにファイル名を変更します。なお、この修正は Mod が Steam Workshop で更新されると上書きされます。
- 問題が Mod 自体にある場合: Steam Workshop ページで Mod 作者にバグを報告してください。ファイル参照に大文字小文字の不一致があり、Linux サーバーで失敗することを伝えます。多くの Mod 作者は Linux の大文字小文字の区別を認識していません。
- 回避策として: Mod の Workshop ページのコメントを確認してください。他の Linux サーバー運営者が修正方法や互換性のある Mod のフォークを投稿している場合があります。
5. Mod のロード順序の問題
Project Zomboid は、Mods= 行に表示される順序で Mod を読み込みます。一部の Mod は、他の Mod が先に読み込まれることに依存しています。依存関係が、それを必要とする Mod の後に読み込まれると、依存する Mod は暗黙的に失敗したり、エラーを引き起こしたりすることがあります。
症状
- Mod の機能が部分的にしか動作しない — Mod のアイテムやシステムの一部は存在するが、他のものが欠落している。
- コンソールに、Mod の Lua スクリプトを参照する
NullPointerExceptionまたはattempt to index a nil valueのエラーが表示される。 - 特定の Mod の組み合わせがインストールされている場合にのみエラーが表示されるが、各 Mod は個別には問題なく動作する。
修正方法
- 各 Mod の Steam Workshop ページで 「Required Mods」 または 「Load Order」 のセクションを確認します。多くの Mod 作者は、自分の Mod より前に読み込む必要がある Mod を指定しています。
/.cache/server/<servername>.iniを開き、Mods=行を見つけます。- 依存関係の Mod が、それを必要とする Mod より前に表示されるようにエントリを並べ替えます。例えば、Mod B が Mod A を必要とする場合、行は
Mods=\ModA;\ModB;(B42 形式) となるべきです。 - フレームワークやライブラリの Mod (
ModFramework、TsarLib、Shark's Mod Utilsなど) は、常にMods=行の最初に記載する必要があります。 - ファイルを保存してサーバーを再起動します。
6. Mod 追加後のサーバークラッシュ
サーバーが正常に動作していたのに、1 つ以上の Mod を追加した後にクラッシュする場合は、新しい Mod が原因である可能性が高いです。このセクションでは、問題のある Mod を切り分ける方法を説明します。
段階的な切り分け
- GPanel でサーバーを停止します。
- ファイルマネージャーで
/.cache/server/<servername>.iniを開きます。 - 追加したばかりのすべての Mod を確認します。それらすべてを
Mods=とWorkshopItems=の両方の行から削除します。 - サーバーを起動します。正常に起動した場合、問題は削除した Mod のいずれかにあります。
- Mod を1 つずつ追加し直し、追加するごとにサーバーを再起動します。クラッシュが再発したら、最後に追加した Mod が原因です。
- 特定できたら、その Mod の Workshop ページで次の点を確認します:
- B42 互換性に関する注記 — 多くの B41 Mod は B42 用に更新されていません。
- 実行中の他の Mod との既知の競合。
- インストールしていない可能性のある必須の依存 Mod。
クラッシュログの読み方
切り分けプロセスを実行する前に、クラッシュログを確認してください。多くの場合、問題のある Mod を直接指し示します:
- GPanel でコンソールタブを開き、出力の末尾までスクロールします。
STACK TRACE、Exception、またはERRORの行を探します。- スタックトレースのすぐ上の行は、通常 Mod のファイル名または Mod ID を参照しています。これにより、どの Mod がクラッシュを引き起こしたかがわかります。
- より詳細な情報については、SFTP 経由で
/.cache/Logs/にある完全なログファイルを開き、最新のDebugLog-server.txtまたはdebug.logファイルを確認します。
7. Mod バージョンの不一致 (サーバーとクライアント)
Project Zomboid では、サーバーと接続中のすべてのクライアントが、すべての Mod の同じバージョンを持っている必要があります。Mod が Steam Workshop で更新され、サーバーが新しいバージョンをダウンロードしたものの、プレイヤーが古いバージョンをキャッシュしたまま (またはその逆) の場合、接続の失敗やクラッシュが発生します。
症状
- プレイヤーが接続しようとすると 「Mod mismatch」 または 「Version mismatch」 のエラーが表示される。
- 一部のプレイヤーは接続できるが、他のプレイヤーは接続できない — 接続できないプレイヤーは、ローカルに異なる Mod バージョンをキャッシュしている。
- サーバーは正常に動作していたが、Mod が Steam Workshop で更新され、突然一部のプレイヤーが参加できなくなった。
- プレイヤーに、最近更新された Mod のテクスチャやアイテムの欠落、または壊れた UI 要素が表示される。
サーバー運営者向けの修正
- GPanel でサーバーを停止します。
- サーバーを再起動します。起動時に、サーバーはすべての Workshop Mod の最新バージョンを再ダウンロードします。これにより、サーバーが最新バージョンを実行していることが保証されます。
- サーバーがまだ古いバージョンをキャッシュしている場合は、SFTP 経由で接続し、
/steamapps/workshop/content/108600/<WorkshopID>/にある特定の Mod の Workshop キャッシュフォルダを削除します。サーバーを再起動して、クリーンなダウンロードを強制します。
プレイヤー向けの修正
Mod バージョンの不一致が原因で接続できないプレイヤーは、次の手順を行ってください:
- Steam を開き、ライブラリ → Project Zomboid に移動します。
- Project Zomboid を右クリックし、プロパティ → ローカルファイル → ゲームファイルの整合性を確認を選択します。
- また、ローカルマシンの Project Zomboid 用の Steam Workshop フォルダに移動し、キャッシュされた Mod ファイルを削除して再ダウンロードを強制します。
- ゲームを起動し、サーバーに再接続します。
/.cache/mods/ にアップロードすることを検討してください。自動更新を防ぐために、対応する Workshop ID を WorkshopItems= 行から削除します。Workshop 以外の Mod のインストール手順については、Mod インストールガイドを参照してください。
8. Steam Workshop キャッシュのクリア
複数の Mod の問題が解決せず、Workshop のダウンロードキャッシュが破損していると思われる場合は、すべての Workshop Mod の完全な再ダウンロードを強制できます。
- GPanel でサーバーを停止します。
- SFTP 経由で接続し、
/steamapps/workshop/に移動します。 workshop/フォルダ全体 (またはその中身) を削除します。- サーバーを起動します。Steam はすべての Workshop アイテムを最初から再ダウンロードします。
- GPanel コンソールを見て、サーバーがワールドの読み込みを開始する前にすべての Mod のダウンロードが完了したことを確認します。
クイック診断リファレンス
| 表示される内容 | 最も可能性の高い原因 | セクション |
|---|---|---|
| Mod が読み込まれず、ログにエラーがない | 誤った Mod 形式 (B42 サーバーで B41 形式、またはその逆) | 1. Mod 形式のエラー |
コンソールに WorldDictionaryException |
Mod の追加/削除による WorldDictionary の破損 | 2. WorldDictionary の破損 |
| 複数の Authentic Z サブ Mod でのサーバークラッシュ | 競合する Authentic Z サブ Mod が同時に読み込まれている | 3. Authentic Z の競合 |
存在する Mod ファイルに対する FileNotFoundException |
Linux の大文字小文字の不一致 | 4. 大文字小文字の区別の問題 |
Mod からの NullPointerException または nil value エラー |
誤った Mod のロード順序または欠落した依存関係 | 5. ロード順序の問題 |
新しい Mod 追加後の STACK TRACE |
互換性のない、または競合する Mod | 6. Mod 追加後のクラッシュ |
| 接続時の「Mod mismatch」または「Version mismatch」 | サーバーとクライアントの Mod バージョンが異なる | 7. バージョンの不一致 |
| 複数の Mod の問題、他に何も機能しない | 破損した Workshop キャッシュ | 8. Workshop キャッシュ |
まだ Mod の問題が解決しませんか?
Mod の問題が上記で扱われていない場合、または修正で解決しなかった場合は、サポートチームが問題を迅速に診断できるよう、次の情報を添えてサポートチケットを開いてください:
- 起動時にコンソールに表示される、サーバーのビルドバージョン (B41 または B42)
.iniファイルの完全なMods=およびWorkshopItems=行- クラッシュ時の GPanel コンソール出力の最後の 50 行
/.cache/Logs/にある最新のログファイルの内容- 問題が始まる直前に追加、削除、または更新された Mod
- 問題が起動時に発生するか、プレイヤーが接続したときにのみ発生するか
サポートチケットを開いて、サーバー ID と上記の詳細を記載してください。