> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reversión de Game Saves

> Restaure el guardado de un jugador de PlayFab Game Saves a un estado anterior mediante las opciones RollbackToLastKnownGood o RollbackToLastConflict en la API de adición de usuario.

La reversión le permite restaurar el guardado de juego de un jugador a un estado anterior. Úsela cuando el guardado de un jugador se dañe, cuando una actualización del título introduzca un error que dañe los datos de guardado o cuando un jugador quiera revertir una decisión de resolución de conflictos.

## Cómo funciona la reversión

Game Saves realiza el seguimiento de las versiones finalizadas de los datos de guardado de un jugador. Cuando desencadena una reversión, el servicio crea una **nueva versión** cuyo contenido es idéntico al estado anterior que está restaurando. La reversión conserva el historial de versiones original. No elimina ni sobrescribe versiones anteriores. Los demás dispositivos que se sincronizan después de la reversión la ven como una actualización normal.

Hay dos tipos de reversión. Cada uno se desencadena pasando una marca de opción a `PFGameSaveFilesAddUserWithUiAsync`:

| Opción                                                   | Descripción                                                                                                                                                   |
| -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PFGameSaveFilesAddUserOptions::RollbackToLastKnownGood` | Restaura el guardado en la nube anterior verificado más recientemente. Este guardado se cargó previamente y luego fue reemplazado por una carga más reciente. |
| `PFGameSaveFilesAddUserOptions::RollbackToLastConflict`  | Restaura el estado de guardado que perdió la resolución de conflictos más reciente.                                                                           |

Ambas opciones recurren al comportamiento predeterminado (sincronizar la versión más reciente actual) si no existe ningún punto de restauración apto.

## Cuándo usar cada tipo de reversión

### Reversión al último estado correcto conocido

Use `RollbackToLastKnownGood` cuando sospeche que la carga más reciente es incorrecta. Los desencadenantes habituales incluyen:

* Error de carga o comprobación de integridad fallida después de descargar un guardado.
* Un bloqueo durante una operación de guardado o inmediatamente después.
* Un informe de un jugador sobre un estado dañado o con retroceso.

El servicio realiza automáticamente el seguimiento de qué versiones son "correctas conocidas". No es necesario marcarlas explícitamente. Una versión pasa a ser correcta conocida cuando la carga correctamente y una carga más reciente la reemplaza posteriormente.

### Reversión al último conflicto

Use `RollbackToLastConflict` cuando un jugador eligió el lado equivocado durante la resolución de conflictos. Como se describe en [Conflictos de Game Saves](/services/playfab/player-progression/game-saves/conflicts), ambas opciones de resolución conservan la rama descartada. Esta opción de reversión restaura esa rama conservada.

## Llamada a la API

Desencadene la reversión pasando la opción adecuada a `PFGameSaveFilesAddUserWithUiAsync`. Solo puede llamar a esta función una vez por usuario, por lo que para revertir en el caso de un usuario que ya se ha agregado, primero llame a `PFGameSaveFilesUninitializeAsync` y espere a que se complete.

```cpp theme={null}
// Rollback to last known good version
XAsyncBlock async{};
async.queue = queue;
async.callback = [](XAsyncBlock* async)
{
    HRESULT hr = PFGameSaveFilesAddUserWithUiResult(async);
    if (SUCCEEDED(hr))
    {
        // Save data is now restored to the last known good version.
        // Read files from the game save folder as usual.
    }
};

HRESULT hr = PFGameSaveFilesAddUserWithUiAsync(
    localUserHandle,
    PFGameSaveFilesAddUserOptions::RollbackToLastKnownGood,
    &async
);
```

Para revertir en su lugar al perdedor del último conflicto, reemplace la marca de opción:

```cpp theme={null}
HRESULT hr = PFGameSaveFilesAddUserWithUiAsync(
    localUserHandle,
    PFGameSaveFilesAddUserOptions::RollbackToLastConflict,
    &async
);
```

### Comportamiento de reserva

Si no existe ningún punto de restauración apto para el tipo de reversión solicitado, la llamada se comporta como si hubiera pasado `PFGameSaveFilesAddUserOptions::None`. La versión más reciente actual se sincroniza con normalidad. Compruebe los archivos sincronizados después de que se complete la llamada para confirmar si se produjo una reversión.

## Configuración del título

Puede restringir la reversión iniciada por el cliente mediante dos marcas de configuración. Cuando habilita cualquiera de las marcas, solo las herramientas de soporte técnico y Game Manager pueden realizar ese tipo de reversión.

| Marca                                      | Efecto                                                                                            |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------- |
| `DisableClientRollbackToLastKnownGood`     | Impide que los clientes del juego reviertan a la última versión correcta conocida.                |
| `DisableClientRollbackToLastConflictLoser` | Impide que los clientes del juego reviertan la decisión de resolución de conflictos más reciente. |

Establezca estas marcas en Game Manager en **Progression > Game Saves**.

## Control de errores

| HRESULT                                                            | Significado                                                                        |
| ------------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
| `E_PF_GAME_SAVE_MANIFEST_NOT_ELIGIBLE_FOR_ROLLBACK`                | No existe ningún punto de restauración apto para el tipo de reversión solicitado.  |
| `E_PF_GAME_SAVE_NOT_FINALIZED_MANIFEST_NOT_ELIGIBLE_AS_KNOWN_GOOD` | La versión de destino no es apta como punto de restauración correcto conocido.     |
| `E_PF_GAME_SAVE_SERVICE_NOT_ENABLED_FOR_TITLE`                     | Game Saves no está habilitado para este título. Complete primero la incorporación. |
| `E_PF_GAME_SAVE_SERVICE_ONBOARDING_PENDING`                        | La incorporación del título aún está en curso.                                     |

## Consideraciones

* **La reversión crea una nueva versión.** No borra el historial. La secuencia de versiones del jugador continúa hacia adelante.
* **El servicio realiza el seguimiento del estado correcto conocido automáticamente.** Determina qué versiones son aptas en función de ciclos correctos de carga y posterior reemplazo. Su juego no necesita marcar las versiones explícitamente.
* **Una reversión por llamada de adición de usuario.** Dado que solo puede llamar a `PFGameSaveFilesAddUserWithUiAsync` una vez por usuario, desencadenar una segunda reversión requiere llamar primero a `PFGameSaveFilesUninitializeAsync`.
* **Las devoluciones de llamada de la interfaz de usuario se siguen activando.** La reversión pasa por el mismo flujo de sincronización que una llamada de adición de usuario normal. Registre sus [devoluciones de llamada de la interfaz de usuario](/services/playfab/player-progression/game-saves/ui-callbacks) antes de llamar a la API.
* **Restrinja la reversión si es necesario.** Si su juego controla la recuperación en el lado del servidor o mediante herramientas de soporte técnico, deshabilite la reversión del cliente con las marcas de configuración del título para evitar que los jugadores reviertan el progreso accidentalmente.
* **La reversión funciona en todas las plataformas.** Esta API no tiene protecciones específicas de plataforma.


## Related topics

- [Eventos de PlayStream de Game Saves](/es/services/playfab/player-progression/game-saves/playstream-events.md)
- [Conflictos de Game Saves](/es/services/playfab/player-progression/game-saves/conflicts.md)
- [Información general de Game Saves](/es/services/playfab/player-progression/game-saves/overview.md)
- [Herramientas de Game Saves](/es/build/core-features/common/game-save/game-saves-tools.md)
- [Depuración de Game Saves](/es/build/core-features/common/game-save/game-saves-debugging.md)
