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

# Classements saisonniers

> Configurez des classements PlayFab saisonniers avec VersionConfiguration pour réinitialiser les classements selon une cadence mensuelle ou personnalisée et interroger les versions de tournois précédentes.

Dans ce tutoriel, nous expliquons le concept de gestion des versions pour les classements. Il existe plusieurs cas où nous voulons avoir
différentes versions d'un classement donné. Par exemple, dans un jeu doté d'un mode tournoi mensuel, la structure du classement
reste la même, mais les joueurs changent très probablement, surtout dans un jeu très compétitif.

Nous poursuivons avec l'exemple de [Créer des classements de base](/fr-CA/services/playfab/community/leaderboards/create-basic-leaderboard). Imaginons que notre jeu d'arcade est maintenant très populaire. Un nouveau mode appelé « Top of the Mountain » est donc introduit. Chaque mois, le jeu propose un
tournoi auquel tout joueur peut participer. Les joueurs qui se classent parmi les 100 premiers seront affichés dans un classement spécial du menu principal,
afin que tout le monde puisse voir qui est le meilleur au jeu.

## Création d'une définition de classement pour la gestion des versions

Dans l'exemple précédent, lors de la création d'une définition de classement, nous avons évoqué l'importance du paramètre `VersionConfiguration`
pour la gestion des versions. Ici, nous expliquons en détail comment l'utiliser et comment il fonctionne.

```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);
}
```

La principale différence de cet exemple par rapport au classement de base est le paramètre `VersionConfiguration`. Ce paramètre nous permet de définir un
réglage `MaxQueryableVersions`, qui précise combien de versions d'un même classement nous pouvons interroger. Dans ce cas, nous l'avons réglé pour interroger 12 versions,
ce qui permet d'interroger les 12 classements les plus récents. Le paramètre `ResetInterval` définit la fréquence du processus de réinitialisation. Cette action consiste à
créer un classement avec la même configuration qu'auparavant, mais vide, et le paramètre de version change comme suit : N = N + 1, avec N = 0 à la
création de la définition de classement.

Par exemple, supposons que nous avons un classement dont le paramètre de version est égal à deux, avec cent entrées. Maintenant,
lorsque nous incrémentons la version de ce classement, le résultat sera un nouveau classement vide dont le paramètre de version est égal à trois.
Pendant ce temps, le classement précédent reste dans le système et peut être interrogé.

Le `ResetInterval` peut fonctionner de plusieurs façons. Dans cet exemple, il est mensuel, mais il peut être modifié selon les besoins du développeur. Dans ce cas
précis, cela signifie que le classement sera réinitialisé automatiquement chaque mois à partir du moment où il a été configuré. Nous prenons en charge les stratégies de réinitialisation suivantes :

* Day
* Hour
* Manual
* Month
* Week

Pour plus d'informations sur toutes les configurations disponibles, consultez la documentation de l'API ici :
[Référence de l'API - Création d'un classement](https://learn.microsoft.com/en-us/rest/api/playfab/progression/leaderboards/create-leaderboard-definition)

## Incrémentation de la version d'un classement

Avec cette nouvelle configuration, nous pouvons avoir plusieurs versions du même classement pour le mode tournoi.
Mais que se passe-t-il si nous devons réinitialiser manuellement le classement en raison d'un problème et recommencer le tournoi?
Dans de tels cas, nous pouvons effectuer une réinitialisation manuelle à l'aide de l'API. Voici un exemple utilisant le 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);
}

```

## Interrogation des versions antérieures

Si nous devons maintenant interroger une version antérieure d'un classement, nous pouvons utiliser le paramètre `version` disponible dans toutes les API GetLeaderboards.
Voici un exemple utilisant le 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;
}
```

Nous sommes maintenant prêts à relever tous les défis liés à la gestion des versions des classements. Un aspect important ici est que le nombre de définitions de classement
que nous décidons de conserver comme versions sera mesuré, puisqu'elles utilisent du stockage dans le service. Pour en savoir plus à ce sujet :

* [Écritures de classements](/fr-CA/services/playfab/pricing/meters/leaderboard-meters).

## Conclusions

Dans ce tutoriel, nous avons appris à effectuer les opérations suivantes :

* Créer un classement avec la bonne stratégie de réinitialisation.
* Incrémenter la version d'un classement.
* Interroger les versions antérieures d'un classement.

## Voir aussi

* [Aller plus loin avec les classements](/fr-CA/services/playfab/community/leaderboards/doing-more-with-leaderboards).
* [Créer un classement de base](/fr-CA/services/playfab/community/leaderboards/create-basic-leaderboard).
* [Classer les joueurs selon les statistiques](/fr-CA/services/playfab/community/leaderboards/leaderboards-linked-to-stats).
* [Classements de groupe](/fr-CA/services/playfab/community/leaderboards/group-leaderboards).
* [Niveaux manuels](/fr-CA/services/playfab/community/leaderboards/manual-tiers).
* [Limites](/fr-CA/services/playfab/community/leaderboards/limits-leaderboards).
* [Quota](/fr-CA/services/playfab/community/leaderboards/quota-leaderboards).
* [Ajouter des données contextuelles aux classements](/fr-CA/services/playfab/community/leaderboards/metadata-leaderboards).
* [Référence de l'API](/fr-CA/services/playfab/community/leaderboards/api-reference).
* [Classements et CloudScript](/fr-CA/services/playfab/community/leaderboards/leaderboards-cloudscript).
* [Classements avec PlayStream](/fr-CA/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry)


## Related topics

- [PFLeaderboardsGetLeaderboardDefinitionResponse](/fr-CA/services/playfab/api-references/c/pfleaderboardstypes/structs/pfleaderboardsgetleaderboarddefinitionresponse.md)
- [PFLeaderboardsLeaderboardDefinition](/fr-CA/services/playfab/api-references/c/pfleaderboardstypes/structs/pfleaderboardsleaderboarddefinition.md)
- [PFLeaderboardsGetEntityLeaderboardResponse](/fr-CA/services/playfab/api-references/c/pfleaderboardstypes/structs/pfleaderboardsgetentityleaderboardresponse.md)
- [PFLeaderboardsLeaderboardEntryUpdate](/fr/services/playfab/api-references/c/pfleaderboardstypes/structs/pfleaderboardsleaderboardentryupdate.md)
- [Vue d'ensemble de l'API C Services - PFLeaderboards.h](/fr/services/playfab/api-references/c/pfleaderboards/pfleaderboards_members.md)
