Skocz do zawartości
l0nger

[LUA Coding, e01] Tworzenie skryptu opartego o MySQL

Rekomendowane odpowiedzi

w4ZP12S.png


Wstęp
Witam serdecznie w pierwszym epizodzie poradnika z serii LUA Coding (PL: Kodzimy w LUA).
Jako, że na forum i na ogół w internecie znajduje się bardzo mało poradników tego typu,
postanowiłem stworzyć serie poradników, w którym to poznamy: 1) Język skryptowy LUA, podstawy 2) Poslugiwanie sie plikami XML 3) Tworzenie, usuwanie i wywolywanie eventow 4) Oskryptowanie wraz z wykorzystaniem funkcji MTA
5) Tworzenie komend 6) Tworzenie zapytan MySQL 7) Zarzadzanie danym zasobem 8) Estetyczny podział zasobów, jaki najlepszy - i dlaczego.
Seria będzie obejmowała 8 epizodów/części.

Całość po zakończeniu serii będzie wydana w wersji offline, czyli możliwej do pobrania na własny komputer - bez potrzeby wchodzenia na forum.
Ponadto, w poradnikach nie będę opisywał co dana funkcja robi, tylko jej działanie.
Szczegóły można zobaczyć na angielskiej WIKI.

Wprowadzenie
A więc zaczynamy! Po pierwsze, wyjaśnijmy sobie co to jest LUA i do czego się to używa.
LUA - to lekki język skryptowy o wysokiej wydajności, napisany w roku 1993 przez 3 autorów. Język ten zaimplementowany jest jako mała biblioteka do języka C.
Celem implementacji jest prostota, wydajność i przenośność kodu.

By móc pisać w LUA potrzebujemy:
  • Chęci,
  • Logicznego myślenia,
  • Drobnej wiedzy o językach programowania
  • Edytora tekstowego, w którym to bedziemy pisac nasz kod.
Środowisko pracy
W tym dziale, musimy sobie wybrać edytor tekstowy. Jest ich od groma. Jednak najlepszym i polecanym przeze mnie jest Notepad++, oraz Sublime Text 3.
Do tego są też edytory: Luaedit i MTA Script Editor - autorstwa 50p.

Nie będę pisał jak gdzie i skąd pobrać oraz jak to skonfigurować - to jest zbyt proste, żeby to opisywać.
Wystarczy czytać ze zrozumieniem, okej - gdy mamy już gotowe środowisko pracy. Możemy przejść do następnego działu.

Podstawy LUA
Dział ten jest dosyć obszerny, można tutaj pisać godzinami, dniami, tygodniami i latami...
Nie będziemy zaglądać do bardziej skomplikowanych dziedzin z tego języka - zajmiemy się tylko tymi potrzebnymi rzeczami.

Zmienne
Co to jest zmienna?
Zmienna to najlepszy przyjaciel każdego programisty - chcącego wydajne uprościć swój program.
Wyrózniamy dwa typy zmiennych:
  • lokalne,
  • globalne.
Zmienna lokalna działa jednie w obrębie jednego pliku, w który to została stworzona.
Zmienną lokalną wyznaczamy w następujący sposób:
local nazwa_zmiennej = string/int/bool/funkcja
Przykład zmiennej lokalnej:
local zmienna = 12
Na przykładzie ukazaliśmy zmienną, ktora przechowuje wartość liczbową (int): 12.
Możemy jej użyć w instrukcji warunkowej, dodać, odjąć, podzielić, pomnożyć i tym podobne.

Zmienna globalna dla różnicy działa w obrębie całego zasobu - po danej stronie (klienta/serwera) - zależy to od tego, gdzie została ona stworzona tzn. po jakiej stronie.
Zmienną globalną wyznaczamy w następujący sposób:
nazwa_zmiennej = string/int/bool/funkcja
Tak jak w przypadku zmiennej lokalnej zmienna globalna przyjmuje wartość liczbową (int): 12.
Rozpoznać je można po braku przedrostka "local".
Każdy typ zmiennej definiujemy za pomocą znaku równości (=), a po nim deklarujemy wartość zmiennej.
Zmienne dzielą się na cztery rodzaje:
  • string
  • int
  • bool
  • float/double
Zmienna typu string jest łańcuchem tekstowym, wyznaczamy ją rozpoczyjąc od cudzysłowia " i kończąc tym samym.
Przykład zmiennej z wykorzystaniem typu string.
local zmienna = "tekst"
Przykład zmiennej z typem int:
local zmienna = 12
Przykład zmiennej z typem bool. Bool(ean) jest wartością logiczna. Przechowuje jedynie dwie wartości - true lub false (prawda lub fałsz).
local zmienna = true
Tablice w LUA
Tablice w LUA, są magazynem zmiennych. Można w nich przechowywać małe ilości danych lub duże.
Tablice również dzielą się na: 1) lokalne, 2) globalne. Według tej samej reguły co zwykłe zmienne.
Można powiedzieć, że deklaracja tablicy jest stworzona na zasadzie deklaracji typu string, tylko, że w tym przypadku zaczynamy deklaracje znakiem { i kończymy }.

Przykładowa tablica lokalna:


local tablica = {1, 2, 3, 4}
Tego typu tablica zawiera ciąg danych pod jedną zmienna - ma to częste zastosowanie w pętlach for i nie tylko.
Jak widzicie deklarujemy tak samo jak zmienne, z tą różnicą, że stosujemy klamry.

Inny rodzaj tablicy, potocznie zwaną tablicą 2d:
local tablica = {
   [1] = {1, 2},
   [2] = {3, 4},
   [3] = {11, 22}
}
Tego typu tablica wygląda następująco, numery w nawiasach kwadratowych są numeracji pod zmienną tzn. np. local tablica[1].
W ten sposób zmienna lokalna o nazwie "tablica" przyjmuje wartość spod cyfry jeden, czyli od 1 do 2. Można również wpisać cyfrę i mieć pojedynczą wartość.

W części o pętlach pokażę Wam praktycznie zastosowanie takich tablic, a w chwili obecnej lecimy do instrukcji warunkowych.

Instrukcje warunkowe
Instrukcje warunkowe są jedną z najważniejszych części programowania - to one nadają naszym programom ręce i nogi.
W LUA wyrózniamy następujące instrukcje warunkowe:
  • if - then - end
  • elseif - then - end
  • else - end
IF - Instrukcja warunkowa "jeśli" lub "jeżeli" - jeśli coś jest równe czemuś / jeśli coś jest prawdą lub fałszem.
ELSEIF - Przedłużenie instrukcji warunkowej "IF", służy do weryfikacji/zaprzeczenia innej wartości pod tym samym warunkiem.
Przykładowo by nie pisać 30 razy IF.
ELSE - Zaprzeczenie głównego warunku instrukcji warunkowej "IF".
Przyklady instrukcji warunkowych:

IF
if 12==12 then
   print("hajs sie zgadza!")
end
IF + ELSEIF


if 12==12 then
   print("hajs sie zgadza!")
elseif 12<12 then
   print("hajs sie nie zgadza!")
end
IF + ELSE


if 12==12 then
   print("hajs sie zgadza!")
else 
   print("hajs sie nie zgadza!")
end
Skoro mowa o instrukcjach. Warto też sobie poznać/przypomnieć operatory stosowane w instrukcjach warunkowych.
= - służy do deklarowania zmiennej.
== - coś równe czemuś
> - coś większe od czegoś
< - coś mniejsze od czegoś
>= - coś większe lub równe od czegoś
<= - coś mniejsze lub równe od czegoś
Pętle
Pętle służą do zapętlenia, zautomatyzowania konkretnego bloku kodu.
W LUA wyróżniamy następujące pętle:
  • for - do - end
  • while - do - end
  • while true - do - end
  • repeat - until
Przykład pętli FOR:
local tablica = {1, 2, 3, 4, 5, 6}
for idx, wartosc in ipairs(tablica) do
   print("indeks " .. idx .. " przybiera wartosc " .. wartosc)
end
W powyższym przykładzie pętla FOR zakończy się, gdy wartość tablicy zakończy się na liczbie 6.

Pętle ponadto, posiadają także tzw. funkcje. Służą do pomijania lub zatrzymywania pętli.
Są nimi:
  • break - zatrzymuje aktualnie wykonywana petle
  • continue - pomija aktualna iteracje
Komentarze
Komentarze to drugi po tabach pomocnik programisty. Służą do opisania bloku kodu, bądź jego zakomentowania (ta druga opcja przydaje się, gdy mamy jakiś błąd w kodzie).
Wyróżniamy dwa rodzaje komentarzy:
  • jednowierszowy - potoczna nazwa - pojedynczy,
  • wielowierszowy, potocznie mozna powiedzieć, że blokowy.
Przykład komentarza jednowierszowego - rozpoczynamy komentowanie od dwóch myślników tj. "--", po czym wpisujemy tekst.
-- nasz pierwszy komentarz!!!
Zaś komentarze wieloliniowe rozpoczynamy od "--[[" a kończymy "]]--"
--[[
   To moj komentarz blokowy,
   hehehe.
]]--
W następnej części poradnika, zajmiemy się przygotowaniem naszego pierwszego zasobu, uruchomienia i skonfigurowania serwera.

Zakaz rozpowszechniania poradniku na innne fora lub zmiany jego autora.




Uwaga! Informuje, że z dniem 25 października bieżącego roku tj. 2014-go poradnik pod tytułem Lua Coding zostaje wstrzymana. Edytowane przez l0nger
Poprawki literówek.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nareszcie jakiś porządny poradnik dot. LUA.

Mam zamiar nauczyć się tego języka, ale to o wiele razy trudniejsze do opanowania niż PAWN i ciężko mi to idzie, ale mam nadzieje, że jeżeli kolejne części tego poradnika będą opisywane tak samo dokładnie to wkońcu uda mi się ogarnąć chociaż podstawy.

Polecam i pozdrawiam!

Like ;)

@edit:

Ja nawet głosuję za przypięciem tego tematu w dziale.

Edytowane przez Drakon

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Kurna ludzie wybaczcie, ale to nie jest trudniejsze, jeśli programowaliście kiedyś w czymkolwiek oprócz pawn( pascalu[rzekłbym, że częściowo na nim się opiera LUA[składniowo i pod innym względami]/delphi czy c/c++). Pawn to jest trochę prymitywizm w programowaniu i nie powinno się oceniać trudności LUA poprzez jego pryzmat ;). Poradnik świetny, czekam na następne części. Przy okazji zapytam z innej beczki(może i uprzedzę którąś część poradnika) czy w LUA do MTA ludzie piszą biblioteki jak do Pawn w Samp i pluginy(zdaje się, że je akurat tak).

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Przy okazji zapytam z innej beczki(może i uprzedzę którąś część poradnika) czy w LUA do MTA ludzie piszą biblioteki jak do Pawn w Samp i pluginy(zdaje się, że je akurat tak).

Nie ma bibliotek. Są moduły (tzn. pluginy), które pozwalają na wdrożenie funkcji. Takim przykładem jest np. moduł mta_mysql, ale według mnie implementowanie ich jest naprawdę zbędne. Ponieważ z baza MySQL możemy się połączyć za pomocą dbConnect.

Tak na marginesie.

e02 - pojawi się jutro, najdalej we wtorek.

Edytowane przez l0nger

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×