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

# Especificación de atributos con los tickets

> Aprenda a adjuntar atributos de jugador y de ticket a los tickets de emparejamiento de PlayFab para que las reglas de la cola puedan evaluar la habilidad, la latencia y otros criterios.

Las reglas determinan qué tickets se emparejan, en función de los atributos especificados por los jugadores. Estos atributos pueden especificarse de dos maneras:

1. Dentro de la solicitud de creación del ticket
2. En la entidad del jugador

Este tutorial describe cómo especificar esos atributos.

## Especificación dentro de la solicitud de creación del ticket

Para las reglas configuradas con el tipo de atributo "User", los atributos se especifican en
una solicitud `CreateMatchmakingTicket`, junto a la entidad del jugador dentro de un `DataObject` de atributos.

```json theme={null}
POST https://{{TitleId}}.playfabapi.com/Match/CreateMatchmakingTicket
{
    "Creator": {
        "Entity": {
            "Id": "A8140AB9109712B",
            "Type": "title_player_account",
            "TypeString": "title_player_account"
        },
        "Attributes": {
            "DataObject": {
                "mu": 16.0,
                "sigma": 1.8,
                "nestExample": {
                    "exp": 1500
                }
            }
        }
    },
    "MembersToMatchWith": [],
    "GiveUpAfterSeconds": 2,
    "QueueName": "SkillRuleQueue"
}
```

A continuación se muestra un ejemplo de configuración de cola con una regla `DifferenceRule`. Esta regla
contiene una ruta de atributo y un origen que recogerán el valor 16.0,
especificado por la solicitud `CreateMatchmakingTicket` anterior.

```json theme={null}
"MatchmakingQueue": {
    "Name": "SkillRuleQueue",
    "MinMatchSize": 2,
    "MaxMatchSize": 2,
    "ServerAllocationEnabled": false,
    "Rules": [
        {
            "Type": "DifferenceRule",
            "Difference": 3,
            "MergeFunction": "Average",
            "Attribute": {
                "Path": "mu",
                "Source": "User"
            },
            "AttributeNotSpecifiedBehavior": "MatchAny",
            "Weight": 1,
            "Name": "SkillRule",
            "SecondsUntilOptional": 10
        }
    ]
}
```

<Note>
  Las reglas pueden navegar por el `DataObject` mediante una ruta JSON. Si se reemplaza el campo Path por "nestExample.exp", la regla usaría el valor 1500 para el ticket creado anteriormente.
</Note>

## Especificación mediante entidades de jugador

Para las reglas con el tipo de atributo "Player Entity", los atributos se especifican mediante una llamada independiente a la API `SetObjects`.

Esto permite almacenar datos de un usuario, en lugar de que el título tenga que especificarlos en cada llamada de creación de ticket.
Esto puede tener más sentido para valores que persisten para un usuario o cuyo envío no puede confiarse a los usuarios. A continuación se muestra un ejemplo de esta llamada a `SetObjects`.

```json theme={null}
POST https://{{TitleID}}.playfabapi.com/Object/SetObjects
{
    "Objects": [
        {
            "ObjectName": "playerSkill",
            "DataObject": {
                "skillDetail": {
                    "mu": 16.0,
                    "sigma": 2.0
                }
            }
        }
    ],
    "Entity": {
        "Id": "A8140AB9109712B",
        "Type": "title_player_account",
        "TypeString": "title_player_account"
    }
}
```

Una cola con la siguiente configuración recuperaría el valor 16.0 para usarlo en su regla `DifferenceRule` cuando se cree un ticket con este jugador.

<Note>
  En el campo `Path`, el primer elemento después de la raíz es el `ObjectName`, lo que le permite elegir a qué objeto almacenado hacer referencia.
</Note>

```json theme={null}
"MatchmakingQueue": {
    "Name": "PlayerEntityRuleQueue",
    "MinMatchSize": 2,
    "MaxMatchSize": 2,
    "ServerAllocationEnabled": false,
    "Rules": [
        {
            "Type": "DifferenceRule",
            "Difference": 1,
            "MergeFunction": "Average",
            "Attribute": {
                "Path": "$.playerSkill.skillDetail.mu",
                "Source": "PlayerEntity"
            },
            "AttributeNotSpecifiedBehavior": "MatchAny",
            "Weight": 1,
            "Name": "SkillRule",
            "SecondsUntilOptional": 10
        }
    ]
}
```

## Formatos especiales

La mayoría de las reglas usan atributos que son cadenas o valores numéricos, y son simplemente esos valores en formato JSON. Las reglas que requieren que se pasen atributos más complejos se enumeran a continuación.

### Regla de selección de región

Una regla de selección de región requiere una matriz de mediciones de latencia con el esquema especificado. El siguiente ejemplo es el formato de atributo esperado para una regla de selección de región, que se muestra junto a los dos atributos usados en el ejemplo de solicitud `CreateMatchmakingTicket` a modo de comparación.

```json theme={null}
POST https://{{TitleId}}.playfabapi.com/Match/CreateMatchmakingTicket
{
    "Creator": {
        "Entity": {
            "Id": "A8140AB9109712B",
            "Type": "title_player_account",
            "TypeString": "title_player_account"
        },
        "Attributes": {
            "DataObject": {
                "mu": 16.0,
                "sigma": 1.8,
                "Latencies": [
                    {
                        "region": "EastUs",
                        "latency": 150
                    },
                    {
                        "region": "WestUs",
                        "latency": 400
                    }
                ]
            }
        }
    },
    "MembersToMatchWith": [],
    "GiveUpAfterSeconds": 2,
    "QueueName": "ServerEnabledQueue"
}
```

En este ejemplo, `Latencies` debe coincidir con el campo al que hace referencia el campo `Path` de la regla. A continuación se incluye, en la cola siguiente, un ejemplo de regla que usaría el campo `Latencies`.

```json theme={null}
"MatchmakingQueue": {
    "Name": "ServerEnabledQueue",
    "MinMatchSize": 2,
    "MaxMatchSize": 2,
    "ServerAllocationEnabled": true,
    "BuildId": "88b3e315-829c-4b6d-9872-74f427ad5331",
    "Rules": [
        {
            "Type": "RegionSelectionRule",
            "MaxLatency": 1000,
            "Path": "Latencies",
            "Weight": 1,
            "Name": "RegionRule",
            "SecondsUntilOptional": 60
        }
    ]
}
```

<Note>
  Al usar la regla de selección de región para una cola que tiene habilitada la asignación de servidores, las regiones deben ser regiones de Azure válidas. Puede encontrar la lista de regiones de Azure válidas [aquí](/services/playfab/api-references/events/data-types/azureregion).
</Note>


## Related topics

- [Solución alternativa para la conexión punto a punto](/es/services/playfab/multiplayer/matchmaking/peer-to-peer.md)
- [Descripción del peso de las reglas en el emparejamiento](/es/services/playfab/multiplayer/matchmaking/rule-weights.md)
- [Control de casos de error comunes](/es/services/playfab/multiplayer/matchmaking/error-cases.md)
- [Uso del emparejamiento de SmartMatch](/es/services/xbox-services/multiplayer/matchmaking/concepts/live-matchmaking-how-tos.md)
- [Uso de vales de reposición de servidor - API REST](/es/services/playfab/multiplayer/matchmaking/backfill-tickets.md)
