Problem z gangami by Cypis
Black004
22.07.2019
Witam, problem dotyczny tego, że chce sam dodać do nich umiejętności, ale nie działa zapis tego ile dodałem mój kod wygląda tak:
public ShowSkillsMenu( id ) { static szMenu[ 512 ], iLen, iKeys; if( !iKeys ) { iKeys = MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_4 | MENU_KEY_0; } iLen = formatex( szMenu, charsmax( szMenu ), "\yMenu Umiejetnosci^n^n" ); // iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r1. \wSilownia [\rKoszt: \y500.0 szlugow\w] \y[Level:%i/5]^n", bonus_szlugow[user_gang[id]]); iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r2. \wBonus szlugow [\rKoszt: \y600.0 szlugow\w] \y[Level:%i/5]^n", bonus_szlugow[user_gang[id]] ); // iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r3. \wObrazenia [\rKoszt: \y700.0 szlugow\w] \y[Level:%i/5]^n", bonus_szlugow[user_gang[id]] ); // iLen += formatex( szMenu[ iLen ], 511 - iLen, "\r4. \wObezwladnienie [\rKoszt: \y800.0 szlugow\w] \y[Level:%i/5]^n", bonus_szlugow[user_gang[id]] ); iLen += formatex( szMenu[ iLen ], 511 - iLen, "^n\r0. \wExit" ); show_menu( id, iKeys, szMenu, -1, "Skills Menu" ); } public SkillsMenu_Handler( id, iKey ) { new Float:szlugi_gracza = get_user_jbpack(id) switch( ( iKey + 1 ) % 10 ) { case 0: { MenuGang(id); return PLUGIN_HANDLED; } case 2: { if( bonus_szlugow[user_gang[id]] == 5 ) { ColorChat( id, NORMAL, "^3[^4Jailbreak - Gang^3] ^1Twoj gang posiada maksymalny poziom tej umiejętnosci."); ShowSkillsMenu( id ); return PLUGIN_HANDLED; } new Float:iRemaining = szlugi_gracza - 600; if( iRemaining < 0 ) { ColorChat( id, NORMAL, "^3[^4Jailbreak - Gang^3] ^1Nie masz na to pieniedzy."); ShowSkillsMenu( id ); return PLUGIN_HANDLED; } bonus_szlugow[user_gang[id]]++; ColorChat( id, NORMAL, "^3[^4JailBreak - Gang^3] ^1Ulepszyles swoj gang."); set_user_jbpack( id, iRemaining ); } } ShowSkillsMenu( id ); return PLUGIN_HANDLED; }
Zapis tak:
public zaladuj_skills(id) { new name[48] get_user_name(id,name,47) new vaultkey[64],vaultdata[128] formatex(vaultkey,63,"%s-skills",name) if(nvault_get(jb_skills,vaultkey,vaultdata,127)) { new parsowanie[5][16]; parse(vaultdata, parsowanie[0], 15) bonus_szlugow[id]=str_to_num(parsowanie[0]) log_amx("WCZYTANO %s", vaultdata) } return PLUGIN_CONTINUE } public zapisz_skills(id) { new name[48] get_user_name(id,name,47) new vaultkey[64],vaultdata[128] formatex(vaultkey,63,"%s-skills",name) formatex(vaultdata,127,"%d", bonus_szlugow[user_gang[id]]) nvault_set(jb_skills,vaultkey,vaultdata) log_amx("ZAPISNO %s", vaultdata) return PLUGIN_CONTINUE }
Problem w tym, że nie zapisuję ilości lvl w bonusie i tak samo nie załadowuję tego...
new parsowanie[5][16]
W tym później będą inne umiejętności więc na razie zostawiłem tak.
Dam kod czystych gangów od cypisa:
Black004
23.07.2019
Zauważyłem, że zdublowały mi się tematy, a tam jest dodany kod z gangami, a tu nie więc dodaję:
jail_gangi (1).sma 23,56 KB
43 Ilość pobrań
Użytkownik Black004 edytował ten post 23.07.2019 09:42
Rivit
27.07.2019
Pustka...
log_amx("ZAPISNO %s", vaultdata) log_amx("WCZYTANO %s", vaultdata)
Tu dobrze pokazuje?
Dlaczego nie SQL, jak juz zapis jest zrobiony to modyfikacja jest dość prosta.
Black004
28.07.2019
Pustka...
log_amx("ZAPISNO %s", vaultdata) log_amx("WCZYTANO %s", vaultdata)Tu dobrze pokazuje?
Dlaczego nie SQL, jak juz zapis jest zrobiony to modyfikacja jest dość prosta.
Tak tu dobrze pokazuję, a sql dlatego nie, ponieważ nie wiem jak to zrobić, sql w ogóle nie potrafie,
Nie wiem też jak to by miało działać w sql i zapisywać bonus akurat do do gangu gracza.
Użytkownik Black004 edytował ten post 28.07.2019 09:25
Rivit
28.07.2019
A sprawdzałeś wartości tu:
bonus_szlugow[id]=str_to_num(parsowanie[0])
czym jest parsowanie[0] i co powstaje po konwersji na inta?
Podrzuć jeszcze funkcje w ktorych wywolujesz zapis/wczytanie
Black004
28.07.2019
public client_putinserver(id) { if(is_user_hltv(id)) return; create_gang[id] = false; user_wczytalo[id] = false; user_gang[id] = 0; user_flags[id] = USER; user_bunty[id] = 0; user_zyczenia[id] = 0; bonus_szlugow[user_gang[id]] = 0 get_user_name(id, nazwa_gracza[id], 34); replace_all(nazwa_gracza[id], 34, "'", "\'"); replace_all(nazwa_gracza[id], 34, "`", "\`"); new data[1]; data[0] = id; SQL_FormatQuery("SELECT * FROM `GangUser` WHERE `Name` = '%s';", nazwa_gracza[id]); SQL_ThreadQuery(info, "PobierzGang", gszQuery, data, 1); zaladuj_skills(id) } public client_disconnect(id) { if(is_user_hltv(id)) return; zapisz_skills(id) bonus_szlugow[user_gang[id]] = 0 }
Zmieniłem jeszcze zapis, dodałem żeby wyprintowało mi parse i też działa ulepszyłem gang na max (5 poziom) i normalnie wszędzie pisało 5, jeszcze naprawiłem jeden błąd z
bonus_szlugow[id]=str_to_num(parsowanie[0])
Bo chyba powinno być raczej tak:
bonus_szlugow[user_gang[id]]=str_to_num(parsowanie[0])
Bo w zapisie mam tak: bonus_szlugow[user_gang[id]]
Cały zapis i ladowanie wygląda tak:
public zaladuj_skills(id) { new name[48] get_user_name(id,name,47) new vaultkey[64],vaultdata[128] formatex(vaultkey,63,"%s-skills",name) if(nvault_get(jb_skills,vaultkey,vaultdata,127)) { new parsowanie[5][16]; parse(vaultdata, parsowanie[0], 15) bonus_szlugow[user_gang[id]]=str_to_num(parsowanie[0]) log_amx("WCZYTANO %s", vaultdata) log_amx("PARSOWANIE %s", parsowanie[0]) } return PLUGIN_CONTINUE } public zapisz_skills(id) { new name[48] get_user_name(id,name,47) new vaultkey[64],vaultdata[128] formatex(vaultkey,63,"%s-skills",name) formatex(vaultdata,127,"%d", bonus_szlugow[user_gang[id]]) nvault_set(jb_skills,vaultkey,vaultdata) log_amx("ZAPISNO %s", vaultdata) return PLUGIN_CONTINUE }
Rivit
28.07.2019
SQL_ThreadQuery(info, "PobierzGang", gszQuery, data, 1); zaladuj_skills(id)
załaduj skills daj w handlerze od tego sqla, czyli w PobierzGang, tam bedziesz miał wczytanie user_gangu to po tym daj zeby ladowal.
Pytanie jeszcze jak dużą masz tablice bonus_szlugow bo jak bedzie duzo gangow to Ci bedzie wychodzic poza zakres, domyslam sie ze inne bonusy są robione na dynamicznych tablicach
Black004
28.07.2019
Działa, dzięki.
Chyba da się pobrać ilość gangów w bazie danych, nie wiem jak to się robi, ale jako tymczasowe rozwiązanie moge chyba zwiększać tą tablice.
Wygląda ona teraz tak:
new bonus_szlugow[33];
I żeby zwiększyć limit to musze tylko zwiększyć w taki sposób?:
new bonus_szlugow[65];
Użytkownik Black004 edytował ten post 28.07.2019 10:55
Rivit
28.07.2019
Tak, ale to beznadziejny pomysł
W miare przyrostu gangów bedziesz musiał zmieniać Tymczasowo to jest ok, ale radze Ci popatrz na tego SQL'a, na początku też się go bałem, a jest prosty jak budowa cepa
Black004
28.07.2019
A znasz jakiś lepszy sposób, bo wymyśliłem takie coś:
#define LIMIT_GANGU 50
new bonus_szlugow[LIMIT_GANGU], obezwladnienie[LIMIT_GANGU];
Szybciej będę zwiększał limit, ale jak będzie dużo gangów to jednak pasowałoby jakiś automatyczny limit który się zwiększa jak jest nowy gang. Mógłbym zrobić zmienną, która by rosła przy każdym zalożeniu gangu i ją zapisywać w nvault
Użytkownik Black004 edytował ten post 28.07.2019 18:30
Robiin
28.07.2019

Rivit
28.07.2019
@aSiorr
Ale nie możesz stworzyć tablicy używając nvault_util_count, bo nie może to zostać wyliczone na etapie kompilacji.
Rivit
28.07.2019
Nie rozumiem Cię
Chociaż tak się zastanawiam, coś nie tak jest. Wczytujesz bonus_szlugów za każdym razem jak gracz wchodzi na serwer, załóżmy że jest jakas wartosc bonus_szlugów, wchodzi gracz z gangu X i wczytuje elegancko z nvault. Coś tam gra na mapie i zwiększa bonus_szlugów. Wchodzi gracz numer 2 z gangu X i zostaje wczytany stary bonus szlugów
Black004
29.07.2019
Nie rozumiem Cię
Chociaż tak się zastanawiam, coś nie tak jest. Wczytujesz bonus_szlugów za każdym razem jak gracz wchodzi na serwer, załóżmy że jest jakaś wartosc bonus_szlugów, wchodzi gracz z gangu X i wczytuje elegancko z nvault. Coś tam gra na mapie i zwiększa bonus_szlugów. Wchodzi gracz numer 2 z gangu X i zostaje wczytany stary bonus szlugów
Każdy gang, ma swoje id które jest przypisane do danego gracza. Wszystko się zapisuję do gangu, nie gracza.
Ja tym bardziej nie rozumiem, jak mam skorzystać z nvault_util_count
Użytkownik Black004 edytował ten post 29.07.2019 07:10
Robiin
29.07.2019
Jeśli dobrze przeczytałem i nigdzie się nie pomyliłem (a taką mam nadzieję, boście mnie zaczęli stresować) to: tablice dynamiczne.
Tworzysz tablicę dynamiczną, pushujesz do niej dane przez ArrayPushCell pod indeksem == indeksowi gangu, w nowej mapie odczytujesz ponownie.
Potem przejrzę kod gangów i może znajdę coś lepszego.
Black004
29.07.2019
Jeśli dobrze przeczytałem i nigdzie się nie pomyliłem (a taką mam nadzieję, boście mnie zaczęli stresować) to: tablice dynamiczne.
Tworzysz tablicę dynamiczną, pushujesz do niej dane przez ArrayPushCell pod indeksem == indeksowi gangu, w nowej mapie odczytujesz ponownie.
Potem przejrzę kod gangów i może znajdę coś lepszego.
Jeszcze nigdy nie używałem Pushowania, tych wszystki Array, Trie itd. Nigdy jeszcze mi to nie było potrzebne, jak ma kod wyglądać jak to użyję ?