Asset Instance Progressions

Asset instance progressions are progressions that track the progressions of Assets.

Starting an Asset instance on a progression is as easy as just starting to add points to it. That progression will then be listed when retrieving progressions for that Asset.

Retrieving Asset instance progressions

Retrieving a single Asset instance progression using the progression key

int assetInstanceId = 1;
string progressionKey = "mage";

LootLockerSDKManager.GetAssetInstanceProgression(assetInstanceId, progressionKey, response =>
{
    if (!response.success) {
        Debug.Log("Failed: " + response.Error);
    }
    
    // Output the asset instance level and show how much points are needed to progress to the next tier
    Debug.Log($"The asset instance is currently level {response.step}");
    if (response.next_threshold != null)
    {
        Debug.Log($"Points needed to reach next level: {response.next_threshold - response.points}");
    }
});

Retrieving all Asset instance progressions

int assetInstanceId = 1;

LootLockerSDKManager.GetAssetInstanceProgressions(assetInstanceId, response =>
{
    if (!response.success) {
        Debug.Log("Failed: " + response.Error);
    }

    // Output the asset instance level and show how much points are needed to progress to the next tier for all asset instance progressions
    foreach (var assetInstanceProgression in response.items)
    {
        Debug.Log($"Current level in {assetInstanceProgression.progression_name} is {assetInstanceProgression.step}");
        if (assetInstanceProgression.next_threshold != null)
        {
            Debug.Log($"Points needed to reach next level in {assetInstanceProgression.progression_name}: {assetInstanceProgression.next_threshold - assetInstanceProgression.points}");
        }
    }
});

Retrieving Asset instance progressions using count

Count can be used to limit the number of entries returned.

int assetInstanceId = 1;
int count = 20;

LootLockerSDKManager.GetAssetInstanceProgressions(assetInstanceId, count, response =>
{
    if (!response.success) {
        Debug.Log("Failed: " + response.Error);
    }

    // Output the asset instance level and show how much points are needed to progress to the next tier for all asset instance progressions
    foreach (var assetInstanceProgression in response.items)
    {
        Debug.Log($"Current level in {assetInstanceProgression.progression_name} is {assetInstanceProgression.step}");
        if (assetInstanceProgression.next_threshold != null)
        {
            Debug.Log($"Points needed to reach next level in {assetInstanceProgression.progression_name}: {assetInstanceProgression.next_threshold - assetInstanceProgression.points}");
        }
    }
});

Paginating through Asset instance progressions

You can use "after" parameter to paginate if the Asset instance is on many progressions.

int assetInstanceId = 1;
int numberOfItemsPerPage = 10;
LootLockerPaginatedAssetInstanceProgressionsResponse assetInstanceProgressions;

void Start()
{
    LootLockerSDKManager.StartGuestSession(_ =>
    {
        // Fetch the initial asset instance progressions list
        LootLockerSDKManager.GetAssetInstanceProgressions(assetInstanceId, numberOfItemsPerPage, response =>
        {
            if (!response.success)
            {
                Debug.Log("Failed: " + response.Error);
            }

            if (response.pagination.total == 0)
            {
                Debug.Log("Your asset instance does not have any progressions, start them by giving it some exp");
            }

            assetInstanceProgressions = response;
        });
    });
}

void Update()
{
    if (assetInstanceProgressions == null) return;

    // Fetch the next page if more asset instance progressions exist
    if (Input.GetKeyDown(KeyCode.RightArrow) && assetInstanceProgressions.pagination.next_cursor != null)
    {
        LootLockerSDKManager.GetAssetInstanceProgressions(assetInstanceId, numberOfItemsPerPage, assetInstanceProgressions.pagination.next_cursor, response =>
        {
            if (!response.success)
            {
                Debug.Log("Failed: " + response.Error);
            }
            
            assetInstanceProgressions = response;
            Debug.Log($"Paginating right, got {assetInstanceProgressions.items.Count} progressions");
        });
    }
    
    // Fetch the previous page if we are not on the first page
    if (Input.GetKeyDown(KeyCode.LeftArrow) && assetInstanceProgressions.pagination.previous_cursor != null)
    {
        LootLockerSDKManager.GetAssetInstanceProgressions(assetInstanceId, numberOfItemsPerPage, assetInstanceProgressions.pagination.previous_cursor, response =>
        {
            if (!response.success)
            {
                Debug.Log("Failed: " + response.Error);
            }

            assetInstanceProgressions = response;
            Debug.Log($"Paginating left, got {assetInstanceProgressions.items.Count} progressions");
        });
    }
}

Interacting with Asset instance progressions

Adding points to an Asset instance progression

int assetInstanceId = 1;
string progressionKey = "mage";
ulong amountOfPoints = 100;

LootLockerSDKManager.AddPointsToAssetInstanceProgression(assetInstanceId, progressionKey, amountOfPoints, response =>
{
    if (!response.success) {
        Debug.Log("Failed: " + response.Error);
    }

    // If the awarded_tiers array contains any items that means the asset instance leveled up
    // There can also be multiple level-ups at once
    if (response.awarded_tiers.Any())
    {
        foreach (var awardedTier in response.awarded_tiers)
        {
            Debug.Log($"Reached level {awardedTier.step}!");

            foreach (var assetReward in awardedTier.rewards.asset_rewards)
            {
                Debug.Log($"Rewarded with an asset, id: {assetReward.asset_id}!");
            }
            
            foreach (var progressionPointsReward in awardedTier.rewards.progression_points_rewards)
            {
                Debug.Log($"Rewarded with {progressionPointsReward.amount} bonus points in {progressionPointsReward.progression_name} progression!");
            }
            
            foreach (var progressionResetReward in awardedTier.rewards.progression_reset_rewards)
            {
                Debug.Log($"Progression {progressionResetReward.progression_name} has been reset as a reward!");
            }
        }
    }
});

Subtracting points from an asset instance progression

int assetInstanceId = 1;
string progressionKey = "mage";
ulong amountOfPoints = 10;

LootLockerSDKManager.SubtractPointsFromAssetInstanceProgression(assetInstanceId, progressionKey, amountOfPoints, response =>
{
    if (!response.success) {
        Debug.Log("Failed: " + response.Error);
    }
    
    // Output the amount of points the asset instance has after subtracting points
    Debug.Log($"Asset instance now has {response.points} points in {response.progression_name} progression");
});

Resetting an asset instance progression

Resets the asset instance progression points to 0, effectively returning the asset instance to level 1, if you want to remove the progression from a asset instance see below.

int assetInstanceId = 1;
string progressionKey = "mage";

LootLockerSDKManager.ResetAssetInstanceProgression(assetInstanceId, progressionKey, response =>
{
    if (!response.success) {
        Debug.Log("Failed: " + response.Error);
    }
    
    // Asset instance level is now 1 
    Debug.Log($"Asset instance is level {response.step} since the {response.progression_name} was reset");
});

Deleting an asset instance progression

Completely removes an asset instance progression, it will no longer be listed when retrieving asset instance progressions.

int assetInstanceId = 1;
string progressionKey = "mage";

LootLockerSDKManager.DeleteAssetInstanceProgression(assetInstanceId, progressionKey, response =>
{
    if (!response.success) {
        Debug.Log("Failed: " + response.Error);
    }
    
    // Trying to fetch the deleted asset instance progression will result in a "Not Found" error
    LootLockerSDKManager.GetAssetInstanceProgression(progressionKey, response =>
    {
        if (!response.success) {
            Debug.Log("Failed: " + response.Error);
        }
    }
});

Last updated