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

# Tablas de clasificación de grupos

> Clasifique hermandades, clanes y alianzas creando tablas de clasificación de PlayFab que usan el tipo de entidad de grupo para comparar puntuaciones de equipos junto con las tablas de clasificación de jugadores.

En este tutorial, vamos a aprender a usar entidades de grupo en una tabla de clasificación. Para comprender este concepto,
vamos a empezar con un ejemplo de un juego "RPG" centrado en la terraformación de planetas. Como jugador, necesita construir y desarrollar estructuras
en cada planeta, recolectar recursos, crear sus propias naves y también establecer defensas, porque otros jugadores podrían atacarle para robarle sus cosas.
Ahora bien, un aspecto clave de este juego es que los jugadores pueden iniciar alianzas con el objetivo de crear un equipo y atacar a otros jugadores como grupo.

Con este contexto en mente, queremos crear una tabla de clasificación para las alianzas, de modo que podamos saber cuál es la alianza más fuerte
de todo el universo.

Algunos aspectos clave que hay que tener en cuenta antes de profundizar en cómo funcionan las tablas de clasificación de grupos:

* Obtenga más información sobre el modelo de programación de entidades aquí: [Modelo de programación de entidades](/services/playfab/live-service-management/game-configuration/entities).
* Consulte cómo funcionan los grupos aquí: [Grupos](/services/playfab/community/associations/groups/quickstart).

## Creación de una tabla de clasificación

Según el juego y el tipo de escenarios que vaya a tener, lo más probable es que cree varias tablas de clasificación.
En este contexto concreto, queremos mostrar dos escenarios diferentes para este juego y cómo usar el servicio para abordar cada uno de ellos.

### Tablas de clasificación de jugadores

En este ejemplo, tenemos jugadores que están terraformando planetas y ganan puntos de experiencia al realizar determinadas acciones en el juego.
Así que vamos a tener una tabla de clasificación para hacer el seguimiento de esa experiencia a nivel de jugador. Este proceso sigue el mismo comportamiento
que se presentó en otros tutoriales como [Creación de una tabla de clasificación básica](/services/playfab/community/leaderboards/create-basic-leaderboard). Ahora bien, el aspecto clave aquí
es que el parámetro EntityType debe ser `"title_player_account"`, de modo que sea solo para jugadores.

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

### Tablas de clasificación de grupos

Ahora vayamos al aspecto del juego que se presentó en el ejemplo: las alianzas. Podemos crear alianzas en PlayFab usando
la entidad `"group"`. Esta entidad de grupo nos permite tener una estructura a la que los jugadores pueden unirse; también tiene roles y otras características interesantes que
potencian este tipo de escenarios en los juegos. Para la creación de la tabla de clasificación necesitamos tener claras dos cosas.

* El parámetro EntityType debe ser `"group"`.
* Esta tabla de clasificación es independiente. Por lo tanto, agregar una puntuación para una alianza es un proceso manual separado de la tabla de clasificación de jugadores. Este comportamiento
  permite diferentes maneras en que las puntuaciones se relacionan con los jugadores, o podría tratarse de una nueva métrica solo aplicable a los grupos.

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

## Adición de datos a la tabla de clasificación

Después de crear ambas tablas de clasificación, necesitamos ver cómo podemos agregarles datos. Como se mencionó antes en el ejemplo anterior,
estas tablas de clasificación son independientes entre sí, lo que da al desarrollador el control para aplicar lógica personalizada sobre
cómo funcionan las puntuaciones para las alianzas (grupos).

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

El código para agregar entradas a la tabla de clasificación de jugadores o a la tabla de clasificación de grupos es el mismo en este escenario. Pero este comportamiento no siempre
es así, porque podríamos tener una tabla de clasificación con cinco columnas para jugadores, pero luego podríamos tener otra tabla de clasificación para grupos con una sola columna.
Describimos más sobre las tablas de clasificación de varias columnas en este tutorial: [Cómo hacer más con las tablas de clasificación](/services/playfab/community/leaderboards/doing-more-with-leaderboards).

Algo que hay que tener siempre presente es que necesita proporcionar el `EntityId` correcto al servicio. Si tiene una tabla de clasificación de jugadores,
las entidades son `"title_player_account"`; si la tabla de clasificación está compuesta por grupos, entonces necesita proporcionar entidades que sean `"group`.

## Recuperación de datos de la tabla de clasificación

Ahora, para obtener los datos de la tabla de clasificación, tenemos todas las opciones descritas en [Cómo hacer más con las tablas de clasificación](/services/playfab/community/leaderboards/doing-more-with-leaderboards), excepto la API GetFriendLeaderboard.

## Nombre para mostrar en las tablas de clasificación de grupos

Por último, otro detalle que podemos hacer con las tablas de clasificación de grupos es establecer el nombre para mostrar con el nombre de grupo de la entidad.
Así, si tiene una alianza llamada "Raiders", este nombre de grupo se asignará a la entidad con la propiedad `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;
}
```

En este ejemplo, creamos un grupo llamando al método `CreateGroupAsync`. El primer paso de esta ejecución es devolver el objeto Group,
que vamos a usar para establecer el nombre para mostrar. Realizamos este proceso asignando el nombre del grupo a la entidad mediante el
objeto `SetDisplayNameRequest` y ejecutando después el método `PlayFabProfilesAPI.SetDisplayNameAsync`.

## Conclusiones

En este tutorial, aprendimos a realizar las siguientes operaciones:

* Crear una tabla de clasificación de grupos.
* Aprender a alimentar esa tabla de clasificación con datos.
* Recuperar la tabla de clasificación.
* Cambiar el displayName para que muestre el nombre del grupo.

## Consulte también

* [Cómo hacer más con las tablas de clasificación](/services/playfab/community/leaderboards/doing-more-with-leaderboards).
* [Creación de una tabla de clasificación básica](/services/playfab/community/leaderboards/create-basic-leaderboard)
* [Niveles manuales](/services/playfab/community/leaderboards/manual-tiers).
* [Límites](/services/playfab/community/leaderboards/limits-leaderboards).
* [Cuota](/services/playfab/community/leaderboards/quota-leaderboards).
* [Tablas de clasificación de temporada](/services/playfab/community/leaderboards/seasonal-leaderboards).
* [Clasificación de jugadores por estadísticas](/services/playfab/community/leaderboards/leaderboards-linked-to-stats)
* [Adición de datos contextuales a las tablas de clasificación](/services/playfab/community/leaderboards/metadata-leaderboards)
* [Referencia de la API](/services/playfab/community/leaderboards/api-reference)
* [Tablas de clasificación y CloudScript](/services/playfab/community/leaderboards/leaderboards-cloudscript).
* [Tablas de clasificación con PlayStream](/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry)


## Related topics

- [Tablas de clasificación de temporada](/es/services/playfab/community/leaderboards/seasonal-leaderboards.md)
- [Cuota de tablas de clasificación](/es/services/playfab/community/leaderboards/quota-leaderboards.md)
- [Límites de las tablas de clasificación](/es/services/playfab/community/leaderboards/limits-leaderboards.md)
- [Inicio rápido de tablas de clasificación](/es/services/playfab/community/leaderboards/quickstart-leaderboards.md)
- [Creación de una tabla de clasificación básica](/es/services/playfab/community/leaderboards/create-basic-leaderboard.md)
