PHP Code:
enum _:Achievements
{
Achievement_Name[ 256 ],
Achievement_Progress[ 33 ],
Achievement_Requirement,
Achievement_Reward,
Achievement_Type
}
public client_putinserver( id )
{
new aData[ Achievements ];
new iProgress[ 33 ];
for( new i = 0; i < g_iTotalAchievements; i++ )
{
ArrayGetArray( g_aAchievements, i, aData );
iProgress = aData[ Achievement_Progress ];
iProgress[ id ] = 0;
aData[ Achievement_Progress ] = iProgress;
ArraySetArray( g_aAchievements, i, aData );
}
LoadData( id );
}
public SaveData( id )
{
new szSteamID[ 35 ];
get_user_authid( id, szSteamID, charsmax( szSteamID ) );
new aData[ Achievements ];
new iProgress[ 33 ], szProgress[ 6 ];
new szKey[ 512 ];
for( new i = 0; i < g_iTotalAchievements; i++ )
{
ArrayGetArray( g_aAchievements, i, aData );
iProgress = aData[ Achievement_Progress ];
num_to_str( iProgress[ id ], szProgress, charsmax( szProgress ) );
formatex( szKey, charsmax( szKey ), "%s-%s", aData[ Achievement_Name ], szSteamID );
nvault_set( g_hVault, szKey, szProgress );
server_print( "NVAULT DEBUG SAVE - %s - %i", aData[ Achievement_Name ], iProgress[ id ] );
}
}
public LoadData( id )
{
new szSteamID[ 35 ];
get_user_authid( id, szSteamID, charsmax( szSteamID ) );
new aData[ Achievements ];
new iAchievementProgress[ 33 ], iPlayerProgress;
new szKey[ 512 ];
for( new i = 0; i < g_iTotalAchievements; i++ )
{
ArrayGetArray( g_aAchievements, i, aData );
formatex( szKey, charsmax( szKey ), "%s-%s", aData[ Achievement_Name ], szSteamID );
iPlayerProgress = nvault_get( g_hVault, szKey );
iAchievementProgress = aData[ Achievement_Progress ];
iAchievementProgress[ id ] = iPlayerProgress;
aData[ Achievement_Progress ] = iAchievementProgress;
ArraySetArray( g_aAchievements, i, aData );
server_print( "NVAULT DEBUG - %s - %i", aData[ Achievement_Name ], iPlayerProgress );
}
}
For some reason, even if there is no vault data beforehand, the player always has all cells in Achievement_Progress for all achievements set to 16.
Any ideas?
__________________