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

Zmienne wczytywanie z nvault


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

#1 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 22.05.2011 04:42

Witam. Zrobiłem taką funkcję do zapisywania danych w nvault
#define Q_NUMBER 2

public zapisz_aktualny_quest(id) {
new key[128], data[64], name[64];
get_user_name(id, name, charsmax(name));
format(key, charsmax(key), "questy-%i-%s", dbm_get_user_class(id), name);
formatex(data, charsmax(data), "#%i#%i", quest_gracza[id][0]+1, ile_juz[id][0]);
for(new i=1; i<Q_NUMBER; i++) {
formatex(data, charsmax(data), "%s#%i#%i", data, quest_gracza[id][i]+1, ile_juz[id][i]);
}
nvault_set(vault_questy2, key, data);
}

I teraz do tego pytanie... Jak podobnym sposobem zrobić wczytywanie tych danych? Czyli ilość danych do wczytania będzie zależeć od definicji "Q_NUMBER", bo aktualnie mam to napisane w ten sposób
public wczytaj_aktualny_quest(id) {
new key[128], data[64], name[64];
get_user_name(id, name, charsmax(name));
format(key, charsmax(key), "questy-%i-%s", dbm_get_user_class(id), name);
nvault_get(vault_questy2, key, data, charsmax(data));
replace_all(data, charsmax(data), "#", " ");

new questt[32], ile[32], questt1[32], ile1[32];
parse(data, questt, 31, ile, 31, questt1, 31, ile1, 31);
ile_juz[id][0] = str_to_num(ile);
ile_juz[id][1] = str_to_num(ile1);
quest_gracza[id][0] = str_to_num(questt)-1;
quest_gracza[id][1] = str_to_num(questt1)-1;
}

Wszystko działa, ale chyba lepiej (jakby się dało) te wczytywanie zrobić podobnie tak jak przy zapisywaniu.
  • +
  • -
  • 0

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


#2 ^Grzyboo

    Wszechobecny

  • Użytkownik

Reputacja: 246
Wszechwidzący

  • Postów:461
  • Imię:Grzyboo
  • Lokalizacja:Tak
Offline

Napisano 22.05.2011 07:58

Nie można używać pętli w nvault, na pewno nie w taki sposób, bo to nie działa i wiem coś o tym.



w zapisz:

format(key, charsmax(key), "questy-%i-%s", dbm_get_user_class(id), name);
formatex(data, charsmax(data), "%i#%i#%i#%i", quest_gracza[id][0]+1, quest_gracza[id][1]+1, ile_juz[id][0], ile_juz[id][1]);



public wczytaj_aktualny_quest(id) {
new key[128], data[64], name[64];
get_user_name(id, name, charsmax(name));
format(key, charsmax(key), "questy-%i-%s", dbm_get_user_class(id), name);
formatex(data, charsmax(data), "%i#%i#%i#%i", quest_gracza[id][0]+1, quest_gracza[id][1]+1, ile_juz[id][0], ile_juz[id][1]);
nvault_get(vault_questy2, key, data, charsmax(data));
replace_all(data, charsmax(data), "#", " ");

new questt[32], ile[32], questt1[32], ile1[32];
parse(data, questt, 31, questt1, 31, ile, 31, ile1, 31);
ile_juz[id][0] = str_to_num(ile);
ile_juz[id][1] = str_to_num(ile1);
quest_gracza[id][0] = str_to_num(questt)-1;
quest_gracza[id][1] = str_to_num(questt1)-1;
}

Użytkownik ^Grzyboo edytował ten post 22.05.2011 07:59

  • +
  • -
  • 0

#3 Optymalny193

    Wszechwidzący

  • Zbanowany

Reputacja: 30
Życzliwy

  • Postów:294
  • Imię:Paweł
  • Lokalizacja:Europa
Offline

Napisano 22.05.2011 09:59

To wam się przyda

new vaultkey[64],vaultdata[256];
/* Zrobiliśmy tablice len 64 i 256, na razie są puste czyli "" */
/* Dajemy tu nvalut_load która w te zmienne wsadzi nam kod który wczytała. */

/* Teraz tak jak ty chcesz */
new vaultkey[64],vaultdata[256]; /* Robimy te tablice */
format(vaultkey,63,"%s-Mod",NameID); /* Ustawiamy dla nich keya */
format(vaultdata,255,"%i#%i#",iExp[id], iLvl[id]); /* Ustawiamy dane */
/* Dajemy tu nvault_load która te zmienne zmieni na to co wczytała */

funfel to napisal w moim temacie a wam się to może przydać.

#4 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 22.05.2011 11:35

Nie można używać pętli w nvault, na pewno nie w taki sposób, bo to nie działa i wiem coś o tym.



w zapisz:

format(key, charsmax(key), "questy-%i-%s", dbm_get_user_class(id), name);
formatex(data, charsmax(data), "%i#%i#%i#%i", quest_gracza[id][0]+1, quest_gracza[id][1]+1, ile_juz[id][0], ile_juz[id][1]);



public wczytaj_aktualny_quest(id) {
new key[128], data[64], name[64];
get_user_name(id, name, charsmax(name));
format(key, charsmax(key), "questy-%i-%s", dbm_get_user_class(id), name);
formatex(data, charsmax(data), "%i#%i#%i#%i", quest_gracza[id][0]+1, quest_gracza[id][1]+1, ile_juz[id][0], ile_juz[id][1]);
nvault_get(vault_questy2, key, data, charsmax(data));
replace_all(data, charsmax(data), "#", " ");

new questt[32], ile[32], questt1[32], ile1[32];
parse(data, questt, 31, questt1, 31, ile, 31, ile1, 31);
ile_juz[id][0] = str_to_num(ile);
ile_juz[id][1] = str_to_num(ile1);
quest_gracza[id][0] = str_to_num(questt)-1;
quest_gracza[id][1] = str_to_num(questt1)-1;
}

Jak nie można jak można... Tak mam zrobione i działa, nawet po sprawdzeniu danych w pliku vault, zapisuje się to w tej postaci
questy-7-nick#0#5#0#0
czyli dobrze ;]
Po prostu chciałbym jeszcze te wczytywanie zrobić na podstawie tego zapisywania, że zmienię "Q_NUMBER" na 3 to automatycznie wczyta 6 danych, a nie 4 tak jak to teraz jest.

Użytkownik sebul edytował ten post 22.05.2011 11:36

  • +
  • -
  • 0

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


#5 mierzwi

    Banned

  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 22.05.2011 12:06

public Load(iPlayer)
{
	static data[256], timestamp;
	if( nvault_lookup(g_vault, g_iAuthID[iPlayer], data, sizeof(data) - 1, timestamp) )
	{
		ParseLoadData(iPlayer, data);
	}
	else
	{
		NewUser(iPlayer);
	}
}

public NewUser(iPlayer)
{
	g_first_time[iPlayer] = 1;
	
	g_iCash[iPlayer] = 200;
	
	for( new iItem = 0; iItem < g_iItemCount; iItem++ )
	{
		g_iItemLevel[iPlayer][iItem] = 0;
	}
	for( new iWeap = 0; iWeap < g_iWeapCount; iWeap++ )
	{
		g_iWeapLevel[iPlayer][iWeap] = 0;
	}
}

ParseLoadData(iPlayer, data[256])
{
	static num[6];
	strbreak(data, num, sizeof(num) - 1, data, sizeof(data) - 1);
	
	g_iCash[iPlayer] = str_to_num(num);
	
	for( new iItem = 0; iItem < g_iItemCount; iItem++ )
	{
		strbreak(data, num, sizeof(num) - 1, data, sizeof(data) - 1);
		g_iItemLevel[iPlayer][iItem] = clamp(str_to_num(num), 0, g_iItemMaxLevel[iItem]);
	}
	
	for( new iWeap = 0; iWeap < g_iWeapCount; iWeap++ )
	{
		strbreak(data, num, sizeof(num) - 1, data, sizeof(data) - 1);
		g_iWeapLevel[iPlayer][iWeap] = clamp(str_to_num(num), 0, g_iWeapMaxLevel[iWeap]);
	}
}

public Save(iPlayer)
{
	static data[256];
	new len = formatex(data, sizeof(data) - 1, "%i", g_iCash[iPlayer]);
	
	for( new iItem = 0; iItem < g_iItemCount; iItem++ )
	{
		len += formatex(data[len], sizeof(data) - len - 1, " %i", g_iItemLevel[iPlayer][iItem]);
	}
	
	for( new iWeap = 0; iWeap < g_iWeapCount; iWeap++ )
	{
		len += formatex(data[len], sizeof(data) - len - 1, " %i", g_iWeapLevel[iPlayer][iWeap]);
	}
	
	nvault_set(g_vault, g_iAuthID[ iPlayer ], data);
}

Wyciągnięte z innego pluginu, działa bo sam z tego korzystałem, lecz pojawia się problem jeśli chcesz coś po tym dodać (np. masz 5 czegoś tam, dodasz coś nowego np. jakąś zmienną np. kille, później dodajesz 6 do czegoś tam to kille się przesuną :D)

jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook

na pewno jakoś C się odwdzięczę!


#6 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 22.05.2011 12:26

No i o takie coś mi chodziło ;] Tylko trzeba będzie trochę pomyśleć nad tym, bo kod wydaje się skomplikowany... Jeszcze proszę nie zamykać.

lecz pojawia się problem jeśli chcesz coś po tym dodać (np. masz 5 czegoś tam, dodasz coś nowego np. jakąś zmienną np. kille, później dodajesz 6 do czegoś tam to kille się przesuną :D)

Pewnie dlatego, że są 2 pętle ^^ A ja mam u siebie jedną i jeśli będę dodawać dane, to podwójnie.

Użytkownik sebul edytował ten post 22.05.2011 12:33

  • +
  • -
  • 0

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


#7 mierzwi

    Banned

  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 22.05.2011 14:29

Nie oto mi chodzi, dajmy na to że tam jest 1 pętla, i jest 1 cash i 10 itemów, chcesz dodać np. poziom to jak dodasz przy cash to itemy się przesuną, a jak dodasz po itemach to będzie ok dopóki nie dodasz kolejnego itemu, bo wtedy item 11 wejdzie na miejsce poziomu, czaisz coś ? D:

jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook

na pewno jakoś C się odwdzięczę!


#8 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 22.05.2011 15:22

No rozumiem o co Ci chodzi, ale te questy działają właśnie na zasadzie, że do każdego zadania (np. "quest_gracza[id][0]") jest jedna tablica z postępem wykonania tego questa (np. "ile_juz[id][0]"), czyli dodając jeszcze dodatkową tablicę do questa, doda się także dodatkowa tablica z jego postępem, a to wszystko zapisze się w pliku za aktualnymi danymi, czyli kolejność nie ma prawa się tutaj popsuć.
  • +
  • -
  • 0

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


#9 mierzwi

    Banned

  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 22.05.2011 19:52

aha, to pomogłem xD :D

jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook

na pewno jakoś C się odwdzięczę!


#10 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 31.05.2011 18:46

Trochę późno się za to wziąłem, ale już sobie z tym poradziłem. Wczytywanie zrobiłem tak
public wczytaj_aktualny_quest(id) {
new key[128], data[64], name[64];
get_user_name(id, name, charsmax(name));
format(key, charsmax(key), "questy-%i-%s", dbm_get_user_class(id), name);
nvault_get(vault_questy2, key, data, charsmax(data));
replace_all(data, charsmax(data), "#", " ");

new questt[32], ile[32];
for(new i=0; i<Q_NUMBER; i++) {
strbreak(data, questt, charsmax(questt), data, charsmax(data));
quest_gracza[id][i] = str_to_num(questt)-1;
strbreak(data, ile, charsmax(ile), data, charsmax(data));
ile_juz[id][i] = str_to_num(ile);
}
}

No i wszystko śmiga ;] Można już zamknąć.
  • +
  • -
  • 0

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