Inventory

Integration Guide
After the user purchases a Virtual Item, it is added to the user's Inventory. It is possible also to add a virtual item to the user's inventory without going through the purchase process.
Inventory Item structure
/// <summary>
/// Base inventory structure
/// </summary>
[System.Serializable]
public sealed class VirtualItemInventoryData
{
/// <summary>
/// Unique id of the inventory item
/// </summary>
public string id;
/// <summary>
/// The Virtual Item id for this inventory item
/// </summary>
public string virtualItemId;
/// <summary>
/// List of application ids where this item is used
/// </summary>
public List<string> appIds;
/// <summary>
/// List of tags to filter the offers
/// You can place multiple inventory items into one category tag
/// For example in a shooter game: "guns", "rifles"
/// Later in the UI you can get only inventory items for specific tag
/// </summary>
public List<string> tags;
/// <summary>
/// How many items the user have in inventory
/// If the Virtual Item is non stackable, then this value should be
/// always one
/// For stackable Virtual Items it represents the count of Virtual Items
/// in user inventory.
/// </summary>
public int quantity;
/// <summary>
/// The upgrades for non stackable virtual item
/// The user can upgrade the Virtual Items he owns
/// The upgrades can change some of the properties of Virtual Items
/// It is possible to have multiple upgrades with different names and values
/// for one item.
/// </summary>
public VirtualItemUpgrade[] itemUpgrades;
/// <summary>
/// List of inventory item custom properties. It is used to store
/// game specific properties in json format.
/// For example: you can attach some properties like
/// "additiona_description", "in_app_products", "display_animation" for this
/// inventory item
/// </summary>
public List<Properties> properties;
}

Retrieving items from inventory:

The following method gets all inventory items for the currently logged in user:
using System.Collections.Generic;
using RGN.Modules.Inventory;
namespace SomeNamespace
{
internal sealed class GetInventoryItems
{
public async void GetInventoryAsync()
{
List<InventoryItemData> inventoryItems =
await InventoryModule.I.GetAllForCurrentAppAsync();
for (int i = 0; i < inventoryItems.Count; i++)
{
var item = inventoryItems[i];
UnityEngine.Debug.Log(item.virtualItemId);
}
}
}
}
The method above retrieves a list of Virtual Item IDs that the user has purchased. To get the virtual items data, you can use the VirtualItemsModule.I.GetVirtualItemsByIdsAsync() method.

Retrieving inventory items with Virtual Items data:

The following method will get the inventory items with the Virtual Item data included:
using System.Collections.Generic;
using RGN.Modules.Inventory;
namespace SomeNamespace
{
internal sealed class GetInventoryItemsWithVirtualItemsData
{
public async void GetInventoryWithVirtualItemDataAsync()
{
List<InventoryItemData> inventoryItems =
await InventoryModule.I.GetWithVirtualItemsDataForCurrentAppAsync();
for (int i = 0; i < inventoryItems.Count; i++)
{
var item = inventoryItems[i];
UnityEngine.Debug.Log(item.GetVirtualItem().name);
}
}
}
}
In the code above you can see that the inventory item contains now a non-null Item property. It is the virtual item data.

Upgrade inventory item:

This can be used to add a booster for any purchased non-stackable virtual item.
By default, if you don't specify the upgradeId the "default" is used:
using RGN.Modules.Inventory;
namespace SomeNamespace
{
internal sealed class UpgradeInventoryItem
{
public async void UpgradeInventoryItemAsync()
{
string inventoryItemId = "some_id_for_item_in_inventory";
var result = await InventoryModule.I.UpgradeAsync(inventoryItemId, 42);
}
}
}
But you can also have multiple upgrade ids for the same item:
using RGN.Modules.Inventory;
namespace SomeNamespace
{
internal sealed class CustomUpgradeIdInventoryItem
{
public async void UpgradeInventoryItemAsync()
{
string inventoryItemId = "some_id_for_item_in_inventory";
await InventoryModule.I.UpgradeAsync(inventoryItemId, 13, null, "damage");
await InventoryModule.I.UpgradeAsync(inventoryItemId, 27, null, "reload");
}
}
}
It is only possible to upgrade non-stackable virtual items. If the virtual item is stackable, then the upgrade method will throw an exception.