[ROZWIĄZANE] Sprawdzenie poprawnosci zapis...
Najlepsza odpowiedź
sebul
24.04.2014 09:44
public WczytajDane(id) { if(vault == INVALID_HANDLE) return PLUGIN_CONTINUE; new vaultkey[128], vaultdata[128], identyfikator[64]; new typ_zapisu = get_pcvar_num(cvar_typ_zapisu); switch(typ_zapisu) { case 1: copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]); case 2: get_user_authid(id, identyfikator, charsmax(identyfikator)); } format(vaultkey, charsmax(vaultkey), "%s-aim", identyfikator); if(nvault_get(vault, vaultkey, vaultdata, charsmax(vaultdata))) { new danegracza[2][8]; parse(vaultdata, danegracza[0], 7, danegracza[1], 7); xp_gracza[id] = str_to_num(danegracza[0]); poziom_gracza[id] = str_to_num(danegracza[1]); nvault_touch(vault, vaultkey); } else { xp_gracza[id] = 0; poziom_gracza[id] = 1; } return PLUGIN_HANDLED; }Przejdź do postu

Rivit
22.04.2014
Witam.
Ostatnio szkole się w nVault.
I mam pytanie czy taki zapis/wczyt jest poprawny? Jest to przerobiony zapis sebula (Cod mod z poprawionym zapisem).
Coś mi się dziwnie wydaje że ten kod jest jakiś lewy, a szczególnie wczytywanie.
proszę o sprawdzenie lub podpowiedz co jest nie tak.
Spoiler
sebul
22.04.2014
A co według Ciebie jest tutaj nie tak?
A co do takich ogólnych wskazówek co możesz zrobić:
- po wczytaniu danych dodaj "nvault_touch" (tak jak to jest w codzie), wtedy można sobie usuwać stare dane kiedy się chce
- "format" możesz zamienić na "formatex"
-
po co 32? Przecież nigdy nie zapiszesz takich danych liczbowych, które będą miały więcej niż 11 znaków (razem ze znakiem kończącym)
-
nie widzę, żebyś gdzieś wykorzystywał parametr "klasa"
A co do takich ogólnych wskazówek co możesz zrobić:
- po wczytaniu danych dodaj "nvault_touch" (tak jak to jest w codzie), wtedy można sobie usuwać stare dane kiedy się chce
- "format" możesz zamienić na "formatex"
-
new danegracza[2][32];
po co 32? Przecież nigdy nie zapiszesz takich danych liczbowych, które będą miały więcej niż 11 znaków (razem ze znakiem kończącym)
-
WczytajDane(id, klasa)
nie widzę, żebyś gdzieś wykorzystywał parametr "klasa"
Rivit
23.04.2014
- po wczytaniu danych dodaj "nvault_touch" (tak jak to jest w codzie), wtedy można sobie usuwać stare dane kiedy się chce
Używam tego do usuwania.
public plugin_cfg() { if(vault != INVALID_HANDLE) nvault_prune(vault, 0, get_systime() - (86400 * VAULT_EXPIREDAYS)); }
To nie będzie?
sebul
23.04.2014
Żeby móc tego używać musisz po każdy wczytaniu danych "dotknąć" klucz, żeby data się odświeżyła, bez powodu tego bym tam nie dawał.
I jeszcze jedno, nie potrzebujesz tego warunku
spójrz na to co jest w komentarzu, ten warunek był potrzebny tylko w codzie, bo stary cod miał inny sposób zapisu.
I jeszcze jedno, nie potrzebujesz tego warunku
if(!(wczytaj = nvault_get(vault, vaultkey, vaultdata, 127)))
spójrz na to co jest w komentarzu, ten warunek był potrzebny tylko w codzie, bo stary cod miał inny sposób zapisu.
Rivit
23.04.2014
aaaaa no tak. Trzeba odświeżyc wpis...
Mam usunąć całkowicie zmienną wczytaj?
sebul
23.04.2014
Tak, ale warunek z "nvault_get" zostawiasz, żeby było wiadomo czy dane zostały wczytane, czy nie.
sebul
23.04.2014
Ten warunek w ogóle wywalasz, a zamiast zmiennej wczytaj dajesz "nvault_get" bez żadnej negacji.
Rivit
24.04.2014
Dobra.
Rzuć okiem specjalisty.
public WczytajDane(id) { if(vault == INVALID_HANDLE) return PLUGIN_CONTINUE; new vaultkey[128], vaultdata[128], identyfikator[64]; new typ_zapisu = get_pcvar_num(cvar_typ_zapisu); switch(typ_zapisu) { case 1: copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]); case 2: get_user_authid(id, identyfikator, charsmax(identyfikator)); } format(vaultkey, charsmax(vaultkey), "%s-aim", identyfikator); nvault_get(vault, vaultkey, vaultdata, 127) new danegracza[2][8]; parse(vaultdata, danegracza[0], 7, danegracza[1], 7); xp_gracza[id] = str_to_num(danegracza[0]); poziom_gracza[id] = str_to_num(danegracza[1]); nvault_touch(vault, vaultkey); return PLUGIN_CONTINUE; }
Najlepsza odpowiedź
sebul
24.04.2014
public WczytajDane(id) { if(vault == INVALID_HANDLE) return PLUGIN_CONTINUE; new vaultkey[128], vaultdata[128], identyfikator[64]; new typ_zapisu = get_pcvar_num(cvar_typ_zapisu); switch(typ_zapisu) { case 1: copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]); case 2: get_user_authid(id, identyfikator, charsmax(identyfikator)); } format(vaultkey, charsmax(vaultkey), "%s-aim", identyfikator); if(nvault_get(vault, vaultkey, vaultdata, charsmax(vaultdata))) { new danegracza[2][8]; parse(vaultdata, danegracza[0], 7, danegracza[1], 7); xp_gracza[id] = str_to_num(danegracza[0]); poziom_gracza[id] = str_to_num(danegracza[1]); nvault_touch(vault, vaultkey); } else { xp_gracza[id] = 0; poziom_gracza[id] = 1; } return PLUGIN_HANDLED; }