You're saving data using player names? The save key and lookup keys are different. You format the keys during save and load, but you don't use them.
PHP Code:
public Save_Data(id, szName[])
{
new szKey[50], szData[MAX_FMT_LENGTH]
replace_all(gData[id][Data_Name], 31, "#", " ")
formatex(szKey, 49, "%s#EXP", gData[id][Data_Name])
formatex(szData, charsmax(szData), "%d %d %d %d %d %d %d %d %d %d %s", gData[id][Data_Exp], gData[id][Data_Kills], gData[id][Data_Deaths], gData[id][Data_HeadShot], gData[id][Data_Knife], gData[id][Data_Nade], gData[id][Data_NemKills], gData[id][Data_SurKills], gData[id][Data_PlayTime], gData[id][Data_Level], gData[id][Data_Name])
nvault_set(iVaultHandle, szName, szData)
}
As you can see, data is set using szName, not szKey.
PHP Code:
public Load_Data(szName[], id)
{
if(!is_user_connected(id))
return
new szName[32], szKey[50], szData[164]
copy(szName, 31, gData[id][Data_Name])
replace_all(szName, 31, "#", " ")
formatex(szKey, 49, "%s#EXP", szName)
//formatex(szKey, 49, "%s#EXP", gData[id][Data_Name])
//formatex(szKey, 49, "%s#EXP", gData[id][Data_Ip])
if (nvault_get(iVaultHandle, szName, szData, charsmax(szData)))
...
Data is also loaded using szName, not szKey. You're formatting szKey, but not using it.
"CmdStats" and "CmdShowRank" get ranks through "SortPlayerRank(id)".
PHP Code:
SortPlayerRank(id)
{
new szName[32], szKey[50]
copy(szName, 31, gData[id][Data_Name])
replace_all(szName, 31, "#", " ")
formatex(szKey, 49, "%s#EXP", szName)
.....
for(new i = 0; i < sizeEntries; i++)
{
ArrayGetArray(entries, i, data)
if(equal(data[VD_Key],szKey))
{
gData[id][Data_Rank] = i+1
break;
}
}
You're looking for a szKey that doesn't exist.
You have to fix your save and load functions, or change SortPlayerRank to get the rank based on the player name, not the formatted szKey.