Skip to content

Chapter 9.7: ワールド状態とパーシステンス

ホーム | << 前へ: プレイヤースポーン | 次へ: パフォーマンスチューニング >>

DayZのパーシステンスは、再起動間でワールドを維持します。その仕組みを理解することで、拠点を管理し、ワイプを計画し、データ破損を回避できます。

目次


パーシステンスの仕組み

DayZはワールド状態をサーバープロファイルフォルダ内の storage_1/ ディレクトリに格納します。サイクルは簡単です:

  1. サーバーはワールド状態を定期的に(デフォルトで約30分ごと)およびグレースフルシャットダウン時に保存します。
  2. 再起動時、サーバーは storage_1/ を読み取り、すべての永続化されたオブジェクト -- 車両、拠点、テント、バレル、プレイヤーインベントリを復元します。
  3. パーシステンスのないアイテム(ほとんどの地面ルート)は、各再起動時にCentral Economyによって再生成されます。

起動時に storage_1/ が存在しない場合、サーバーはプレイヤーデータも建設された構造物もないフレッシュなワールドを作成します。


storage_1/ ディレクトリ

サーバープロファイルには以下のサブディレクトリとファイルを持つ storage_1/ が含まれます:

パス内容
data/ワールドオブジェクトを保持するバイナリファイル -- 拠点パーツ、設置されたアイテム、車両位置
players/SteamID64でインデックスされたプレイヤーごとの .save ファイルです。各ファイルは位置、インベントリ、体力、状態効果を格納します
snapshot/保存操作中に使用されるワールド状態スナップショット
events.bin / events.xyダイナミックイベント状態 -- ヘリクラッシュの位置、護送車列の位置、その他のスポーンされたイベントを追跡します

data/ フォルダがパーシステンスの大部分を占めます。サーバーが起動時にワールドを再構築するために読み取るシリアライズされたオブジェクトデータが含まれています。


globals.xmlのパーシステンスパラメータ

ミッションフォルダ内の globals.xml ファイルはクリーンアップタイマーとフラッグの動作を制御します。以下はパーシステンスに関連する値です:

xml
<!-- テリトリーフラッグのリフレッシュ -->
<var name="FlagRefreshFrequency" type="0" value="432000"/>      <!-- 5日(秒) -->
<var name="FlagRefreshMaxDuration" type="0" value="3456000"/>    <!-- 40日(秒) -->

<!-- クリーンアップタイマー -->
<var name="CleanupLifetimeDefault" type="0" value="45"/>         <!-- デフォルトクリーンアップ(秒) -->
<var name="CleanupLifetimeDeadPlayer" type="0" value="3600"/>    <!-- 死んだプレイヤーの体: 1時間 -->
<var name="CleanupLifetimeDeadAnimal" type="0" value="1200"/>    <!-- 死んだ動物: 20分 -->
<var name="CleanupLifetimeDeadInfected" type="0" value="330"/>   <!-- 死んだゾンビ: 5.5分 -->
<var name="CleanupLifetimeRuined" type="0" value="330"/>         <!-- 破損したアイテム: 5.5分 -->

<!-- クリーンアップ動作 -->
<var name="CleanupLifetimeLimit" type="0" value="50"/>           <!-- サイクルごとのクリーンアップ最大アイテム数 -->
<var name="CleanupAvoidance" type="0" value="100"/>              <!-- プレイヤーから100m以内のクリーンアップをスキップ -->

CleanupAvoidance 値は、サーバーがアクティブなプレイヤーの近くでオブジェクトをデスポーンするのを防ぎます。死体がいずれかのプレイヤーから100メートル以内にある場合、プレイヤーが離れるかタイマーがリセットされるまで残ります。


テリトリーフラッグシステム

テリトリーフラッグはDayZにおける拠点パーシステンスの中核です。2つの重要な値がどのように連携するかを以下に示します:

  • FlagRefreshFrequency (432000 秒 = 5日) -- フラッグをアクティブに保つためにインタラクトする必要がある頻度です。フラッグまで歩いて「リフレッシュ」アクションを使用します。
  • FlagRefreshMaxDuration (3456000 秒 = 40日) -- 蓄積された保護時間の最大値です。各リフレッシュはFlagRefreshFrequency分の時間を追加しますが、合計はこの上限を超えることはできません。

フラッグのタイマーが切れた場合:

  1. フラッグ自体がクリーンアップの対象になります。
  2. そのフラッグに接続されたすべての建築パーツがパーシステンス保護を失います。
  3. 次のクリーンアップサイクルで、保護されていないパーツがデスポーンし始めます。

FlagRefreshFrequencyを下げると、プレイヤーはより頻繁に拠点を訪問する必要があります。FlagRefreshMaxDurationを上げると、拠点は訪問間により長く生存します。サーバーのプレイスタイルに合わせて両方の値を一緒に調整してください。


ホーダーアイテム

cfgspawnabletypes.xml では、特定のコンテナが <hoarder/> タグでマークされています。これにより、Central Economy内のプレイヤーごとのストレージ制限にカウントされるスタッシュ対応アイテムとしてマークされます。

バニラのホーダーアイテムは以下の通りです:

アイテムタイプ
Barrel_Blue, Barrel_Green, Barrel_Red, Barrel_Yellowストレージバレル
CarTent, LargeTent, MediumTent, PartyTentテント
SeaChest水中ストレージ
SmallProtectorCase小型ロック可能ケース
UndergroundStash埋められたスタッシュ
WoodenCrateクラフト可能ストレージ

cfgspawnabletypes.xml からの例:

xml
<type name="SeaChest">
    <hoarder/>
</type>

サーバーは各プレイヤーが設置したホーダーアイテムの数を追跡します。制限に達すると、新しい設置が失敗するか、最も古いアイテムがデスポーンします(サーバー設定に依存)。


cfggameplay.jsonのパーシステンス設定

ミッションフォルダ内の cfggameplay.json ファイルには、拠点とコンテナの耐久性に影響する設定が含まれています:

json
{
  "GeneralData": {
    "disableBaseDamage": false,
    "disableContainerDamage": false
  }
}
設定デフォルト効果
disableBaseDamagefalsetrue の場合、建築パーツ(壁、ゲート、監視塔)はダメージを受けません。これにより事実上レイドが無効になります。
disableContainerDamagefalsetrue の場合、ストレージコンテナ(テント、バレル、クレート)はダメージを受けません。内部のアイテムは安全に保たれます。

両方を true に設定すると、拠点とストレージが破壊不可能なPvEフレンドリーなサーバーが作成されます。ほとんどのPvPサーバーでは両方を false のままにしています。


サーバーワイプ手順

4種類のワイプがあり、それぞれ storage_1/ の異なる部分をターゲットにします。ワイプを実行する前に必ずサーバーを停止してください。

フルワイプ

storage_1/ フォルダ全体を削除します。サーバーは次回起動時にフレッシュなワールドを作成します。すべての拠点、車両、テント、プレイヤーデータ、イベント状態が消去されます。

エコノミーワイプ(プレイヤーを維持)

storage_1/data/ を削除しますが、storage_1/players/ はそのまま残します。プレイヤーはキャラクターとインベントリを保持しますが、設置されたすべてのオブジェクト(拠点、テント、バレル、車両)は削除されます。

プレイヤーワイプ(ワールドを維持)

storage_1/players/ を削除します。すべてのプレイヤーキャラクターが新規スポーンにリセットされます。拠点と設置されたオブジェクトはワールドに残ります。

天候 / イベントリセット

storage_1/ から events.bin または events.xy を削除します。これによりダイナミックイベントの位置(ヘリクラッシュ、護送車列)がリセットされます。サーバーは次回起動時に新しいイベント位置を生成します。


バックアップ戦略

パーシステンスデータは失われると復元不可能です。以下の慣行に従ってください:

  • 停止中にバックアップする。 サーバーが動作していない間に storage_1/ フォルダ全体をコピーします。実行中のコピーは部分的または破損した状態をキャプチャするリスクがあります。
  • 再起動前にバックアップをスケジュールする。 自動再起動(4-6時間ごと)を実行している場合、サーバープロセスが起動する前に storage_1/ をコピーするバックアップステップを再起動スクリプトに追加します。
  • 複数世代を保持する。 少なくとも3つの最新のコピーを保持するようにバックアップをローテーションします。最新のバックアップが破損している場合、以前のものにロールバックできます。
  • マシン外に保存する。 バックアップを別のドライブまたはクラウドストレージにコピーします。サーバーマシンのディスク障害は、同じドライブにあるバックアップも一緒に失わせます。

最小限のバックアップスクリプト(サーバー起動前に実行):

bash
BACKUP_DIR="/path/to/backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp -r /path/to/serverprofile/storage_1 "$BACKUP_DIR/"

よくある間違い

これらはサーバー管理者コミュニティで繰り返し出てくるものです:

間違い何が起こるか防止策
サーバー実行中に storage_1/ を削除するデータ破損。サーバーは存在しないファイルに書き込み、クラッシュまたは次回起動時の部分的な状態を引き起こします。必ずサーバーを先に停止してください。
ワイプ前にバックアップしない誤ったフォルダを削除したりワイプがうまくいかなかった場合、復旧の手段がありません。すべてのワイプ前に storage_1/ をバックアップしてください。
天候リセットとフルワイプを混同するevents.xy を削除してもダイナミックイベントの位置のみリセットされます。ルート、拠点、プレイヤーはリセットされません。どのファイルが何を制御するかを把握してください(上記のディレクトリテーブルを参照)。
フラッグが時間内にリフレッシュされない40日後(FlagRefreshMaxDuration)、フラッグが期限切れになり、接続されたすべての建築パーツがクリーンアップの対象になります。プレイヤーは拠点全体を失います。プレイヤーにリフレッシュ間隔を通知してください。低人口サーバーではFlagRefreshMaxDurationを下げてください。
サーバー実行中にglobals.xmlを編集する変更は再起動まで反映されません。さらに悪いことに、サーバーがシャットダウン時にあなたの編集を上書きする可能性があります。設定ファイルはサーバーが停止している間にのみ編集してください。

ホーム | << 前へ: プレイヤースポーン | 次へ: パフォーマンスチューニング >>

Released under CC BY-SA 4.0 | Code examples under MIT License