←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[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
Zablokowany

  • +
  • -
Rivit - zdjęcie 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
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 22.04.2014

Według mnie jest wszystko w porządku

Odpowiedz

  • +
  • -
sebul - zdjęcie 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"
-
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"
Odpowiedz

  • +
  • -
Rivit - zdjęcie 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?

Odpowiedz

  • +
  • -
sebul - zdjęcie 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
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.
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 23.04.2014

aaaaa no tak. Trzeba odświeżyc wpis...

 

Mam usunąć całkowicie zmienną wczytaj?

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 23.04.2014

Tak, ale warunek z "nvault_get" zostawiasz, żeby było wiadomo czy dane zostały wczytane, czy nie.
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 23.04.2014

Czyli tak:

if(!(nvault_get(vault, vaultkey, vaultdata, 127)))

?

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 23.04.2014

Ten warunek w ogóle wywalasz, a zamiast zmiennej wczytaj dajesz "nvault_get" bez żadnej negacji.
Odpowiedz

  • +
  • -
Rivit - zdjęcie 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;
}
Odpowiedz

  • +
  • -
Najlepsza odpowiedź sebul - zdjęcie 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;
}
Odpowiedz
Zablokowany