Skocz do zawartości

Podstawy języka LUA. Struktura oraz zastosowanie w MTA


OguzYea
 Udostępnij

Rekomendowane odpowiedzi

No cóż... Nadszedł ten moment gdy ja także napiszę własny poradnik. No ale cóż... W tym temacie opiszę podstawy języka LUA, jego strukturę, itd oraz zastosowanie w MTA.

Po pierwsze - po wszystkie informacje, funkcje, itd. najlepiej zajrzeć na oficjalną wiki MTAhttp://www.wiki.multitheftauto.com

1. Klamry

Język ten różni się od c++, pawn, itd. między innymi tym, że zamiast klamr pisze się wyraz "end".

Tak wygląda to w c++:

function blablabla(jakistamargument)
{
}

W LUA wygląda to tak:

function blablabla(jakistamargument)
end

Czyli nie ma klamr otwierających, są tylko zamykające. Proste?

2. Instrukcje warunkowe, warunki logiczne

Tradycyjna konstrukcja instrukcji warunkowej to:

if costam then
end

Jak widać musimy umieścić tutaj warunek logiczny, dodatkowo pojawia się tutaj słowo "then". Nie trzeba stosować tutaj nawiasów, aczkolwiek przy większych instrukcjach warunkowych jest to wskazane w celach lepszego rozumienia kodu.

Warunki logiczne to między innymi:

== -- równa się
~= -- jest inne od
< -- jest mniejsze
> -- jest większe
<= -- jest mniejsze lub równe
=> -- jest większe lub równe

Przykładowe zastosowanie - zmienna a równa się zmiennej b:

if a == b then
    -- Coś tam się dzieje
end

3. Funkcje

Funkcje to instrukcja dla maszyny że ma coś zrobić. Jest możliwość zdefiniowania własnej funkcji. Przykładem funkcji może być outputDebugString. Służy ona do napisania jakiegoś tekstu w konsoli. Posiada ona argument - tekst do wyświetlenia. Przykładowe zastosowanie we własnej funkcji:

function command_print(text)-- funkcja command_print z argumentem "text"
    outputDebugString(text) -- wykorzystujemy zmienną "text" która została podana w funkcji.
end

Jak widzicie jest to proste.

4. Układanie kodu

Ważną rzeczą jest układanie kodu - wielu początkujących programistów nie układa kodu, a jest to ważne dla przejrzystości kodu.

Jak widzieliście wcześniej robiłem odstęp klawiszem "tab" - układałem kod.

Kod układa się jak wspomniałem klawiszem "tab". Jak wiadomo klawisz ten robi odstęp na kilka znaków.

Należy stosować to po każdym otwarciu klamry(w c++).

Przykład układania kodu:

function blablabla(blablablaa, blabla)
    if blablablaa == blabla then
        outputDebugString("blablablaa jest równe blabla")
    end
    if blablablaa ~= blabla then
        outputDebugString("blablablaa jest równe blabla")
    end
end

5. Komentarze

Kolejną ważną rzeczą są komentarze. Na początku kod jest łatwy do zrozumienia, aczkolwiek z przypływem linijek sam autor może mieć problem ze zrozumieniem co on robi. W komentarzach można dawać nie potrzebny obecnie kod, lub taki który nie nadaje się do wersji produkcyjnej. Możemy tam dawać również spostrzeżenia, co ręka napisze ogólnie.

Są dwa rodzaje komentarzy - jednoliniowe i dwuliniowe. W LUA komentarz jednoliniowy zaznaczamy w taki sposób:

-- TODO: coś tam

Zostanie on pominięty przy kompilacji. Dwuliniowy zaznaczamy w ten sposób -

--[[
Coś tam, jakieś
info,
coś tam
info
]]--

Przy pomocy [[-- otwieramy komentarz dwuliniowy, a za pomocą --]] go zakańczamy.

6. Podręczny słowniczek

Większość słówek jest taka sama jak w innych językach programowania - zmienna, tablica, itd.

W MTA dodatkowo dochodzą słowa takie jak:

Event - wydarzenie które dzieje się gdy coś tam. Czyli ogólnie jest to taki odpowiednik "callback'a" w języku PAWN.

To be continued.

Odnośnik do komentarza
Udostępnij na innych stronach

Problem wciąż nierozwiązany? Dodaj swoją odpowiedź

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto. Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Podobna zawartość

    • Witam serdecznie,
      mam do sprzedania oprawę graficzną na serwer MTA - panel logowania, panel f1, hud, pasek stanu, powiadomienie.
      Poniżej prezentuje prace które są na sprzedaż:

       
      Interesuje mnie tylko i wyłącznie płatność za pośrednictwem PayPal - cena za szczególny projekt jest do ustalenia inwidualnie z osobą która jest chętna na zakup.

      Kontakt: 
      GG: 31068550
      E-mail: fiv.design@wp.pl
      Discord: fivd#4931
    • Witam. szukam Master Server pod GTA SA-MP i MTA (Multi Theft Auto)??liczę że coś darmowego będzie 
    • Poradnik dotyczący MySQL pod LUA i Pawn
      Spis treści:
      1). Wprowadzenie
      2). Wymagania
      3). Transakcje:
      - omówienie
      - polecenia
      3). Tworzenie tabel
      4). Typy pól
      5). Łączenie z bazą
      6). Wysyłanie zapytania
      7). Omówienie kilku funkcji dot. MySQL
      Wprowadzenie:
      MySQL to inaczej wolnodostępny system zarządzania bazą danych. Jest obsługiwany przez wiele systemów, dzięki czemu nie mamy problemu z utrzymaniem kompatybilności. Dodatkowo jest wydany wersji źródłowej, co umożliwia skompilowanie go dla dowolnej platformy systemowej. Istnieje kilka typów mechanizmów każdy z nich służy do innego zastosowania:
      - MyISAM - domyślny mechanizm (nie obsługuje transakcji ani kluczy obcych, umożlwia wyszukiwanie pełnotekstowe) - InnoDB - także domyślna opcja (obsługuje transakcje, klucze obce oraz zakładanie blokad na poziomie wierszy) Jest jeszcze kilka typów, ale nimi się nie będziemy interesować, ponieważ zostały wycofane.
      Wymagania(informacje dla osób chcących założyć hosting baz mysql):
      Co prawda MySQL nie potrzebuje dużych wymagań z takiego powodu iż sam w trakcie wykonywania procesów, stara się je sam optymalizować. To także dotyczy się tabel oraz baz danych. Z doświadczenia nauczyłem się, że w teorii bazy potrzebują dużo pamięci RAM i szybkie dyski, można też trafić na to, że procesory też są brane pod uwagę. Głównie MySQL opiera się na cache'ch, bo ponad 90% wykonywanych zapytań trafia właśnie tam.
      Konfiguracja dla osób, które chcą w przyszłości otworzyć firmę oferująca bazy danych:
      - Procesor: sempron 3000+
      - Pamięć: 2 GM RAM
      - Dysk twardy (główny): 2x250 GB (RE, 16 MB cache) z RAID
      - Dysk twardy (poboczny): 1x400 GB (wolniejsze dyski, dla przeprowadzanych backup'ów)
      Druga konfiguracja "optymalna" dla użytkownika:
      - Procesor: 1000+
      - Pamięć: 256/512 MB RAM
      - Dysk twardy: 20 GB z (RE, 16 MB cache i RAID)
      Transakcje:
      Transakcja - co to w ogóle jest? Otóż jest to zbiór operacji na bazie danych, które stanowią w istocie pewną całość i jako takie powinny być wykonane wszystkie lub żadna z nich. Przykładem takiej transakcji jest bankowa - przelew. Muszą zostać spełnione 2 operacje - zabranie pieniędzy z jednego konta oraz dopisanie ich do drugiego. W przypadku niepowodzenia żadna z tych operacji nie powinna być zatwierdzona, gdyż zajście tylko jednej powodowałoby nieprawidłowości w bazie danych (pojawienie się lub zniknięcie pieniędzy).
      Transakcja składa się z trzech elementów:
      rozpoczęcia wykonania zamknięcia W systemach bazodanowych istotne jest, aby transakcja trwała jak najkrócej, ponieważ równolegle może być dokonywanych wiele transakcji. Każdy etap transakcji jest logowany, dzięki czemu w razie awarii systemu można odtworzyć stan bazy danych sprzed transakcji, która nie została zamknięta.
       
      Transakcje w SQL
      W systemach baz danych realizujących standard SQL następujące polecenia dotyczą transakcji:
      BEGIN lub BEGIN WORK - rozpoczęcie transakcji; COMMIT - zatwierdzenie zmian wykonanych w obrębie transakcji; ROLLBACK - odrzucenie zmian wykonanych w obrębie transakcji; SAVEPOINT nazwa - zdefiniowanie punktu pośredniego o określonej nazwie; RELEASE SAVEPOINT nazwa - skasowanie punktu pośredniego; ROLLBACK TO SAVEPOINT nazwa - wycofanie transakcji do stanu zapamiętanego; Tworzenie tabel:
      Jest to główny proces obsługi naszej bazy, wymaga utworzenia bazy i połączenia się, ale o łączeniu w następnym rozdziale. Możemy zacząć wprowadzać dane, najpierw jednak trzeba utworzyć tabele, robimy to według następującego schematu:
      CREATE TABLE nazwa_tabeli (nazwa_pola1 typ_pola1 [atrybuty], nazwa_pola2 typ_pola2 [atrybuty], nazwa_pola3 typ_pola3 [atrybuty], PRIMARY KEY(nazwa_polaX)) Przykład:
      CREATE TABLE NBA (id int NOT NULL AUTO_INCREMENT, imie char(30), lata char(3), punkty char(3), mistrzostwa char(3), PRIMARY KEY(id)) Każda tabela musi posiadać co najmniej jedno pole, dodatkowo co najmniej jedno pole, które będzie jednoznacznie identyfikuje wiersz w tabeli - tak zwany klucz główny. Jeśli jest masa danych, a Ty znasz klucz główny jednego z wierszy wtedy możesz bez problemu dostać się do tego wiersza. W naszym przypadku kluczem głównym jest pole pierwsze - id.
      Przeważnie nadaje jako klucz główny określa się pierwsze pole tabeli. Dodatkowo klucz główny posiada dwa atrybuty:
      pierwszy - NOT NULL - oznaczający, że wartość tego pola nigdy nie może być pusta;
      drugi - AUTO_INCREMENT* - oznaczający, że wartość pola będzie automatycznie zwiększania przez bazę danych przy dodaniu rekordu;

      * Atrybut AUTO_INCREMENT - możemy stosować tylko do pól typu całkowitoliczbowego.
      Typy pól:
      Dostępnych jest wiele typów pól, najpopularniejsze poniżej:
      - CHAR(x) / VARCHAR(x) - ciąg znaków o maksymalnej dł. X, gdzie X nie może być większy od 255; - BLOB - binarny ciąg znaków o dł. ograniczonej przez pamięc Twojego serwera; - TINYINT(ilość znaków) - liczby z zakresu od -128 do 127 lub liczby dodatnie od 0 do 255; - SMALLINT(ilość znaków) - liczby z zakresu od -32768 do 32767 lub liczby dodatnie od 0 do 65535; - MEDIUMINT(ilość znaków) - liczby z zakresu od -8388608 do 8388607 lub liczby dodatnie od 0 do 16777215; - INTEGER / INT - liczba całkowita z przedziału -2147483647 do 2147483647 lub liczby dodatnie od 0 do 4294967295; - TEXT - tekstowy ciąg znaków o dł. ograniczonej przez pamięć Twojego serwera; - DATE - data w formacie określonym przez ustawienia serwera; - ENUM - enumeracja (wyliczenie). W kolumnie może się znaleźć jedna z podanych wartości; - YEAR - rok, jeśli zostanie podany zły, jego wartość zmieni się w 0000; - DECIMAL(x, y) - liczba dziesiętna, gdzie X oznacza maksymalną liczbe cyfr, a Y maksymalną liczbę cyfr po przecinku; Łączenie z bazą:
      Za pomocą poniższego kodu połączymy się poprawnie z naszą bazą (plugin: MySQL StrickenKid):
      #define SQL_HOST "localhost" #define SQL_USER "user" #define SQL_PASSWORD "password" #define SQL_DB "datebase" new MySQL:sql_init; public OnFilterScriptInit() { sql_init = mysql_init(1); new sql_handle = mysql_connect(SQL_HOST, SQL_USER, SQL_PASSWORD, SQL_DB, sql_init, .auto_reconnect=1); if (sql_handle) // mysql_connect jeśli nastąpi poprawne połączenie z bazą zwróci nam wynik "true" { // jeśli warunek się wykona printf("Połączono z bazą danych, gratulacje!"); } else { // jeśli warunek się nie wykona printf("Niepołączono z bazą danych!!!"); SendRconCommand("exit"); // zamykamy serwer } return 1; } public OnFilterScriptExit() return mysql_close(sql_init); I tak oto poprawnie połączyliśmy się z naszą bazą!
      Wysyłanie zapytania:
      W tym kroku nauczymy się wykonywać polecenia/zapytania, które wyślemy do naszej bazy.
      Dla przykładu pobierzemy z naszej przykładowej tabeli lata oraz punkty, którego wyszukamy za pomocą imienia.
      new buffer[127], playerNick[MAX_PLAYER_NAME]; GetPlayerName(playerid, playerNick, MAX_PLAYER_NAME); mysql_real_escape_string(playerNick, playerNick); // sprawdzamy, czy nie ma zadnych podejrzanych znakow, ktore moga naszej bazie zaszkodzic format(buffer, 127, "SELECT lata, punkty FROM NBA WHERE imie='%s'", playerNick); if (mysql_query(buffer)) mysql_ping(); // Ta linijka pozwoli nam podtrzymać nasze połączenie mysql_store_result(); // zapisujemy do pamięci if (mysql_num_rows() && mysql_fetch_row(buffer, "|")) { new lata, punkty; sscanf(buffer, "p<|>dd", lata, punkty); format(buffer, 127, "Masz %d punktów i %d lat.", punkty, lata); SendClientMessage(playerid, -1, buffer); } mysql_free_result(); // czyścimy pamięć Jeśli nasz rekord będzie istniał otrzymamy wiadomość np. Masz 14 punktów i 19 lat.
      Jak widzimy bardzo łatwo jest pobrać informacje posiadając jedno z nich - tutaj imię.
      Omówienie kilku funkcji dot. MySQL:
      Ogólnie w MySQL posiadamy bardzo dużo funkcji, które przydają się nam w różnych problemach można znaleźć rozwiązania dzięki nim.
      Podam tylko te związane z datą, które mogą posłużyć nam do stworzenia systemu Premium:
      ------------------------------------------------- | Funkcja | Przykład użycia | Opis | ------------------------------------------------- HOUR() | HOUR(kolumna) | Zwraca samą godzine, ze wskazanej daty MINUTE() | MINUTE(kolumna) | Zwraca same minuty, ze wskazanej daty. SECOND() | SECOND(kolumna) | Zwraca same sekundy, ze wskazanej daty. DAYNAME() | DAYNAME(kolumna) | Zwraca nazwę dnia tygodnia. DAYOFMONTH() | DAYOFMONTH(kolumna) | Zwraca sam dzień miesiąca, ze wskazanej daty (wyrażone liczbą). MONTHNAME() | MONTHNAME(kolumna) | Zwraca nazwę miesiąca występującego we wskazanej dacie. MONTH() | MONTH(kolumna) | Zwraca sam miesiąc ze wskazanej daty (wyrażony liczbą). YEAR() | YEAR(kolumna) | Zwraca sam rok ze wskazanej daty. ADDDATE() | ADDDATE(kolumna INTERVAL x typ) | Dodaje do daty przechowywanej w kolumnie x jednostek i zwraca wynik SUBDATE() | SUBDATE(kolumna INTERVAL x typ) | Odejmuje od daty przechowywanej w kolumnie x jednostek i zwraca wynik. UNIX_TIMESTAMP()| UNIX_TIMESTAMP(data) | Zwraca liczbę sekund jaka upłynęła od początku tzw. epoki unixa lub od wskazanej daty.
    • Witam wszystkich.
      Zapraszam dziś do poczytania czegoś ciekawego nt. lua i jak zacząć programowanie w tym jakże, znanym i lubianym języku skryptowym, przez profesionalnych twórców gier.
      Ten język skryptowy był stosowany między innymi podczas tworzenia CryEngine oraz UnrealEngine 3, więc widać, że bardzo profesionaliści się na nim znają i go lubieją. Ja postaram się przybliżyć troszku sztukę programowania w tym języku pod kątem MTA. Na samym początku jednak nie zajmę się zaraz programowaniem, lecz przygotowaniem stanowiska pracy oraz narzędzi, stawianiem serwera, ogólnie wszystko to co jest potrzebne, aby później zacząć tworzyć swoje własne skrypty.
      Zacznijmy, więc.
      Na początek potrzebny nam będzie multiplayer klient + serwer MTA w tym celu należy udać się na stronę Multi Theft Auto - Best Grand Theft Auto Multiplayer Modification i pobrać stamtąd najnowszą dostępną wersje jest ona jak "byk" widoczna na stronie głównej, po pobraniu należy zainstalować wszystko. Tego kroku nie będę opisywać, chyba każdy wie jak się instaluje programy, a przynajmniej mam taką nadzieję.
      Drugim krokiem będzie zaopatrzenie się w jakiś wygodny edytor tekstu, ja polecam Notepad++, według mnie najulubieńszy edytor, obsługuje on masę języków programowania takich jak: C/C++, Lua, Python, HTML, XML, PHP, ActionScript, asm i masę na prawdę masę innych. Download Notepad++
      Teraz już mamy praktycznie wszystkie narzędzie nam potrzbne czas zacząć konfigurację serwera. W tym celu musimy odbyć podróż po naszym pięknym dysku twardym do miejsca gdzie znajduje się plik mtaserver.conf, powinien znajdować się on w folderze z MTA server\mods\deathmatch. Teraz uruchamiamy ten pliczek w Notepad++.
      Omówię tylko najważniejsze sekcje tutaj się znajdujące pierwsz to:
      - servername - tutaj ustalamy nazwę naszego serwera - serverport - tutaj ustalamy port naszego serwera na localhost powinień być ustawiony na 22003 - maxplayers - to maksymalna liczba graczy, którzy mogą wejść na serwer - resource - pliki, które wchodzą w skład serwera Po zatwierdzeniu zmian zapisujemy pliki uruchamiamy plik MTA Server.exe, jeżeli wszystko przebiega pomyślnie powinień pojawić się komunikat, że połączenie zostało utworzone pomyślnie. Raczej na tym etapie nie ma prawa być inaczej, bo jeszcze nie modyfikowaliśmy nic.
      Teraz należy odpalić MTA kliknąć na Quick Connect jako IP wpisać: 127.0.0.1, a jak port 22003 i już możemy wejść na nasz serwer  
      Na razie tyle rolą wstępu ciekawszymi tematami zajmiemy się już niebawem.
    • Witam,
      Więc, mniej więcej chodzi o to że poszukuję osoby która zna się na robieniu serwerów gta v roleplay w fivem i skryptowaniu lua.
      Jeśli ktoś taki tutaj jest, to poproszę o prywatną wiadomość.
      oczywiście wynagrodzienie będzie potym jak osoba pomoże mi zrobić serwer
      Pozdrawiam.
  • Najnowsze tematy

  • Ostatnio rozwiązane

×