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
Achievements Read more about the Achievements system in Hiro here .
Get all achievements
# Get all achievements with progress accumulated by the player.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void onAchievementsGet ( const Hiro :: AchievementList & achievementList )
{
for ( auto it = achievementList . achievements . begin (); it != achievementList . achievements . end (); it ++ )
{
std :: cout << "Found achievement: " << it -> second . name << '\n' ;
}
for ( auto it = achievementList . repeatAchievements . begin (); it != achievementList . repeatAchievements . end (); it ++ )
{
std :: cout << "Found repeating achievement: " << it -> second . name << '\n' ;
}
}
void onError ( const Nakama :: NError & error )
{
std :: cout << Nakama :: toString ( error . code ) << ": " << error . message << '\n' ;
}
hiroClient -> achievementsGet ( session , onAchievementsGet , onError );
Get active achievements
# Check IsActive on each achievement to show only those in an active time window.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void onAchievementsGet ( const Hiro :: AchievementList & achievementList )
{
for ( auto it = achievementList . achievements . begin (); it != achievementList . achievements . end (); it ++ )
{
if ( it -> second . IsActive )
{
std :: cout << "Active achievement: " << it -> second . name << '\n' ;
}
}
for ( auto it = achievementList . repeatAchievements . begin (); it != achievementList . repeatAchievements . end (); it ++ )
{
if ( it -> second . IsActive )
{
std :: cout << "Active repeating achievement: " << it -> second . name << '\n' ;
}
}
}
void onError ( const Nakama :: NError & error )
{
std :: cout << Nakama :: toString ( error . code ) << ": " << error . message << '\n' ;
}
hiroClient -> achievementsGet ( session , onAchievementsGet , onError );
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
15
16
17
18
19
20
21
22
23
void onAchievementsClaim ( const Hiro :: AchievementsUpdateAck & achievementsUpdateAck )
{
for ( auto it = achievementsUpdateAck . achievements . begin (); it != achievementsUpdateAck . achievements . end (); it ++ )
{
std :: cout << "Found achievement: " << it -> second . name << '\n' ;
}
for ( auto it = achievementsUpdateAck . repeatAchievements . begin (); it != achievementsUpdateAck . repeatAchievements . end (); it ++ )
{
std :: cout << "Found repeating achievement: " << it -> second . name << '\n' ;
}
}
void onError ( const Nakama :: NError & error )
{
std :: cout << Nakama :: toString ( error . code ) << ": " << error . message << '\n' ;
}
Hiro :: AchievementsClaimRequest request ;
request . ids = { "achievement_1" , "achievement_2" };
request . claimTotalReward = true ;
hiroClient -> achievementsClaim ( session , request , onAchievementsClaim , onError );
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
15
16
17
18
19
20
21
22
23
void onAchievementsUpdate ( const Hiro :: AchievementsUpdateAck & achievementsUpdateAck )
{
for ( auto it = achievementsUpdateAck . achievements . begin (); it != achievementsUpdateAck . achievements . end (); it ++ )
{
std :: cout << "Found achievement: " << it -> second . name << '\n' ;
}
for ( auto it = achievementsUpdateAck . repeatAchievements . begin (); it != achievementsUpdateAck . repeatAchievements . end (); it ++ )
{
std :: cout << "Found repeating achievement: " << it -> second . name << '\n' ;
}
}
void onError ( const Nakama :: NError & error )
{
std :: cout << Nakama :: toString ( error . code ) << ": " << error . message << '\n' ;
}
Hiro :: AchievementsUpdateRequest request ;
request . ids = { "achievement_1" , "achievement_2" };
request . amount = 1 ;
hiroClient -> achievementsUpdate ( session , request , onAchievementsUpdate , onError );