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

# Tabelas de classificação sazonais

> Configure tabelas de classificação sazonais do PlayFab com VersionConfiguration para redefinir as classificações mensalmente ou em uma cadência personalizada e consultar versões anteriores de torneios.

Neste tutorial, explicamos o conceito de controle de versão para tabelas de classificação. Há vários casos em que queremos ter
diferentes versões de uma determinada tabela de classificação. Por exemplo, em um jogo com um modo de torneio mensal, a estrutura da tabela de classificação
permanece a mesma, mas os jogadores provavelmente mudam, especialmente em um jogo altamente competitivo.

Continuamos com o exemplo de [Criar tabelas de classificação básicas](/pt-BR/services/playfab/community/leaderboards/create-basic-leaderboard). Imagine que nosso jogo de arcade agora é muito popular. Por isso, é introduzido um novo modo chamado "Top of the Mountain". Todo mês, o jogo oferece um
torneio do qual qualquer jogador pode participar. Quem ficar entre os 100 primeiros será exibido em uma tabela de classificação especial no menu principal,
para que todos possam ver quem é o melhor no jogo.

## Criando uma definição de tabela de classificação para controle de versão

No exemplo anterior, ao criar uma definição de tabela de classificação, havia uma dica sobre a importância do parâmetro `VersionConfiguration`
para o controle de versão. Aqui, detalhamos como usá-lo e como ele funciona.

```C# theme={null}
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        SizeLimit = 1000,
        EntityType = "title_player_account",
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 12,
            ResetInterval = ResetInterval.Month,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "arcadeScoreTournament",
                SortDirection = LeaderboardSortDirection.Descending,
            }          
        }
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
```

A principal diferença deste exemplo em comparação com a tabela de classificação básica é o parâmetro `VersionConfiguration`. Esse parâmetro nos permite definir uma
configuração `MaxQueryableVersions`, que especifica quantas versões da mesma tabela de classificação podemos consultar. Neste caso, nós a definimos para consultar 12 versões,
o que permite consultar as 12 tabelas de classificação mais recentes. O parâmetro `ResetInterval` define com que frequência o processo de redefinição ocorre. Essa ação envolve
criar uma tabela de classificação com a mesma configuração de antes, mas vazia, e o parâmetro de versão muda da seguinte forma: N = N + 1, com N = 0 na
criação da definição da tabela de classificação.

Por exemplo, digamos que temos uma tabela de classificação com o parâmetro de versão igual a dois e cem entradas. Agora,
quando incrementamos a versão dessa tabela de classificação, o resultado será uma nova tabela de classificação vazia, com o parâmetro de versão igual a três.
Enquanto isso, a tabela de classificação anterior permanece no sistema para ser consultada.

O `ResetInterval` pode funcionar de várias formas. Neste exemplo, ele é mensal, mas pode ser alterado de acordo com as necessidades do desenvolvedor. Neste caso
específico, significa que a tabela de classificação será redefinida automaticamente todo mês a partir do momento em que foi configurada. Oferecemos suporte às seguintes estratégias de redefinição:

* Day
* Hour
* Manual
* Month
* Week

Para obter mais informações sobre todas as configurações disponíveis, confira a documentação da API aqui:
[Referência da API: Criar uma tabela de classificação](https://learn.microsoft.com/en-us/rest/api/playfab/progression/leaderboards/create-leaderboard-definition)

## Incrementando a versão de uma tabela de classificação

Com essa nova configuração, podemos ter várias versões da mesma tabela de classificação para o modo de torneio.
Mas o que acontece se precisarmos redefinir manualmente a tabela de classificação devido a um problema e recomeçar o torneio?
Nesses casos, podemos realizar uma redefinição manual usando a API. Veja um exemplo usando o SDK:

```C# theme={null}

public static async Task ResetLeaderboards(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    IncrementLeaderboardVersionRequest resetLeaderboardRequest = new IncrementLeaderboardVersionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
    };

    PlayFabResult<PlayFab.LeaderboardsModels.IncrementLeaderboardVersionResponse> resetLeaderboardResponse = await leaderboardsAPI.IncrementLeaderboardVersionAsync(resetLeaderboardRequest);
}

```

## Consultando versões mais antigas

Agora, se precisarmos consultar uma versão mais antiga de uma tabela de classificação, podemos usar o parâmetro `version` disponível em todas as APIs GetLeaderboards.
Veja um exemplo usando o SDK:

```C# theme={null}
public static async Task<List<EntityLeaderboardEntry>> GetLeaderboard(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    GetEntityLeaderboardRequest getLbRequest = new GetEntityLeaderboardRequest()
    {
        LeaderboardName = leaderboardName,
        StartingPosition = 1,
        PageSize = 20,
        AuthenticationContext = context,
        Version = 1
    };

    PlayFabResult<GetEntityLeaderboardResponse> lbResponse = await leaderboardsAPI.GetLeaderboardAsync(getLbRequest);
    
    return lbResponse.Result.Rankings;
}
```

Agora estamos preparados para lidar com qualquer desafio de controle de versão nas tabelas de classificação. Um aspecto importante aqui é que o número de definições de tabelas de classificação
que decidimos manter como versões será medido, pois usa armazenamento no serviço. Saiba mais sobre isso aqui:

* [Gravações em tabelas de classificação](/pt-BR/services/playfab/pricing/meters/leaderboard-meters).

## Conclusões

Neste tutorial, aprendemos a realizar as seguintes operações:

* Criar uma tabela de classificação com a estratégia de redefinição correta.
* Incrementar a versão de uma tabela de classificação.
* Consultar versões mais antigas de uma tabela de classificação.

## Confira também

* [Fazendo mais com tabelas de classificação](/pt-BR/services/playfab/community/leaderboards/doing-more-with-leaderboards).
* [Criar uma tabela de classificação básica](/pt-BR/services/playfab/community/leaderboards/create-basic-leaderboard).
* [Classificando jogadores por estatísticas](/pt-BR/services/playfab/community/leaderboards/leaderboards-linked-to-stats).
* [Tabelas de classificação de grupos](/pt-BR/services/playfab/community/leaderboards/group-leaderboards).
* [Níveis manuais](/pt-BR/services/playfab/community/leaderboards/manual-tiers).
* [Limites](/pt-BR/services/playfab/community/leaderboards/limits-leaderboards).
* [Cota](/pt-BR/services/playfab/community/leaderboards/quota-leaderboards).
* [Adicionar dados contextuais às tabelas de classificação](/pt-BR/services/playfab/community/leaderboards/metadata-leaderboards).
* [Referência da API](/pt-BR/services/playfab/community/leaderboards/api-reference).
* [Tabelas de classificação e CloudScript](/pt-BR/services/playfab/community/leaderboards/leaderboards-cloudscript).
* [Tabelas de classificação com PlayStream](/pt-BR/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry)


## Related topics

- [Tabelas de classificação de grupos](/pt-BR/services/playfab/community/leaderboards/group-leaderboards.md)
- [Limites das tabelas de classificação](/pt-BR/services/playfab/community/leaderboards/limits-leaderboards.md)
- [Cota das tabelas de classificação](/pt-BR/services/playfab/community/leaderboards/quota-leaderboards.md)
- [Tabelas de classificação usando o Azure Functions](/pt-BR/services/playfab/community/leaderboards/leaderboards-cloudscript.md)
- [Início rápido das tabelas de classificação](/pt-BR/services/playfab/community/leaderboards/quickstart-leaderboards.md)
