Hiro Unreal Reference
#
This page provides samples for working with Hiro game systems in Unreal Engine.
Inventory
#
List items
#
List all inventory items defined in the codex, optionally filtered by category.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroInventoryListRequest Request;
Request.ItemCategory = TEXT("weapons");
FHiroOnInventoryList OnInventoryList;
OnInventoryList.AddDynamic(this, &AMyActor::OnInventoryList)
FOnError OnError;
HiroClient->InventoryList(Session, Request, OnInventoryList, OnError)
void AMyActor::OnInventoryList(const FHiroInventoryList& InventoryList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *InventoryList.ToJson());
}
|
List user inventory items
#
List all inventory items owned by the player, optionally filtered by category.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroInventoryListRequest Request;
Request.ItemCategory = TEXT("weapons");
FHiroOnInventoryListInventory OnInventoryListInventory;
OnInventoryListInventory.AddDynamic(this, &AMyActor::OnInventoryListInventory)
FOnError OnError;
HiroClient->InventoryListInventory(Session, Request, OnInventoryListInventory, OnError)
void AMyActor::OnInventoryList(const FHiroInventoryList& InventoryList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *InventoryList.ToJson());
}
|
Consume inventory items
#
Consume one or more inventory items owned by the player.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroInventoryConsumeRequest Request;
Request.Items.Add(TEXT("health_potion"), 1);
FHiroOnInventoryConsume OnInventoryConsume;
OnInventoryConsume.AddDynamic(this, &AMyActor::OnInventoryConsume)
FOnError OnError;
HiroClient->InventoryConsume(Session, Request, OnInventoryConsume, OnError)
void AMyActor::OnInventoryConsume(const FHiroInventoryConsumeRewards& InventoryConsumeRewards)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *InventoryConsumeRewards.ToJson());
}
|
Grant inventory items
#
Grant one or more inventory items to the player.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroInventoryGrantRequest Request;
Request.Items.Add(TEXT("bronze_sword"), 1);
FHiroOnInventoryGrant OnInventoryGrant;
OnInventoryGrant.AddDynamic(this, &AMyActor::OnInventoryGrant)
FOnError OnError;
HiroClient->InventoryGrant(Session, Request, OnInventoryGrant, OnError)
void AMyActor::OnInventoryConsume(const FHiroInventoryUpdateAck& InventoryUpdateAck)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *InventoryUpdateAck.ToJson());
}
|
Update inventory items
#
Update the properties on one or more inventory items owned by the player.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| FHiroInventoryUpdateItemsRequest Request;
FHiroInventoryUpdateItemProperties ItemProperties;
ItemProperties.StringProperties.Add(TEXT("example_property"), TEXT("example_value"))
ItemProperties.NumericProperties.Add(TEXT("numeric_property"), 10)
Request.ItemUpdates.Add(TEXT("bronze_sword"), ItemProperties);
FHiroOnInventoryUpdate OnInventoryUpdate;
OnInventoryUpdate.AddDynamic(this, &AMyActor::OnInventoryUpdate)
FOnError OnError;
HiroClient->InventoryUpdate(Session, Request, OnInventoryUpdate, OnError)
void AMyActor::OnInventoryConsume(const FHiroInventoryUpdateAck& InventoryUpdateAck)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *InventoryUpdateAck.ToJson());
}
|
Economy
#
Donation claim
#
Claim one or more rewards which are partially or full donated by other players.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroEconomyDonationClaimRequest Request;
Request.Items = {TEXT("donation_1"), TEXT("donation_2")}
FHiroOnEconomyDonationClaim OnEconomyDonationClaim;
OnEconomyDonationClaim.AddDynamic(this, &AMyActor::OnEconomyDonationClaim)
FOnError OnError;
HiroClient->EconomyDonationCLaim(Session, Request, OnEconomyDonationClaim, OnError)
void AMyActor::OnEconomyDonationClaim(const FHiroEconomyDonationClaimRewards& EconomyDonationClaimRewards)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EconomyDonationClaimRewards.ToJson());
}
|
Donate to a user
#
Donate some resource (currencies, items, etc.) to a user by donation ID.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| FHiroEconomyDonationGiveRequest Request;
Request.UserId = TEXT("user_1");
Request.DonationId = TEXT("donation_1")
FHiroOnEconomyDonationGive OnEconomyDonationGive;
OnEconomyDonationGive.AddDynamic(this, &AMyActor::OnEconomyDonationGive)
FOnError OnError;
HiroClient->EconomyDonationGive(Session, Request, OnEconomyDonationGive, OnError)
void AMyActor::OnEconomyDonationGive(const FHiroEconomyUpdateAck& EconomyUpdateAck)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EconomyUpdateAck.ToJson());
}
|
Get donation progress
#
Get progress on one or more donations for a set of players by their IDs.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroEconomyDonationGetRequest Request;
Request.Ids = {TEXT("donation_1"), TEXT("donation_2")};
FHiroOnEconomyDonationGet OnEconomyDonationGet;
OnEconomyDonationGet.AddDynamic(this, &AMyActor::OnEconomyDonationGet)
FOnError OnError;
HiroClient->EconomyDonationGet(Session, Request, OnEconomyDonationGet, OnError)
void AMyActor::OnEconomyDonationGet(const FHiroEconomyDonationsByUserList& EconomyDonationsByUserList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EconomyDonationsByUserList.ToJson());
}
|
Request a donation
#
Request a donation which other players can contribute into.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroEconomyDonationRequest Request;
Request.DonationId = TEXT("donation_1");
FHiroOnEconomyDonationRequest OnEconomyDonationRequest;
OnEconomyDonationRequest.AddDynamic(this, &AMyActor::OnEconomyDonationRequest)
FOnError OnError;
HiroClient->EconomyDonationRequest(Session, Request, OnEconomyDonationRequest, OnError)
void AMyActor::OnEconomyDonationRequest(const FHiroEconomyDonationAck& EconomyDonationAck)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EconomyDonationAck.ToJson());
}
|
Get store items
#
Get all store items defined in the Virtual Store.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroEconomyListRequest Request;
Request.StoreType = EHiroEconomyStoreType::ECONOMY_STORE_TYPE_APPLE_APPSTORE;
FHiroOnEconomyStoreGet OnEconomyStoreGet;
OnEconomyStoreGet.AddDynamic(this, &AMyActor::OnEconomyStoreGet)
FOnError OnError;
HiroClient->EconomyStoreGet(Session, Request, OnEconomyStoreGet, OnError)
void AMyActor::OnEconomyStoreGet(const FHiroEconomyList& EconomyList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EconomyList.ToJson());
}
|
Grant currencies or reward modifiers
#
Grant one or more currencies or reward modifiers to te player.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroEconomyGrantRequest Request;
Request.Currencies.Add(TEXT("coins"), 100);
FHiroOnEconomyGrant OnEconomyGrant;
OnEconomyGrant.AddDynamic(this, &AMyActor::OnEconomyGrant)
FOnError OnError;
HiroClient->EconomyGrant(Session, Request, OnEconomyGrant, OnError)
void AMyActor::OnEconomyGrant(const FHiroEconomyUpdateAck& EconomyUpdateAck)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EconomyUpdateAck.ToJson());
}
|
Send a purchase intent
#
Send a marker of intent to purchase by the player.
1
2
3
4
5
6
7
8
| FHiroEconomyPurchaseIntentRequest Request;
Request.ItemId = TEXT("item_1")
Request.StoreType = EHiroEconomyStoreType::ECONOMY_STORE_TYPE_APPLE_APPSTORE;
Request.Sku = TEXT("sku_1");
FOnError OnError;
HiroClient->EconomyPurchaseIntent(Session, Request, OnError)
|
Purchase a store item
#
Purchase a store item by the player.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| FHiroEconomyPurchaseRequest Request;
Request.ItemId = TEXT("item_1")
Request.StoreType = EHiroEconomyStoreType::ECONOMY_STORE_TYPE_APPLE_APPSTORE;
Request.Receipt = TEXT("<receipt>");
FHiroOnEconomyPurchaseItem OnEconomyPurchaseItem;
OnEconomyPurchaseItem.AddDynamic(this, &AMyActor::OnEconomyPurchaseItem)
FOnError OnError;
HiroClient->EconomyPurchaseItem(Session, Request, OnEconomyPurchaseItem, OnError)
void AMyActor::OnEconomyPurchaseItem(const FHiroEconomyPurchaseAck& EconomyPurchaseAck)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EconomyPurchaseAck.ToJson());
}
|
Get ad placement status
#
Get the current status on an Ad placement which may have been rewarded.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| FHiroEconomyPlacementStatusRequest Request;
Request.RewardId = TEXT("reward_1");
Request.PlacementId = TEXT("placement_1");
Request.Count = 0;
FHiroOnEconomyPlacementStatus OnEconomyPlacementStatus;
OnEconomyPlacementStatus.AddDynamic(this, &AMyActor::OnEconomyPlacementStatus)
FOnError OnError;
HiroClient->EconomyPlacementStatus(Session, Request, OnEconomyPlacementStatus, OnError)
void AMyActor::OnEconomyPlacementStatus(const FHiroEconomyPlacementStatus& EconomyPlacementStatus)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EconomyPlacementStatus.ToJson());
}
|
Start a new ad placement
#
Start a new Ad placement by placement ID.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroEconomyPlacementStartRequest Request;
Request.PlacementId = TEXT("placement_1");
FHiroOnEconomyPlacementStart OnEconomyPlacementStart;
OnEconomyPlacementStart.AddDynamic(this, &AMyActor::OnEconomyPlacementStart)
FOnError OnError;
HiroClient->EconomyPlacementStart(Session, Request, OnEconomyPlacementStart, OnError)
void AMyActor::OnEconomyPlacementStart(const FHiroEconomyPlacementStatus& EconomyPlacementStatus)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EconomyPlacementStatus.ToJson());
}
|
Placement success
#
Webhook RPC to handle Rewarded Video Ad placement success callbacks.
1
2
3
| FOnError OnError;
HiroClient->EconomyPlacementSuccess(Session, OnError);
|
Placement fail
#
Webhook RPC to handle Rewarded Video Ad placement failure callbacks.
1
2
3
| FOnError OnError;
HiroClient->EconomyPlacementFail(Session, OnError);
|
Achievements
#
Get all achievements
#
Get all achievements with progress accumulated by the player.
1
2
3
4
5
6
7
8
9
10
| FHiroOnAchievementsGet OnAchievementsGet;
OnAchievementsGet.AddDynamic(this, &AMyActor::OnAchievementsGet);
FOnError OnError;
HiroClient->AchievementsGet(Session, OnAchievementsGet, OnError);
void AMyActor::OnAchievementsGet(const FHiroAchievementList& AchievementList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *AchievementList.ToJson());
}
|
Claim achievements
#
Claim one or more achievements which have completed their progress.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| FHiroAchievementsClaimRequest Request;
Request.Ids = {TEXT("achievement_1"), TEXT("achievement_2")};
Request.ClaimTotalReward = true;
FHiroOnAchievementsClaim OnAchievementsClaim;
OnAchievementsClaim.AddDynamic(this, &AMyActor::OnAchievementsClaim);
FOnError OnError;
HiroClient->AchievementsClaim(Session, OnAchievementsClaim, OnError);
void AMyActor::OnAchievementsClaim(const FHiroAchievementsUpdateAck& AchievementsUpdateAck)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *AchievementsUpdateAck.ToJson());
}
|
Update achievement progress
#
Update one or more achievements with the same progress amount.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| FHiroAchievementsUpdateRequest Request;
Request.Ids = {TEXT("achievement_1"), TEXT("achievement_2")};
Request.Amount = 1;
FHiroOnAchievementsUpdate OnAchievementsUpdate;
OnAchievementsUpdate.AddDynamic(this, &AMyActor::OnAchievementsUpdate);
FOnError OnError;
HiroClient->AchievementsUpdate(Session, Request, OnAchievementsUpdate, OnError);
void AMyActor::OnAchievementsUpdate(const FHiroAchievementsUpdateAck& AchievementsAck)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *AchievementsAck.ToJson());
}
|
Energy
#
Get all energies
#
Get the energies and their current timers for the player.
1
2
3
4
5
6
7
8
9
10
| FHiroOnEnergyGet OnEnergyGet;
OnEnergyGet.AddDynamic(this, &AMyActor::OnEnergyGet);
FOnError OnError;
HiroClient->EnergyGet(Session, OnEnergyGet, OnError);
void AMyActor::OnEnergyGet(const FHiroEnergyList& EnergyList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EnergyList.ToJson());
}
|
Spend one or more energies
#
Spend one or more energies for the player.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| FHiroEnergySpendRequest Request;
Request.Amounts.Add(TEXT("power"), 10);
Request.Amouns.Add(TEXT("tickets"), 1);
FHiroOnEnergySpend OnEnergySpend;
OnEnergySpend.AddDynamic(this, &AMyActor::OnEnergySpend);
FOnError OnError;
HiroClient->EnergySpend(Session, Request, OnEnergySpend, OnError);
void AMyActor::OnEnergySpend(const FHiroEnergySpendReward& EnergySpendReward)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EnergySpendReward.ToJson());
}
|
Tutorials
#
Get all tutorials
#
Get the tutorials and current progress step for the player.
1
2
3
4
5
6
7
8
9
10
| FHiroOnTutorialsGet OnTutorialsGet;
OnTutorialsGet.AddDynamic(this, &AMyActor::OnTutorialsGet);
FOnError OnError;
HiroClient->TutorialsGet(Session, OnTutorialsGet, OnError);
void AMyActor::OnTutorialsGet(const FHiroTutorialList& TutorialList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *TutorialList.ToJson());
}
|
Accept a tutorial
#
Accept an offer to step through a tutorial.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroTutorialAcceptRequest Request;
Request.Id = TEXT("tutorial_1");
FHiroOnTutorialsAccept OnTutorialsAccept;
OnTutorialsAccept.AddDynamic(this, &AMyActor::OnTutorialsAccept);
FOnError OnError;
HiroClient->TutorialsAccept(Session, Request, OnTutorialsAccept, OnError);
void AMyActor::OnTutorialsAccept(const FHiroTutorial& Tutorial)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *Tutorial.ToJson());
}
|
Decline a tutorial
#
Decline an offer to start a tutorial.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroTutorialDeclineRequest Request;
Request.Id = TEXT("tutorial_1");
FHiroOnTutorialsDecline OnTutorialsDecline;
OnTutorialsDecline.AddDynamic(this, &AMyActor::OnTutorialsDecline);
FOnError OnError;
HiroClient->TutorialsDecline(Session, Request, OnTutorialsDecline, OnError);
void AMyActor::OnTutorialsDecline(const FHiroTutorial& Tutorial)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *Tutorial.ToJson());
}
|
Abandon a tutorial
#
Abandon progress on a tutorial.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroTutorialAbandonRequest Request;
Request.Id = TEXT("tutorial_1");
FHiroOnTutorialsAbandon OnTutorialsAbandon;
OnTutorialsAbandon.AddDynamic(this, &AMyActor::OnTutorialsAbandon);
FOnError OnError;
HiroClient->TutorialsAbandon(Session, Request, OnTutorialsAbandon, OnError);
void AMyActor::OnTutorialsAbandon(const FHiroTutorial& Tutorial)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *Tutorial.ToJson());
}
|
Update progress of a tutorial
#
Update the current progress step in the tutorial by ID.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| FHiroTutorialUpdateRequest Request;
Request.Id = TEXT("tutorial_1");
Request.Step = 1;
FHiroOnTutorialsUpdate OnTutorialsUpdate;
OnTutorialsUpdate.AddDynamic(this, &AMyActor::OnTutorialsUpdate);
FOnError OnError;
HiroClient->TutorialsUpdate(Session, Request, OnTutorialsUpdate, OnError);
void AMyActor::OnTutorialsUpdate(const FHiroTutorialList& TutorialList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *TutorialList.ToJson());
}
|
Teams
#
Create a team
#
Create a team which other players can join.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| FHiroTeamCreateRequest Request;
Request.Name = TEXT("Example team");
Request.Desc = TEXT("Example description");
Request.Open = true;
Request.Icon = TEXT("icon.png");
Request.LangTag = TEXT("en");
Request.SetupMetadata = TEXT("");
FHiroOnTeamsCreate OnTeamsCreate;
OnTeamsCreate.AddDynamic(this, &AMyActor::OnTeamsCreate);
FOnError OnError;
HiroClient->TeamsCreate(Session, Request, OnTeamsCreate, OnError);
void AMyActor::OnTeamsCreate(const FHiroTeam& Team)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *Team.ToJson());
}
|
List one or more teams
#
List one or more teams which the player can join.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| FHiroTeamListRequest Request;
Request.Cursor = TEXT("");
Request.Location = TEXT("UK");
Request.Limit = 100;
FHiroOnTeamsList OnTeamsList;
OnTeamsList.AddDynamic(this, &AMyActor::OnTeamsList);
FOnError OnError;
HiroClient->TeamsList(Session, Request, OnTeamsList, OnError);
void AMyActor::OnTeamsList(const FHiroTeamList& TeamList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *TeamList.ToJson());
}
|
Search for a team
#
Search for a team by name or optional short code.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| FHiroTeamSearchRequest Request;
Request.Input = TEXT("heroes");
Request.Limit = 100;
FHiroOnTeamsSearch OnTeamsSearch;
OnTeamsSearch.AddDynamic(this, &AMyActor::OnTeamsSearch);
FOnError OnError;
HiroClient->TeamsSearch(Session, Request, OnTeamsSearch, OnError);
void AMyActor::OnTeamsSearch(const FHiroTeamList& TeamList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *TeamList.ToJson());
}
|
Send team chat message
#
Write a chat message to the Team’s chat channel.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| FHiroTeamWriteChatMessageRequest Request;
Request.Id = TEXT("team_1");
Request.Content = TEXT("{\"message\":\"Hey everyone!\"}");
FHiroOnTeamsWriteChatMessage OnTeamsWriteChatMessage;
OnTeamsWriteChatMessage.AddDynamic(this, &AMyActor::OnTeamsWriteChatMessage);
FOnError OnError;
HiroClient->TeamsWriteChatmessage(Session, Request, OnTeamsWriteChatMessage, OnError);
void AMyActor::OnTeamsWriteChatMessage(const FHiroChannelMessageAck& ChannelMessageAck)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *ChannelMessageAck.ToJson());
}
|
Unlockables
#
Create a random unlockable
#
Create a random unlockable to assign to a slot (or overflow) unless there are no slots.
1
2
3
4
5
6
7
8
9
10
| FHiroOnUnlockablesCreate OnUnlockablesCreate;
OnUnlockablesCreate.AddDynamic(this, &AMyActor::OnUnlockablesCreate);
FOnError OnError;
HiroClient->UnlockablesCreate(Session, OnUnlockablesCreate, OnError);
void AMyActor::OnUnlockablesCreate(const FHiroUnlockablesList& UnlockablesList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *UnlockablesList.ToJson());
}
|
Get in progress unlockables
#
Get the unlockables which are currently in progress for the player.
1
2
3
4
5
6
7
8
9
10
| FHiroOnUnlockablesCreate OnUnlockablesCreate;
OnUnlockablesCreate.AddDynamic(this, &AMyActor::OnUnlockablesCreate);
FOnError OnError;
HiroClient->UnlockablesGet(Session, OnUnlockablesCreate, OnError);
void AMyActor::OnUnlockablesCreate(const FHiroUnlockablesList& UnlockablesList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *UnlockablesList.ToJson());
}
|
Start an unlock
#
Start the unlock timer for an unlockable in the specified slot.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroUnlockablesRequest Request;
Request.InstanceId = TEXT("unlockable_instance_1");
FHiroOnUnlockablesUnlockStart OnUnlockablesUnlockStart;
OnUnlockablesUnlockStart.AddDynamic(this, &AMyActor::OnUnlockablesUnlockStart);
FOnError OnError;
HiroClient->UnlockablesUnlockStart(Session, Request, OnUnlockablesUnlockStart, OnError);
void AMyActor::OnUnlockablesUnlockStart(const FHiroUnlockablesList& UnlockablesList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *UnlockablesList.ToJson());
}
|
Purchase an unlockable
#
Purchase an unlockable with soft currency based on the remainder cost calculated by the offset left to wait.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroOnUnlockablesPurchaseUnlock Request;
Request.InstanceId = TEXT("unlockable_instance_1");
FHiroOnUnlockablesPurchaseUnlock OnUnlockablesPurchaseUnlock;
OnUnlockablesPurchaseUnlock.AddDynamic(this, &AMyActor::OnUnlockablesPurchaseUnlock);
FOnError OnError;
HiroClient->UnlockablesPurchaseUnlock(Session, Request, OnUnlockablesPurchaseUnlock, OnError);
void AMyActor::OnUnlockablesPurchaseUnlock(const FHiroUnlockablesList& UnlockablesList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *UnlockablesList.ToJson());
}
|
Purchase a new unlockable slot
#
Purchase a new slot to be used to store unlockables.
1
2
3
4
5
6
7
8
9
10
| FHiroOnUnlockablesPurchaseSlot OnUnlockablesPurchaseSlot;
OnUnlockablesPurchaseSlot.AddDynamic(this, &AMyActor::OnUnlockablesPurchaseSlot);
FOnError OnError;
HiroClient->UnlockablesPurchaseSlot(Session, Request, OnUnlockablesPurchaseSlot, OnError);
void AMyActor::OnUnlockablesPurchaseSlot(const FHiroUnlockablesList& UnlockablesList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *UnlockablesList.ToJson());
}
|
Claim an unlockable
#
Claim an unlockable whose start timer has completed or completion was fast tracked with a purchase.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroUnlockablesRequest Request;
Request.InstanceId = TEXT("unlockable_instance_1");
FHiroOnUnlockablesClaim OnUnlockablesClaim;
OnUnlockablesClaim.AddDynamic(this, &AMyActor::OnUnlockablesClaim);
FOnError OnError;
HiroClient->UnlockablesClaim(Session, Request, OnUnlockablesClaim, OnError);
void AMyActor::OnUnlockablesClaim(const FHiroUnlockablesReward& UnlockablesReward)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *UnlockablesReward.ToJson());
}
|
Base
#
Rate app
#
Send feedback to the game’s developers over email.
1
2
3
4
5
6
7
| FHiroRateAppRequest Request;
Request.Score = 5;
Request.Message = TEXT("I loved it!");
FOnError OnError;
HiroClient->BaseRateApp(Session, Request, OnError);
|
Set device prefs
#
Update or create the mobile push device tokens and preferences for the player.
1
2
3
4
5
6
7
8
9
| FHiroDevicePrefsRequest Request;
Request.DeviceId = TEXT("device_id");
Request.PushTokenAndroid = TEXT("android_push_token");
Request.PushTokenIos = TEXT("ios_push_token");
Request.Preferences.Add(TEXT("dark_mode"), true)
FOnError OnError;
HiroClient->BaseRateApp(Session, Request, OnError);
|
Leaderboards
#
Get all leaderboards
#
Get the leaderboards defined for the game.
1
2
3
4
5
6
7
8
9
10
| FHiroOnLeaderboardsConfigGet OnLeaderboardsConfigGet;
OnLeaderboardsConfigGet.AddDynamic(this, &AMyActor::OnLeaderboardsConfigGet);
FOnError OnError;
HiroClient->LeaderboardsConfigGet(Session, OnLeaderboardsConfigGet, OnError);
void AMyActor::OnLeaderboardsConfigGet(const FHiroLeaderboardConfigList& LeaderboardConfigList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *LeaderboardConfigList.ToJson());
}
|
Event Leaderboards
#
Get an event leaderboard
#
Get a specified event leaderboard defined for the game.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroEventLeaderboardGet Request;
Request.Id = TEXT("leaderboard_1");
FHiroOnEventLeaderboardGet OnEventLeaderboardGet;
OnEventLeaderboardGet.AddDynamic(this, &AMyActor::OnEventLeaderboardGet);
FOnError OnError;
HiroClient->EventLeaderboardGet(Session, Request, OnEventLeaderboardGet, OnError);
void AMyActor::OnEventLeaderboardGet(const FHiroEventLeaderboard& EventLeaderboard)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EventLeaderboard.ToJson());
}
|
Update event leaderboard record
#
Update an event leaderboard record for a user.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| FHiroEventLeaderboardUpdate Request;
Request.Id = TEXT("leaderboard_1");
Request.Score = 100;
Request.Subscore = 10;
FHiroOnEventLeaderboardUpdate OnEventLeaderboardUpdate;
OnEventLeaderboardUpdate.AddDynamic(this, &AMyActor::OnEventLeaderboardUpdate);
FOnError OnError;
HiroClient->EventLeaderboardUpdate(Session, Request, OnEventLeaderboardUpdate, OnError);
void AMyActor::OnEventLeaderboardUpdate(const FHiroEventLeaderboard& EventLeaderboard)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EventLeaderboard.ToJson());
}
|
Claim event leaderboard reward
#
Claim an event leaderboard reward for a user.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroEventLeaderboardClaim Request;
Request.Id = TEXT("leaderboard_1");
FHiroOnEventLeaderboardClaim OnEventLeaderboardClaim;
OnEventLeaderboardClaim.AddDynamic(this, &AMyActor::OnEventLeaderboardClaim);
FOnError OnError;
HiroClient->EventLeaderboardClaim(Session, Request, OnEventLeaderboardClaim, OnError);
void AMyActor::OnEventLeaderboardClaim(const FHiroEventLeaderboard& EventLeaderboard)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EventLeaderboard.ToJson());
}
|
Roll a new cohort
#
Roll a new cohort for the specified event leaderboard.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroEventLeaderboardRoll Request;
Request.Id = TEXT("leaderboard_1");
FHiroOnEventLeaderboardRoll OnEventLeaderboardRoll;
OnEventLeaderboardRoll.AddDynamic(this, &AMyActor::OnEventLeaderboardRoll);
FOnError OnError;
HiroClient->EventLeaderboardRoll(Session, Request, OnEventLeaderboardRoll, OnError);
void AMyActor::OnEventLeaderboardRoll(const FHiroEventLeaderboard& EventLeaderboard)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *EventLeaderboard.ToJson());
}
|
Stats
#
Get all stats
#
Get all stats.
1
2
3
4
5
6
7
8
9
10
| FHiroOnStatsGet OnStatsGet;
OnStatsGet.AddDynamic(this, &AMyActor::OnStatsGet);
FOnError OnError;
HiroClient->StatsGet(Session, OnStatsGet, OnError);
void AMyActor::OnStatsGet(const FHiroStatList& StatList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *StatList.ToJson());
}
|
Update stats for the player
#
Update stats.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| FHiroStatUpdateRequest Request;
FHiroStatUpdate StatUpdate1;
StatUpdate1.Name = "public_stat_1";
StatUpdate1.Value = 100;
StatUpdate1.Operator = EHiroStatUpdateOperator::STAT_UPDATE_OPERATOR_SET; // Replace SomeEnumValue with the actual enum value
Request.Public.Add(StatUpdate1);
FHiroStatUpdate StatUpdate2;
StatUpdate2.Name = "private_stat_1";
StatUpdate2.Value = 100;
StatUpdate2.Operator = EHiroStatUpdateOperator::STAT_UPDATE_OPERATOR_SET; // Replace SomeEnumValue with the actual enum value
Request.Private.Add(StatUpdate2);
FHiroOnStatsUpdate OnStatsUpdate;
OnStatsUpdate.AddDynamic(this, &AMyActor::OnStatsUpdate);
FOnError OnError;
HiroClient->StatsUpdate(Session, Request, OnEventLeaderboardRoll, OnError);
void AMyActor::OnStatsUpdate(const FHiroStatList& StatList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *StatList.ToJson());
}
|
Progression
#
Get all progressions
#
Get progressions.
1
2
3
4
5
6
7
8
9
10
| FHiroOnProgressionsGet OnProgressionsGet;
OnProgressionsGet.AddDynamic(this, &AMyActor::OnProgressionsGet);
FOnError OnError;
HiroClient->ProgressionsGet(Session, OnProgressionsGet, OnError);
void AMyActor::OnProgressionsGet(const FHiroProgressionList& ProgressionList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *ProgressionList.ToJson());
}
|
Purchase progression
#
Purchase a progression for permanent unlock, if supported.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroProgressionPurchaseRequest Request;
Request.Id = TEXT("progression_1");
FHiroOnProgressionsPurchase OnProgressionsPurchase;
OnProgressionsPurchase.AddDynamic(this, &AMyActor::OnProgressionsPurchase);
FOnError OnError;
HiroClient->ProgressionsPurchase(Session, Request, OnProgressionsPurchase, OnError);
void AMyActor::OnProgressionsPurchase(const FHiroProgressionList& ProgressionList)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *ProgressionList.ToJson());
}
|