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

# Pilas de inventario

> Comprenda las pilas de inventario de PlayFab Economy v2 para agrupar artículos idénticos con datos, cantidades y expiraciones únicos en el inventario de un jugador.

# Pilas

<Info>
  Economy v2 ya está disponible con carácter general. Para obtener soporte técnico y enviar comentarios, vaya al [foro de PlayFab](https://community.playfab.com).
</Info>

El servicio de inventario de Economy V2 introduce el concepto de pilas, que puede agregar mayor flexibilidad y compatibilidad para sus necesidades de inventario. Las pilas permiten que existan instancias separadas y distintas del mismo artículo dentro del mismo inventario. Esta característica permite escenarios de organización dentro del juego, la posibilidad de establecer distintas propiedades de artículo, ¡y mucho más!

Los artículos con el mismo `Id` se pueden almacenar como pilas del artículo, cada una con su propia cantidad y diferenciadas por `StackId`. Si no se especifica, las acciones de inventario suelen usar la pila predeterminada con el StackId: `default`. La pila predeterminada se puede eliminar. La próxima vez que se produzca una adición o transferencia sin un StackId (o que use el StackId predeterminado), la pila predeterminada se vuelve a crear

## Administración de inventarios y pilas

A continuación se ofrece un desglose detallado de las [API de inventario](/services/playfab/economy-monetization/economy-v2/inventory) y sus interacciones con las pilas.

### Adición de artículos al inventario

En la API `AddInventoryItems`, puede definir un `StackId` en el parámetro `Item`. Este parámetro define la pila que se está incrementando o el identificador de la nueva pila que se está creando.

Un ejemplo de solicitud `AddInventoryItems` con un `StackId`:

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack"
    },
    "Amount": 5,
}
```

La solicitud anterior crearía una pila completamente nueva del artículo con una cantidad de 5 y un StackId de `NewStack`, o bien agregaría 5 a la pila `NewStack` existente si ya existiera

### Sustracción de artículos del inventario

En la API `SubtractInventoryItems`, el StackId se usa para definir de qué pila se sustrae. Además, hay un valor booleano `DeleteEmptyStacks` que se puede establecer y que elimina la pila si la cantidad sustraída hace que la pila tenga una cantidad de 0.

Intentar sustraer de una pila más de la cantidad actual de la pila generará un error.

Un ejemplo de solicitud `SubtractInventoryItems` con StackId:

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack"
    },
    "Amount": 5,
    "DeleteEmptyStacks": true,
}
```

La solicitud anterior sustraería 5 de la pila con el identificador `NewStack` y eliminaría la pila si tuviera exactamente una cantidad de 5.

### Actualización de artículos del inventario

En la API `UpdateInventoryItems`, puede definir un `StackId` en el parámetro `Item`. Este parámetro define la pila que se está actualizando o el identificador de la nueva pila que se está creando.

Un ejemplo de solicitud `UpdateInventoryItems`:

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack",
        "Amount": 5
    }
}
```

La solicitud anterior crearía una pila completamente nueva del artículo con una cantidad de 5 y un StackId de `NewStack`, o bien establecería la cantidad de `NewStack` en 5 si ya existiera

### Eliminación de artículos del inventario

La API `DeleteInventoryItems` se usa para eliminar una pila completa de artículos del inventario de un jugador. Se puede proporcionar un `StackId` para definir la pila específica del artículo que se va a eliminar.

Un ejemplo de solicitud `DeleteInventoryItems`:

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack"
    },
}
```

### Compra de artículos de inventario

La API `PurchaseInventoryItems` usa el precio del artículo definido en el catálogo, deduce el costo del inventario del jugador y lo intercambia por la cantidad deseada del artículo. Debe especificar el `Item` que quiere comprar y el `Amount` del artículo que quiere comprar.

Cuando realiza compras con pilas, hay algunos parámetros relevantes:

* Para `PriceAmounts`, puede definir un `StackId` opcional para cada artículo del precio (es decir, los artículos que se gastan) para definir de qué pila se deducirán los artículos gastados
* Para el objeto `Item`, puede definir un `StackId` opcional que representa la pila en la que se colocarán los artículos recibidos
* Hay un valor booleano `DeleteEmptyStacks` que se puede establecer y que elimina la pila si la cantidad sustraída hace que la pila tenga una cantidad de 0.

<Note>
  Para obtener más información sobre la compra de artículos, consulte [PurchaseInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/purchase-inventory-items).
</Note>

Un ejemplo de solicitud `PurchaseInventoryItems` con pilas:

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "LaserSword",
        "StackId": "MyLaserSwordStack"
    },
    "Amount": 10,
    "PriceAmounts": [
        {
            "ItemId": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
            "Amount": 5,
            "StackId": "MyNewStack",
        }
    ],
    "DeleteEmptyStacks": true,
}
```

### Transferencia de artículos de inventario

Cuando usa la API `TransferInventoryItems` con pilas, hay algunos parámetros relevantes:

* En el objeto `GivingItem`, puede definir un `StackId` opcional que representa la pila de la que se tomarán los artículos entregados
* En el objeto `ReceivingItem`, puede definir un `StackId` opcional que representa la pila en la que se colocarán los artículos recibidos
* Hay un valor booleano `DeleteEmptyStacks` que se puede establecer y que elimina la pila si la cantidad de `GivingItem` hace que la pila tenga una cantidad de 0

Un ejemplo de solicitud `TransferInventoryItems` con pilas:

```json theme={null}
{
    "GivingEntity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "ReceivingEntity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "GivingItem": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "default",
    },
    "ReceivingItem": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "MyNewStack",
    },
    "Amount": 10,
    "DeleteEmptyStacks": true
}
```

### API ExecuteInventoryOperations

Puede usar los parámetros `StackId` y `DeleteEmptyStacks` en los objetos `Operation` de la API `ExecuteInventoryOperations`. Estos parámetros le permiten agrupar por lotes varias operaciones de inventario mediante pilas.

Un ejemplo de solicitud `ExecuteInventoryOperations` con pilas:

```json theme={null}
"Entity": {
    "Type": "title_player_account",
    "Id": "ABCD12345678"
 },
"Operations": [
    {
        "Update": {
            "Item": {
                "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
                "StackId": "default",
                "Amount": 10
            }
        }
    },
    {
        "Subtract": {
            "Item": {
                "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
                "StackId": "MyNewStack"
            },
            "Amount": 5
        }
    }
]
```

### Adición de propiedades personalizadas con DisplayProperties y NewStackValues

Puede establecer propiedades de artículo personalizadas en los artículos del inventario con el parámetro `DisplayProperties`. El establecimiento de propiedades se puede realizar en las API `AddInventoryItems`, `PurchaseInventoryItems` y `TransferInventoryItems`, pero **solo** cuando se crea una pila nueva. Para establecer propiedades de presentación en artículos nuevos, se debe establecer el parámetro `NewStackValues` en la solicitud de la API.

Un ejemplo de solicitud `AddInventoryItems` con `NewStackValues`:

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "20a645ce-a3bf-4fcb-8e67-36aa7bf0331d",
        "StackId": "NewStack"
    },
    "Amount": 15,
    "NewStackValues": {
        "DisplayProperties": {
            "DifficultyRating":5,
            "IsMagic": true,
            "Rarity": "Legendary"
        }
    }
}
```

Para actualizar las propiedades de presentación de artículos existentes, se puede usar la API `UpdateInventoryItems` para modificar directamente las propiedades.


## Related topics

- [Información general de Economy v2](/es/services/playfab/economy-monetization/economy-v2/overview.md)
- [PFInventoryInventoryItemReference](/es/services/playfab/api-references/c/pfinventorytypes/structs/pfinventoryinventoryitemreference.md)
- [PFInventoryPurchasePriceAmount](/es/services/playfab/api-references/c/pfinventorytypes/structs/pfinventorypurchasepriceamount.md)
- [¿Qué es PlayFab Economy?](/es/services/playfab/economy-monetization/economy-what-is.md)
- [API de inventario de PlayFab](/es/services/playfab/economy-monetization/economy-v2/inventory/index.md)
