1.Zapisuj na sid, a jesli ktos jest z nonsteam (ma steam_id_lan) to dopiero na nick.
2.Po co Ci -xpmod na końcu key'a? Usuń to, bo to niepotrzebne, niech sam nick/sid będzie kluczem (key'em).
3.Jeśli xp nie dostaje się co chwila to od razu to zapisuj vaultem, wtedy po każdej operacji będzie zapis na bieżąco, a zmienne wywal, no chyba, że co chwila dostaje się za coś expa to wtedy do zmiennych i co runda najrzadziej zapisuj.
4.
public SaveData(id)
{
if(!zaladowalo[id]) return PLUGIN_HANDLED;// zmienna informujaca czy dany gracz byl zaladowany, ale jesli go nie zaladowalo to czemu go nie zapiszesz? Tworzenie konto robisz ręcznie? Jesli ma być automatycznie zapisywane dla nowych graczy to wywal tę linijkę
if(is_user_bot(id)) return PLUGIN_HANDLED;
if(player_xp[id]<=player_xp_old[id] || player_xp[id]==99999999999) return PLUGIN_HANDLED;//nie do konca rozumiem co to, jakby byl caly kod..
new nick[35]//32 wystarczy
new vaultkey[64],vaultdata[256]// po co Ci taka wielka tablica vaultdata? vaultkey w zasadzie powinien byc samym nickiem, po co ten dopisek -xpmod?
format(vaultkey,63,"%s-xpmod",nick)//czyli jak to wyzej poprawisz to ta linijka do usuniecia
format(vaultdata,255,"%i#%i#%i#", player_lvl[id], player_xp[id], player_dead[id])/* Po co wstawiasz #? Zrób to tak:
format(vaultdata,255,"%i %i %i", player_lvl[id], player_xp[id], player_dead[id])
skoro to liczby to nie zawierają spacji, więc później bez problemu podzielisz to parse'm*/
nvault_set(g_vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}
5.
public LoadData(id)
{
if(is_user_bot(id) || !is_user_connected(id)) return PLUGIN_HANDLED;
new nick[35] //wystarczy 32
get_user_name(id, nick, 34);//analogicznie 31
replace_all(nick, 34, "#", "");//po co to ?
new vaultkey[64],vaultdata[256]//po co Ci takie duze tablice? przeczytaj co pisalem wyzej
format(vaultkey,63,"%s-xpmod",nick)// jak wyżej pisałem, wywal "-xpmod", bo to zbędne
format(vaultdata,255,"%i#%i#%i#",player_lvl[id], player_xp[id], player_dead[id])//po co formatujesz string do którego za chwile i tak zapiszesz co innego?(zapiszesz tu wartosc z vaulta)
nvault_get(g_vault,vaultkey,vaultdata,255)//uzyj nvault_lookup, który od razu zwróci Ci, czy taki klucz został odnaleziony w bazie vault, po czym mozesz to zawarunkować i w razie niepowodzenia dasz return, żeby dalej nie wykonywać funkcji
replace_all(vaultdata, 255, "#", " ")//wywal to
new tmp[3][32];
parse(vaultdata, tmp[0], 31, tmp[1], 31, tmp[2], 31)//chyba takich długich wartości expa nie będzie, 31 znaków to grubo ponad bilion :D
player_lvl[id] = str_to_num(tmp[0]);
player_xp[id] = str_to_num(tmp[1]);
player_dead[id] = str_to_num(tmp[2]);
zaladowalo[id] = 1;//jesli to co wyzej ma byc automatycznie to ta zmienna jest zbedna
return PLUGIN_CONTINUE
}
Popraw to i dalej będziemy działać