ロールバックの仕組み
Game Saves はプレイヤーのセーブデータのファイナライズされたバージョンを追跡します。ロールバックをトリガーすると、サービスは復元しようとしている以前の状態と内容が同一な 新しいバージョン を作成します。ロールバックは元のバージョン履歴を保持します。以前のバージョンを削除したり上書きしたりしません。ロールバック後に同期する他のデバイスからは、通常の更新として扱われます。 ロールバックには 2 つのタイプがあります。それぞれPFGameSaveFilesAddUserWithUiAsync にオプションフラグを渡してトリガーします:
適格な復元ポイントが存在しない場合、両方のオプションはデフォルトの動作 (現在の最新バージョンを同期する) にフォールバックします。
各ロールバックタイプの使用時機
last known good へのロールバック
最新のアップロードが不良であると疑われる場合はRollbackToLastKnownGood を使用してください。よくあるトリガーは以下のとおりです:
- セーブのダウンロード後のロード失敗または整合性チェック失敗。
- セーブ操作中または直後のクラッシュ。
- 状態が破損または退行したというプレイヤー報告。
last conflict へのロールバック
競合解決の際にプレイヤーが誤った選択をした場合はRollbackToLastConflict を使用してください。Game Saves の競合 で説明されているように、両方の解決選択肢は破棄されたブランチを保持します。このロールバックオプションは、その保持されたブランチを復元します。
API の呼び出し
適切なオプションをPFGameSaveFilesAddUserWithUiAsync に渡してロールバックをトリガーします。この関数はユーザーごとに 1 回しか呼び出せないため、既に追加済みのユーザーに対してロールバックするには、まず PFGameSaveFilesUninitializeAsync を呼び出し、その完了を待ちます。
フォールバック動作
要求されたロールバックタイプに対して適格な復元ポイントが存在しない場合、この呼び出しはPFGameSaveFilesAddUserOptions::None を渡した場合と同じように動作します。現在の最新バージョンが通常どおり同期されます。ロールバックが発生したかどうかを確認するには、呼び出し完了後に同期されたファイルを確認してください。
タイトル構成
2 つの構成フラグを通じて、クライアント起点のロールバックを制限できます。いずれかのフラグを有効にすると、サポートツールと Game Manager のみがその種類のロールバックを実行できます。
これらのフラグは Game Manager の Progression > Game Saves の下で設定します。
エラー処理
考慮事項
- ロールバックは新しいバージョンを作成します。 履歴は消去しません。プレイヤーのバージョンシーケンスは前に進み続けます。
- サービスは known good を自動的に追跡します。 正常なロードと後続の置換のサイクルに基づいて、どのバージョンが該当するかを決定します。ゲーム側で明示的にバージョンをマークする必要はありません。
- add-user 呼び出しごとに 1 回のロールバック。
PFGameSaveFilesAddUserWithUiAsyncはユーザーごとに 1 回しか呼び出せないため、2 回目のロールバックをトリガーするには、まずPFGameSaveFilesUninitializeAsyncを呼び出す必要があります。 - UI コールバックも発火します。 ロールバックは通常の add-user 呼び出しと同じ同期フローを通過します。API を呼び出す前に UI コールバック を登録してください。
- 必要に応じてロールバックを制限してください。 ゲームがサーバーサイドまたはサポートツールを通じて復旧を処理する場合は、タイトル構成フラグを使用してクライアントロールバックを無効にし、プレイヤーが誤って進行状況を戻すのを防ぎます。
- ロールバックはすべてのプラットフォームで動作します。 この API にはプラットフォーム固有のガードはありません。
