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
Tutorials Read more about the Tutorials system in Hiro here .
Get all tutorials
# Get the tutorials and current progress step for the player.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void onTutorialsGet ( const Hiro :: TutorialList & tutorialList )
{
for ( auto it = tutorialList . tutorials . begin (); it != tutorialList . tutorials . end (); it ++ )
{
std :: cout << "Found tutorial: " << it -> second . id << ". Progress: " << it -> second . current << '/' << it -> second . max << '\n' ;
}
}
void onError ( const Nakama :: NError & error )
{
std :: cout << Nakama :: toString ( error . code ) << ": " << error . message << '\n' ;
}
hiroClient -> tutorialsGet ( session , onTutorialsGet , onError );
Accept a tutorial
# Accept an offer to step through a tutorial.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void onTutorialsAccept ( const Hiro :: Tutorial & tutorial )
{
std :: cout << "Successfully accepted tutorial: " << tutorial . id << '\n' ;
}
void onError ( const Nakama :: NError & error )
{
std :: cout << Nakama :: toString ( error . code ) << ": " << error . message << '\n' ;
}
Hiro :: TutorialAcceptRequest request ;
request . id = "tutorial_1" ;
hiroClient -> tutorialsAccept ( session , request , onTutorialsAccept , onError );
Decline a tutorial
# Decline an offer to start a tutorial.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void onTutorialsDecline ( const Hiro :: Tutorial & tutorial )
{
std :: cout << "Successfully declined tutorial: " << tutorial . id << '\n' ;
}
void onError ( const Nakama :: NError & error )
{
std :: cout << Nakama :: toString ( error . code ) << ": " << error . message << '\n' ;
}
Hiro :: TutorialDeclineRequest request ;
request . id = "tutorial_1" ;
hiroClient -> tutorialsDecline ( session , request , onTutorialsDecline , onError );
Abandon a tutorial
# Abandon progress on a tutorial.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void onTutorialsAbandon ( const Hiro :: Tutorial & tutorial )
{
std :: cout << "Successfully abandoned tutorial: " << tutorial . id << '\n' ;
}
void onError ( const Nakama :: NError & error )
{
std :: cout << Nakama :: toString ( error . code ) << ": " << error . message << '\n' ;
}
Hiro :: TutorialAbandonRequest request ;
request . id = "tutorial_1" ;
hiroClient -> tutorialsAbandon ( session , request , onTutorialsAbandon , onError );
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
15
16
17
18
void onTutorialsUpdate ( const Hiro :: TutorialList & tutorialList )
{
for ( auto it = tutorialList . tutorials . begin (); it != tutorialList . tutorials . end (); it ++ )
{
std :: cout << "Found tutorial: " << it -> second . id << ". Progress: " << it -> second . current << '/' << it -> second . max << '\n' ;
}
}
void onError ( const Nakama :: NError & error )
{
std :: cout << Nakama :: toString ( error . code ) << ": " << error . message << '\n' ;
}
Hiro :: TutorialUpdateRequest request ;
request . id = "tutorial_1" ;
request . step = 1 ;
hiroClient -> tutorialsUpdate ( session , request , onTutorialsUpdate , onError );