Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2017-06-18, 21:59


AirBum







Wiek: 28
Na forum: 5434 dni
Posty: 47
Nick w MP: Brak

Piwa: 507

Respekt: 50

Cze??. Poszukuj? odpowiedzi i nakierowania na kilka pyta?, dotycz?cych tego pluginu MySQL od BlueG. Emm, jak wiadomo jest to aktualnie najnowsza wersja, u?ywaj?ca "cache". Przegl?da?em sobie przyk?adowy system rejestracji zrobiony przez samego autora i to w?a?nie do niego mam kilka pyta?.

Pierwsze, a zarazem g??wne pytanie to definicja s?owa "cache". Zdo?a?em ju? troch? poczyta? na ten temat, jak sama nazwa wskazuje, jest to pami?? podr?czna, tak? Jej zastosowanie pozwoli?o skr?ci? nawet 10 razy wczytywanie z baz danych. Lecz nigdzie nie mog? znale?? jakiego? sensownego poradnika na temat stosowania tego na przyk?adzie w/w pluginu. Jakby kto? dysponowa? takim materia?em, albo chcia?by si? troch? wyprodukowa? tutaj na forum, by?bym wdzi?czny.(poradnik w j?zyku angielskim te? wchodzi w gr?)

Kolejna sprawa, to kilka dziwnych funkcji, zastosowanych w tym przyk?adzie:

Kod:

// reset player data
static const empty_player[E_PLAYERS];
Player[playerid] = empty_player;


Tworzy statyczn? zmienn? i przypisuje j? do enuma, kt?ry odpowiada za przechowywanie informacji o u?ytkowniku, jednocze?nie dodaj?c komentarz, ?e ten kod odpowiada za zresetowanie danych. Przyznam, ?e nigdy nie widzia?em czego? takiego w tym j?zyku i te? nie mam poj?cia w jaki spos?b zmienna statyczna pe?ni tutaj tak? funkcj?.

Teraz co? takiego:

Kod:

// retrieves the ID generated for an AUTO_INCREMENT column by the sent query
Player[playerid][ID] = cache_insert_id();


No dobrze, tylko, ?e w includzie nie ma ?adnego wyja?nienia, ?e to pe?ni tak? funkcj?, jak 20 pozosta?ych, sk?d mam wpa?? na takie rzeczy jak b?d? si? tym bawi??

Jeszcze taka sprawa na uboczu. Zauwa?y?em, ?e ludzie tworz? nowy public poprzez samo #define, a w niej wyst?puj? liczne znaki typu: "0%" etc. Jak? to pe?ni rol??

I na koniec, autor czasami u?ywa funkcji mysql_tquery z odwo?aniem do publica, a czasami bez - od czego to jest zale?ne?

Link do przyk?adowego skryptu: https://raw.githubusercontent.com/pBlueG/SA-MP-MySQL/master/example_scripts/login_system-cache.pwn

Pozdrawiam i dzi?kuj? za wszystkie pr?by wyja?nienia ;)

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-06-18, 22:39


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
W sprawach zwi?zanych z 'cache' niestety nie jestem w stanie pom?c, gdy? nie korzystam z tego pluginu. Na moje potrzeby wystarczy mi plugin StrickenKid'a, du?o ?atwiejszy w obs?udze. Co prawda nie jest ju? rozwijany jak plugin BlueG (aktualnie maddinat0r go rozwija) i ma mniej funkcji, ale ma wszystko, co potrzeba.

Je?li natomiast chodzi o dalszy kod

Kod:


// reset player data
static const empty_player[E_PLAYERS];
Player[playerid] = empty_player;


Tak jak sam napisa?e?, s?u?y to do resetowania tablicy gracza. Za pomoc? jednej linijki resetujesz ca?? tablic?, a tak to by? musia? po kolei zerowa? WSZYSTKIE pole zawarte w enum'ie. Czy tablica jest statyczna czy te? nie, to akurat nie ma du?ego wp?ywu. Oznacza to, ?e tablica taka jest tworzona tylko raz i jest zapisywana w pami?ci. Const natomiast oznacza, ?e warto?ci tablicy nie mog? by? modyfikowane. Dalszy kod

Kod:


// retrieves the ID generated for an AUTO_INCREMENT column by the sent query
Player[playerid][ID] = cache_insert_id();


S?u?y do pobierania ostatniego wstawionego rekordu, w wi?kszo?ci wykorzystywane jako UID gracza. Kolumna w tabeli musi posiada? typ AUTO_INCREMENT. Wtedy po zapytaniu INSERT (wstawianie rekordu gracza do tabeli), funkcja ta pobierze warto??w?a?nie tej kolumny. Dalej

"AirBum" napisał/a:

Zauwa?y?em, ?e ludzie tworz? nowy public poprzez samo #define


Nie jest to ani public ani te? ?adna funkcja, tylko po prostu definicja. Jest to wygoda, po prostu sobie co? definiujesz, np. jaki? d?ugi kod, a sam dalej u?ywasz tej definicji.

Kod:

#define IsValidWeapon(%1) (0 <= %1 <= 18 || 22 <= %1 <= 46)


W czasie kompilacji, kompilator wyszuka wszystkie definicje i sam je automatycznie zamieni.

Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
AirBum
Wysłany: 2017-06-19, 09:05


AirBum







Wiek: 28
Na forum: 5434 dni
Posty: 47
Nick w MP: Brak

Piwa: 507

Respekt: 50

Hmm, dzi?ki wielkie za wypociny - czy m?g?by? podes?a? mi link do tematu z tym MySQL rozwijanym przez maddinat0r'a?

I jeszcze mam pytanko, co do ostatniego punktu, wzi??em jaki? pierwszy lepszy kod z mapy, zawieraj?cy w?a?nie t? cudown? definicj?, czy m?g?by? mi dok?adnie wyt?umaczy? zasad? dzia?ania tego kodu? ?opatologicznie, krok po kroku.

Kod:

#if !defined SendClientMessageFormat
stock
__string[256]
;
#define SendClientMessageFormat(%0,%1,%2,%3) \
(format(__string, sizeof(__string), (%2), %3), SendClientMessage((%0), (%1), __string))
#endif


%0, %1... - to s? argumenty? A od czego zale?y jaka jest kolejno?? numeracji, nie mog?yby by? to liczby typu %50, %51 etc? W jaki spos?b to dzia?a, dlaczego nie definiujemy tego jak w normalnym stocku i normalnej funkcji - SendClient...(playerid, text...) b?d? stock xx(playerid...)

Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-06-21, 15:34


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
http://gtao.pl.com/showthread.php?t=56564

Kod:

#define SendClientMessageFormat(%0,%1,%2,%3) \
(format(__string, sizeof(__string), (%2), %3), SendClientMessage((%0), (%1), __string))


Tak, te %0, %1 to s? tak jakby argumenty. Sam za bardzo nie wiem jak to nazwa?. Definicja po prostu zamienia te argumenty na to, co sam wpiszesz. Definicja to nie to samo co funkcja, dlatego dzia?a to inaczej. Niekt?rych definicji nie da si? zrobi? dzia?aj?c na funkcjach, niekt?rych funkcji nie da si? zrobi? dzia?aj?c na definicjach.Przyk?ad definicji, kt?ry poda?e?, nie zrobisz w postaci funkcji (include y_va posiada tak? funkcje, ale bazuje na #emit).

Co do tych numer?w, to wydaje mi si?, ?e numer argumentu nie mo?e by? wi?kszy ni? 9, aczkolwiek nie dam g?owy. Wywnioskowa?em to z szybkich test?w.

Kod:

#define abc(%3,%9) new a[%3], b[%9], c[%3 + %9] //zero bledow
#define abc(%3,%10) new a[%3], b[%10], c[%3 + %10] //blad, "undefined symbol"


Postaw piwo autorowi tego posta
 

 
Tagi: mysql :: r41-2 :: cache
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » PAWN » MySQL R41-2 i cache Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku