Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Sprawdzenie poprawnosci zapisu/odczytu danych z nVault


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


  • Zamknięty Temat jest zamknięty
10 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 22.04.2014 09:20

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

  • +
  • -
  • 0

#2 Andrzejek

    Ucze się :]

  • Power User

Reputacja: 136
Zaawansowany

  • Postów:1 300
  • Imię:Andrzej
Offline

Napisano 22.04.2014 14:17

Według mnie jest wszystko w porządku


  • +
  • -
  • 0

Mam do sprzedania pluginy AMXX pod serwery typu, JB, ONLY DD2, ZOMBIE, COD MOD, DR i inne...

 

Jeżeli jesteś zainteresowany(a), napisz na PW lub GG 42384104


#3 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 22.04.2014 15:16

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"
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#4 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 23.04.2014 06:42


- 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?


  • +
  • -
  • 0

#5 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 23.04.2014 11:39

Ż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.
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#6 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 23.04.2014 17:12

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

 

Mam usunąć całkowicie zmienną wczytaj?


  • +
  • -
  • 0

#7 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 23.04.2014 19:19

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

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#8 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 23.04.2014 19:40

Czyli tak:

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

?


  • +
  • -
  • 0

#9 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 23.04.2014 19:46

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

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#10 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 24.04.2014 06:21

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;
}

  • +
  • -
  • 0

#11 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 24.04.2014 09:44   Najlepsza odpowiedź

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;
}

  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych