> ## 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.

# Eventos do PlayStream do Game Saves

> Referência dos eventos do PlayStream do PlayFab Game Saves, abrangendo a finalização de versões, a resolução de conflitos e os campos de telemetria de reversão para versões válidas conhecidas.

O PlayFab Game Saves emite eventos do PlayStream que você pode usar para acompanhar como os jogadores salvam, sincronizam e gerenciam os dados do jogo. Use esses eventos para monitorar a atividade de salvamento, detectar conflitos e entender os padrões de uso entre dispositivos na sua base de jogadores.

Todos os eventos do Game Saves são emitidos para entidades `title_player_account` no namespace `playfab.gamesave`.

## Eventos

### `gamesave_version_finalized`

Emitido sempre que uma versão de jogo salvo é finalizada. Todos os arquivos foram carregados e a versão está completa. Este evento é o principal sinal para acompanhar a atividade de salvamento.

| Campo | Tipo | Descrição |
| - | - | - |
| `Version` | `long` | O número da versão do jogo salvo finalizado |
| `FinalizedAt` | `DateTime` | Carimbo de data/hora em que a versão foi finalizada |
| `TotalSizeBytes` | `long` | Tamanho total da versão finalizada, incluindo todos os arquivos |
| `TotalFileCount` | `int` | Número total de arquivos na versão finalizada |
| `NewFileCount` | `int` | Número de arquivos novos adicionados nesta versão |
| `NewFilesSizeBytes` | `long` | Tamanho dos arquivos novos adicionados nesta versão |
| `PlayerIdentityProvider` | `string` | O provedor de identidade usado pelo jogador (por exemplo, Steam, XBOX Live) |
| `DeviceType` | `string` | O tipo de dispositivo do qual o salvamento foi carregado |
| `IsGeneratedByRollback` | `bool` | `true` se esta versão foi criada pela reversão para uma versão anterior |
| `Conflict` | `Conflict` | Presente quando esta versão foi finalizada como parte de uma resolução de conflito; caso contrário, `null`. Consulte [Resolução de conflitos](#scenario-conflict-resolution) |

**Conflict** (objeto aninhado, presente somente durante a resolução de conflitos):

| Campo | Tipo | Descrição |
| - | - | - |
| `IsWinner` | `bool` | Se as alterações locais do jogador venceram o conflito. O evento sempre corresponde a um novo manifesto criado a partir dos dados locais do cliente. `true` significa que esse manifesto se tornou a versão canônica; `false` significa que o manifesto foi preservado como ponto de reversão, enquanto a versão existente na nuvem permaneceu canônica |
| `ConflictingVersion` | `long` | O número da versão existente na nuvem que estava em conflito |

### `gamesave_version_marked_known_good`

Emitido quando uma versão de jogo salvo é marcada explicitamente como "válida conhecida". Uma versão válida conhecida serve como ponto de restauração confiável: é a versão para a qual o sistema reverte se um jogador ou o título precisar se recuperar de um estado de salvamento incorreto.

| Campo | Tipo | Descrição |
| - | - | - |
| `Version` | `long` | A versão que foi marcada como válida conhecida |
| `MarkedAt` | `DateTime` | Carimbo de data/hora em que a versão foi marcada |

***

## Cenários

### Cenário: uso padrão entre dispositivos

Um fluxo típico entre dispositivos consiste em um jogador salvar em um dispositivo e retomar em outro. No PlayStream, esse padrão aparece como uma sequência de eventos `gamesave_version_finalized` com números de `Version` crescentes.

**O que você vê:**

* Um evento `gamesave_version_finalized` sempre que o jogador salva, com `DeviceType` e `PlayerIdentityProvider` indicando qual dispositivo e qual provedor de identidade foram usados.
* `NewFileCount` e `NewFilesSizeBytes` mostram quantos dados mudaram em comparação com a versão anterior. Uma versão em que `NewFileCount` é 0 significa que o jogador finalizou uma versão sem conteúdo de arquivo novo (por exemplo, uma atualização somente de metadados).
* `Conflict` é `null` e `IsGeneratedByRollback` é `false` em salvamentos normais.

**O que observar:**

* **Frequência de salvamento por jogador**: acompanhe a taxa de eventos de finalização para entender o engajamento dos jogadores e o comportamento de salvamento.
* **Tamanhos dos salvamentos ao longo do tempo**: monitore `TotalSizeBytes` e `NewFilesSizeBytes` para identificar um crescimento inesperado dos dados salvos que possa afetar os custos de armazenamento ou os tempos de sincronização.
* **Distribuição de dispositivos**: agregue `DeviceType` para entender a partir de quais plataformas seus jogadores salvam com mais frequência.

<a id="scenario-conflict-resolution" />

### Cenário: resolução de conflitos

Os conflitos ocorrem quando dois dispositivos finalizam uma versão de jogo salvo com base na mesma versão base. Por exemplo, um jogador pode jogar offline no console e no PC ao mesmo tempo, e ambos os dispositivos tentam sincronizar quando voltam a ficar online.

**O que você vê:**

* Durante a resolução de conflitos, o cliente sempre carrega seus arquivos locais em um novo manifesto e finaliza o manifesto. Esse processo produz um único evento `gamesave_version_finalized` com um objeto `Conflict` não nulo. A versão existente na nuvem (já finalizada em um evento anterior) não produz um novo evento.
* `Conflict.IsWinner` informa se as alterações locais do jogador venceram o conflito:
  * `true`: o jogador escolheu **keep local**. O novo manifesto se torna a versão canônica, e a versão anterior na nuvem é substituída.
  * `false`: o jogador escolheu **keep remote**. O novo manifesto é preservado como ponto de reversão (contendo os dados locais rejeitados), enquanto a versão existente na nuvem permanece canônica.
* `Conflict.ConflictingVersion` aponta para a versão existente na nuvem que estava em conflito.

**O que observar:**

* **Taxa de conflitos**: filtre os eventos `gamesave_version_finalized` em que `Conflict` está presente. Uma taxa de conflitos crescente pode indicar que os jogadores trocam de dispositivo com frequência sem sincronizar ou que a cadência de salvamento do seu título causa colisões de versão desnecessárias.
* **Preferência entre local e remoto**: compare a proporção de `IsWinner = true` (manteve o local) e `IsWinner = false` (manteve o remoto) para entender como os jogadores resolvem os conflitos. Uma forte tendência para um dos lados pode indicar um problema de UX no prompt de conflito.
* **Padrões de conflito entre dispositivos**: use `DeviceType` e `PlayerIdentityProvider` nos eventos de conflito para entender quais combinações de plataformas são mais propensas a conflitos.

### Cenário: versão válida conhecida e reversão

O mecanismo de "válida conhecida" permite marcar uma versão específica como ponto de restauração confiável. Se o salvamento de um jogador for corrompido ou ele precisar se recuperar, o sistema poderá reverter para a versão válida conhecida mais recente e criar uma nova versão a partir dela.

**O que você vê:**

* Um evento `gamesave_version_marked_known_good` quando você designa uma versão como ponto de restauração, com o número de `Version` e o carimbo de data/hora `MarkedAt`.
* Se ocorrer uma reversão, o sistema emitirá um novo evento `gamesave_version_finalized` com `IsGeneratedByRollback = true`. O conteúdo dessa nova versão se baseia na versão válida conhecida, mas ela recebe um novo número de versão incrementado.
* A versão gerada pela reversão também pode ter dados de `Conflict` se a reversão tiver sido disparada como parte de uma resolução de conflito.

**O que observar:**

* **Frequência de reversões**: acompanhe os eventos `gamesave_version_finalized` em que `IsGeneratedByRollback = true`. Reversões frequentes em um título podem indicar problemas de corrupção de salvamentos ou na lógica de salvamento do título.
* **Atualidade da versão válida conhecida**: compare a `Version` em `gamesave_version_marked_known_good` com a `Version` finalizada mais recente do mesmo jogador. Uma grande diferença significa que o jogador perderia um progresso significativo se fosse necessária uma reversão.
* **Correlação entre reversão e conflito**: se as versões geradas por reversão aparecerem com frequência junto com dados de conflito, esse padrão pode sugerir que sua estratégia de resolução de conflitos está disparando reversões como efeito colateral.


## Related topics

- [Referência do modelo de eventos do PlayStream para o PlayFab](/pt-BR/services/playfab/api-references/events/index.md)
- [Eventos do PlayStream](/pt-BR/services/playfab/data-analytics/ingest-data/playstream-events.md)
- [Recursos de eventos do PlayStream](/pt-BR/services/playfab/data-analytics/ingest-data/playstream-event-capabilities.md)
- [Início rápido das propriedades personalizadas do jogador](/pt-BR/services/playfab/live-service-management/game-configuration/segmentation/player-custom-properties-qs.md)
- [Usando ações do CloudScript com o PlayStream](/pt-BR/services/playfab/data-analytics/acting-data/action-rules-using-cloudscript-actions-with-playstream.md)
