Client
.NET/Unity C++/Unreal/Cocos2d-x JavaScript/Cocos2d-js Godot 3 Godot 4 Java/Android Defold cURL REST Swift Dart/Flutter
Server
TypeScript Go Lua
Unlockables Read more about the Unlockables system in Hiro here .
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
FHiroOnUnlockablesGet OnUnlockablesGet ;
OnUnlockablesGet . AddDynamic ( this , & AMyActor :: OnUnlockablesGet );
FOnError OnError ;
HiroClient -> UnlockablesGet ( Session , OnUnlockablesGet , OnError );
void AMyActor :: OnUnlockablesGet ( 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 , 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 ());
}