Zmienne wczytywanie z nvault
sebul
22.05.2011
Witam. Zrobiłem taką funkcję do zapisywania danych w nvault
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
Wszystko działa, ale chyba lepiej (jakby się dało) te wczytywanie zrobić podobnie tak jak przy zapisywaniu.
#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.
^Grzyboo
22.05.2011
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.
Użytkownik ^Grzyboo edytował ten post 22.05.2011 07:59
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
Optymalny193
22.05.2011
To wam się przyda
funfel to napisal w moim temacie a wam się to może 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ć.
sebul
22.05.2011
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 postaciNie 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;
}
questy-7-nick#0#5#0#0czyli 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
mierzwi
22.05.2011
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ą

sebul
22.05.2011
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ć.
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
Pewnie dlatego, że są 2 pętlelecz 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ą
)

Użytkownik sebul edytował ten post 22.05.2011 12:33
mierzwi
22.05.2011
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:
sebul
22.05.2011
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ć.
sebul
31.05.2011
Trochę późno się za to wziąłem, ale już sobie z tym poradziłem. Wczytywanie zrobiłem tak
No i wszystko śmiga ;] Można już zamknąć.
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ąć.