Zapis oraz odczyt nvault
Najlepsza odpowiedź GwynBleidD 21.11.2014 13:37
public Zapisz_Dane(id) { new name[64]; get_user_name(id, name, 63) ZapiszDaneNick(id, name) } public ZapiszDaneNick(id, name[]){ new vaultkey[40], vaultdata[25] formatex(vaultkey, 39 ,"%s-ggg", name); formatex(vaultdata, 24, " ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%s^"", zabil[id], padlofiara[id], poziomct[id], poziomtt[id], name) nvault_set(zapis_sprawdz, vaultkey, vaultdata); }Z Wczytaj_Dane chyba sobie już poradzisz Przejdź do postu
Petpat
19.11.2014
Witam mam pewno pytanie, da się jakoś zrobić gdy gracz zmienia nick, to żeby statystyki się zerowały gdy gracz o takim nicku nie był zapisany, lub zmiana nicku = wczytanie statystyk gracza który jest już zapisany, wiem ,że można zablokować zmianę nicku, ale ja tego nie chce zrobić
grankee
20.11.2014
public client_infochanged(id){ new newname[32], oldname[32]; get_user_info(id, "name", newname, 31); get_user_name(id, oldname, 31); if(!equal(oldname, newname)){ //tu dajesz kod zapisujący staty dla nicku "oldname" oraz wczytujący dla nicku "name" + możesz dodać zerowanie statów w tabeli podczas danej mapy (żeby przy nastepnej zmianie nicku nie wczytac tulu fragow/smierci ile aktualnie posiada, albo zapisywac do zmiennej globalnej podczas zmiany nicku i odejmowac je przy nastepnej i tak w kółko. } }
Użytkownik grankee edytował ten post 20.11.2014 04:10
Petpat
20.11.2014
public client_infochanged(id){ new newname[32], oldname[32]; get_user_info(id, "name", newname, 31); get_user_name(id, oldname, 31); if(!equal(oldname, newname)){ Zapisz_Dane(id) padlofiara[id] = 0; zabil[id] = 0; Wczytaj_Dane(id) } }
Zrobiłem coś takiego, ale to nie działa, jest dalej tak ,że jak zmieniam nick, to statystyki są takie same które miałem na starym nicku, jakieś inne propozycję ?
grankee
20.11.2014
Jeśli chcesz to w tabeli zresetować to musisz użyć
set_user_frags cs_set_user_deaths
GwynBleidD
20.11.2014
public client_infochanged(id){ new newname[32], oldname[32]; get_user_info(id, "name", newname, 31); get_user_name(id, oldname, 31); if(!equal(oldname, newname)){ Zapisz_Dane(id) padlofiara[id] = 0; zabil[id] = 0; Wczytaj_Dane(id) } }Zrobiłem coś takiego, ale to nie działa, jest dalej tak ,że jak zmieniam nick, to statystyki są takie same które miałem na starym nicku, jakieś inne propozycję ?
1. Do Zapisz_Dane(id) i Wczytaj_Dane(id) podajesz tylko ID, przez co te funkcje spróbują na podstawie ID same pobrać nick gracza. Stwórz ich alternatywne wersje, do których podasz nick, a nie id. I wtedy odpowiednio podaj do nich oldname i newname
2. Obie te funkcje wywołane z client_infochanged wywołają się dla STAREGO nicku, client_infochanged jest wywoływany przed właściwą zmianą nicku na serwerze (aby można było taką zmianę zablokować), więc nie dziwota, że statystyki się nie zmienią skoro wczytujesz nadal te dla starego nicku
GwynBleidD
20.11.2014
załóżmy, że kod funkcji zapisz wygląda tak:
ZapiszDane(id) { new name[64]; get_user_name(id, name, 63); // ... dalej zapis danych na nick w SQL lub nvault }
Stwórz więc funkcję ZapiszDaneNick(id, name) do której przeniesiesz wszystko z Zapisz_Dane, prócz pobierania nicku gracza. Następnie w Zapisz_Dane po pobraniu nicku wywołasz ZapiszDaneNick. Tą samą funkcję również wykonasz w client_infochanged, podając jako nick oldname. Dla Wczytaj_Dane postąp analogicznie, podając tym razem newname w client_infochanged.
grankee
21.11.2014
Gwyn
get_user_info(id, "name", newname, 31);
wczyta nowy nick (ten po zmianie)
GwynBleidD
21.11.2014
Petpat
21.11.2014
Hmmmmm, najwyraźniej ja źle zrozumiałem ... Wyświetla mi się błąd : ""error 035: argument type mismatch (argument 2)"
Właśnie Zapisz_Dane(id) ma zostać puste w sensie ,że zostaje tylko pobieranie nicku + zapis danych na nick ? Czy tak jak teraz jest ?
public Zapisz_Dane(id) { new name[64]; get_user_name(id, name, 63) ZapiszDaneNick(id, name) new vaultkey[40], vaultdata[25] formatex(vaultkey, 39 ,"%s-ggg", name); formatex(vaultdata, 24, " ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%s^"", zabil[id], padlofiara[id], poziomct[id], poziomtt[id], name) nvault_set(zapis_sprawdz, vaultkey, vaultdata); } public ZapiszDaneNick(id, name){ new vaultkey[40], vaultdata[25] formatex(vaultkey, 39 ,"%s-ggg", name); formatex(vaultdata, 24, " ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%s^"", zabil[id], padlofiara[id], poziomct[id], poziomtt[id], name) nvault_set(zapis_sprawdz, vaultkey, vaultdata); }
Najlepsza odpowiedź
GwynBleidD
21.11.2014
public Zapisz_Dane(id) { new name[64]; get_user_name(id, name, 63) ZapiszDaneNick(id, name) } public ZapiszDaneNick(id, name[]){ new vaultkey[40], vaultdata[25] formatex(vaultkey, 39 ,"%s-ggg", name); formatex(vaultdata, 24, " ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%s^"", zabil[id], padlofiara[id], poziomct[id], poziomtt[id], name) nvault_set(zapis_sprawdz, vaultkey, vaultdata); }Z Wczytaj_Dane chyba sobie już poradzisz
Petpat
22.11.2014
Jednak nie działa jak należy Są dwa problemy jeden załatany
public Zapisz_Dane(id) { new name[64]; get_user_name(id, name, 63) ZapiszDaneNick(id, name) } public ZapiszDaneNick(id, name[]){ new vaultkey[40], vaultdata[25] formatex(vaultkey, 39 ,"%s-ggg", name); formatex(vaultdata, 24, " ^"%d^" ^"%d^" ^"%d^" ^"%d^" ^"%s^"", zabil[id], padlofiara[id], poziomct[id], poziomtt[id], name) nvault_set(zapis_sprawdz, vaultkey, vaultdata); }
Gdy jest tak ustawione, to nie zapisuje statystyk ..
new name[64]; get_user_name(id, name, 63)dodałem również do ZapiszDaneNick
I zapis teraz działa, teraz problem jest z odczytem Bo wczytuje dalej stary nick ...
Wczytaj_Dane(id, name[]) Jest zrobione tak + w client_infochanged(id) Wczytaj_Dane(id, oldname);
@POST UP NIE MOGŁEM EDYTOWAĆ
GwynBleidD
22.11.2014
Pokaż funkcje Zapisz_Dane, ZapiszDaneNick, Wczytaj_Dane, WczytajDaneNick i client_infochanged w całości.
Petpat
22.11.2014
Dzięki za zaangażowanie oraz za zainteresowanie, sebul, bo tak chciałem że tak powiem dla estetyki, mi to odpowiada Wdarła mi się literówka i dzięki temu nie czytało danych, udało mi się to naprawić dzięki raz jeszcze
sebul
23.11.2014
Ten temat został zamknięty przez moderatora.
Powód: Temat zamknięty na prośbę użytkownika.
Z pozdrowieniami,
Zespół AMXX.PL