> ## 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 de groupe

> Classez les guildes, les clans et les alliances en créant des classements PlayFab qui utilisent le type d'entité de groupe pour comparer les scores des équipes en parallèle des classements de joueurs.

Dans ce tutoriel, nous allons apprendre à utiliser des entités de groupe dans un classement. Pour comprendre ce concept,
nous allons commencer par l'exemple d'un jeu « RPG » axé sur la terraformation de planètes. En tant que joueur, vous devez construire et développer des structures
sur chaque planète, recueillir des ressources, créer vos propres vaisseaux et aussi mettre en place des défenses, car d'autres joueurs pourraient vous attaquer pour voler vos biens.
Un aspect clé de ce jeu est que les joueurs peuvent former des alliances dans le but de créer une équipe et d'attaquer d'autres joueurs en groupe.

Dans ce contexte, nous voulons créer un classement pour les alliances, afin de savoir quelle est l'alliance la plus forte
de tout l'univers.

Quelques aspects clés à garder en tête avant d'approfondir le fonctionnement des classements de groupe :

* Pour en savoir plus sur le modèle de programmation d'entités : [Modèle de programmation d'entités](/fr-CA/services/playfab/live-service-management/game-configuration/entities).
* Découvrez le fonctionnement des groupes ici : [Groupes](/fr-CA/services/playfab/community/associations/groups/quickstart).

## Création d'un classement

Selon le jeu et le type de scénarios que vous aurez, vous créerez probablement plusieurs classements.
Dans ce contexte particulier, nous voulons montrer deux scénarios différents pour ce jeu et comment utiliser le service pour répondre à chacun d'eux.

### Classements de joueurs

Dans cet exemple, des joueurs terraforment des planètes et gagnent des points d'expérience en effectuant certaines actions dans le jeu.
Nous allons donc avoir un classement pour suivre cette expérience au niveau du joueur. Ce processus suit le même comportement
que celui présenté dans d'autres tutoriels comme [Créer un classement de base](/fr-CA/services/playfab/community/leaderboards/create-basic-leaderboard). L'aspect clé ici
est que le paramètre EntityType doit être `"title_player_account"` afin que le classement soit réservé aux joueurs.

```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 = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "XP",
                SortDirection = LeaderboardSortDirection.Descending,
            }        
        }
    };

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

### Classements de groupe

Passons maintenant à l'aspect du jeu présenté dans l'exemple : les alliances. Nous pouvons créer des alliances dans PlayFab à l'aide
de l'entité `"group"`. Cette entité de groupe nous offre une structure que les joueurs peuvent rejoindre; elle comporte aussi des rôles et d'autres fonctionnalités intéressantes qui
favorisent ce type de scénarios dans les jeux. Pour la création du classement, deux éléments doivent être clairs.

* Le paramètre EntityType doit être `"group"`.
* Ce classement est indépendant. L'ajout d'un score pour une alliance est donc un processus manuel distinct du classement des joueurs. Ce comportement
  permet de relier les scores aux joueurs de différentes façons, ou il peut s'agir d'une nouvelle mesure applicable uniquement aux groupes.

```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 = "group",
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "Group XP",
                SortDirection = LeaderboardSortDirection.Descending,
            }        
        }
    };

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

## Ajout de données au classement

Après avoir créé les deux classements, nous devons voir comment y ajouter des données. Comme mentionné dans l'exemple précédent,
ces classements sont indépendants l'un de l'autre, ce qui permet au développeur d'appliquer une logique personnalisée sur
le fonctionnement des scores pour les alliances (groupes).

```C# theme={null}
public static async Task UpdateLeaderboardForPlayer(PlayFabAuthenticationContext context, string leaderboardName, string entityId, int score)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    UpdateLeaderboardEntriesRequest updateLeaderboardRequest = new UpdateLeaderboardEntriesRequest()
    {
        Entries = new List<LeaderboardEntryUpdate>()
        {
            new LeaderboardEntryUpdate()
            {
                EntityId = entityId,
                Scores = new List<string> { score.ToString()}                
            }
        },
        AuthenticationContext = context,
        LeaderboardName = leaderboardName,
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> updateResult = await leaderboardsAPI.UpdateLeaderboardEntriesAsync(updateLeaderboardRequest);
}
```

Le code pour ajouter des entrées au classement des joueurs ou au classement de groupe est le même dans ce scénario. Mais ce n'est pas
toujours le cas, car nous pourrions avoir un classement à cinq colonnes pour les joueurs, puis un autre classement pour les groupes avec une seule colonne.
Nous décrivons plus en détail les classements à plusieurs colonnes dans ce tutoriel : [Aller plus loin avec les classements](/fr-CA/services/playfab/community/leaderboards/doing-more-with-leaderboards).

Gardez toujours à l'esprit que vous devez fournir le bon `EntityId` au service. Si vous avez un classement de joueurs,
les entités sont `"title_player_account"`; si le classement est composé de groupes, vous devez fournir des entités de type `"group`.

## Récupérer les données du classement

Pour obtenir les données du classement, nous disposons de toutes les options décrites ici [Aller plus loin avec les classements](/fr-CA/services/playfab/community/leaderboards/doing-more-with-leaderboards), à l'exception de l'API GetFriendLeaderboard.

## Nom d'affichage pour les classements de groupe

Enfin, un autre détail que nous pouvons gérer avec les classements de groupe est de définir le nom d'affichage avec le nom de groupe de l'entité.
Ainsi, si vous avez une alliance appelée « Raiders », ce nom de groupe sera associé à l'entité au moyen de la propriété `DisplayName`.

```C# theme={null}
public static async Task<CreateGroupResponse> CreateGroup(string groupName, PlayFabAuthenticationContext context)
{
    var request = new CreateGroupRequest
    {
        GroupName = groupName,
        AuthenticationContext = context
    };
    var response = await PlayFabGroupsAPI.CreateGroupAsync(request);

    SetDisplayNameRequest displayRequest = new SetDisplayNameRequest()
    {
        AuthenticationContext = context,
        DisplayName = groupName,
        Entity = new PlayFab.ProfilesModels.EntityKey()
        {
            Id = response.Result.Group.Id,
            Type = "group",
        },
    };

    PlayFabResult<SetDisplayNameResponse> updateNameResult = await PlayFabProfilesAPI.SetDisplayNameAsync(displayRequest);

    return response.Result;
}
```

Dans cet exemple, nous créons un groupe en appelant la méthode `CreateGroupAsync`. La première étape de cette exécution consiste à retourner l'objet Group,
que nous allons utiliser pour définir le nom d'affichage. Pour ce faire, nous associons le nom du groupe à l'entité à l'aide de
l'objet `SetDisplayNameRequest`, puis nous exécutons la méthode `PlayFabProfilesAPI.SetDisplayNameAsync`.

## Conclusions

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

* Créer un classement de groupe.
* Alimenter ce classement en données.
* Récupérer le classement.
* Modifier le displayName pour qu'il affiche le nom du groupe.

## 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)
* [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).
* [Classements saisonniers](/fr-CA/services/playfab/community/leaderboards/seasonal-leaderboards).
* [Classer les joueurs selon les statistiques](/fr-CA/services/playfab/community/leaderboards/leaderboards-linked-to-stats)
* [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

- [Configurer votre organisation dans Partner Center](/fr-CA/home/onboarding-access/setup-organization.md)
- [Outil de réinitialisation des données de joueur (XblPlayerDataReset.exe)](/fr-CA/tools/tools-services/live-player-data-reset.md)
- [Vue d'ensemble de l'API C Services - PFLeaderboards.h](/fr/services/playfab/api-references/c/pfleaderboards/pfleaderboards_members.md)
- [PFLeaderboardsGetLeaderboardDefinitionResponse](/fr-CA/services/playfab/api-references/c/pfleaderboardstypes/structs/pfleaderboardsgetleaderboarddefinitionresponse.md)
- [PFLeaderboardsLeaderboardDefinition](/fr-CA/services/playfab/api-references/c/pfleaderboardstypes/structs/pfleaderboardsleaderboarddefinition.md)
