Skocz do zawartości
ThePiotrek

Poradnik LUA dla początkujacych - część pierwsza

Rekomendowane odpowiedzi

Cześć! Postanowiłem że i ja napiszę swój poradnik, ponieważ umiem już w LUA trochę więcej niż podstawy, więc myślę że mogę to zrobić :)

 

 

A więc tak, zaczynamy!

 

 

1. Uruchamiamy serwer lokalny

Na czymś musimy testować nasze zasoby, prawda? Istnieją dwie możliwości postawienia serwera lokalnego - przez zakładkę Host game w menu, lub uruchamiając aplikację MTA Server.exe. My skorzystamy z tego drugiego. Przechodzimy do katalogu w którym mamy zainstalowane MTA, a w nim do server. Tam uruchamiamy aplikację MTA Server.exe. Uruchomi nam się konsolka. Możemy przejść do MTA. Wchodzimy na serwer 127.0.0.0, jeśli nie będziecie mogli się połączyć, w katalogu z serwerem przejdzcie do mods/deathmach, otwórzcie plik mtaserver.conf, i znajdzcie następującą linijkę: (u mnie linia 12)

    <serverip>IP Mojego Serwera</serverip>

"IP Mojego Serwera" zamieniacie na Wasze IP, które możecie sprawdzić w ten sposób:

 

 

Windows XP: Wchodzicie w start, uruchom wpisujecie cmd, później ipconfig, wartość z pola Adres IPv4 jest Waszym IP. 

 

Windows Vista i wyżej: Wchodzicie w start, w pole wyszukiwania wpisujecie cmd, klikacie enter, wpisujecie ipconfig. Wartość z pola Adres IPv4 jest Waszym IP.

 

 

2. Tworzymy pierwszy zasób

Ok, to tak. Wracamy do katalogu z serwerem, i przechodzimy do mods/deathmach/resources. Tam tworzymy nowy folder, np. mojPierwszyZasob. Przechodzimy do folderu, i dodajemy w nim plik server.lua - będzie to nasz pierwszy plik. Następnie, tworzymy plik meta.xml, a w nim wpisujemy:

<meta>  
<info author="NaszNick" type="script" name="Nasz pierwszy zasób" />
<script src="server.lua" type="server" />
</meta>

W linijce

<script src="server.lua" type="server" />

dołączamy nasz zasób, oraz dajemy serwerowi informacje, jaka to ma być strona - dla strony serwera w sumie nie trzeba pisać type="server", ale ja napisałem to dla przykładu. Możemy także zamiast "server" wstawić "client", ale nasz zasób będzie po stronie serwera - więc tego nie robimy.

 

3. Funkcja

 

Funkcja, to podstawowa rzecz jaką musimy znać. 

 

Funkcję definiujemy za pomocą:

function naszaPierwszaFunkcja ()
-- zawartosc naszej funkcji
end

w LUA, zamiast klamer jak to mamy w innych językach, funkcję kończymy używając end, tak samo z warunkami IF, ale o tym w następnej części tutoriala.

 

Tak stworzoną funkcję możemy wywołać np. za pomocą event handlera. W miejscu naszaPierwszaFunkcja wpisujemy nazwę naszej funkcji.

 

3. Pierwsze linijki!

 

No więc tak, bo podejrzewam, że wolicie coś praktycznego niż przykłady których wprawie nie da się wykorzystać :P

 

Zrobimy informację, o tym kto wszedł na serwer, lub kto z niego wyszedł.

addEventHandler("onPlayerJoin", getRootElement(), 
function ( )
outputChatBox(""..getPlayerName(source).." dołączył/a do serwera.", getRootElement(), 255, 000, 000)
end)


addEventHandler("onPlayerQuit", getRootElement(),
function ( reason )
outputChatBox(""..getPlayerName(source).." wyszedł/a z serwera ("..reason..")", getRootElement(), 255, 000, 000)
end)


No więc tak. Dlaczego getPlayerName(source)? Każda funkcja, a w naszym przypadku event, zwraca wartość source. W przypadku onPlayerJoin i onPlayerQuit source to element gracza który wszedł/wyszedł. Natomiast np. w przypadku onPlayerMarkerHit, source to element markera w który wszedł gracz. Dzięki temu możemy np. sprawdzić czy getElementData(source, "stacjaPaliwa") == true, jeśli tak to tankujemy pojazd - jeśli nie to nie robimy nic.

 

 

4. Komentarze

 

Komentarze to nie wątpliwe bardzo przydatne rzeczy. Są to po prostu jakieś dopiski do kodu, których serwer nie czyta.

 

Komentarze mogą nam się przydać np. do oznaczenia co robi dana funkcja, albo co przechowuje dana zmienna - przy większych projektach da się w tym pogubić.

 

Rozróżniamy dwa typy komentarzy:

 

1. jednoliniowy

 

Definiujemy go za pomocą '--'

 

Przykład:

local zmienna = 242 -- ta zmienna oznacza liczbe, ktora bede mnozyc

2. wieloliniowy

 

Definiujemy go za pomocą '--[[' a kończymy za pomocą ']]--'.

 

Przykład:

--[[

To jest moj pierwszy komentarz wieloliniowy
yeaaaaaaaaaaaaaaaah

]]--

5. Zmienne lokalne i globalne

 

Chwilka, zapędziłem się a nie wyjaśniłem Wam, co to zmienne :P

 

No więc tak, zmienna to po prostu tak jakby schowek, do którego możemy coś schować np. cyfrę bądź liczbę. W LUA sytuację ze zmiennymi mamy ułatwioną o tyle, że nie musimy definiować, czy zmienna ta przechowuje cyfrę, czy liczbę.

 

Rozróżniamy dwa typy zmiennych:

 

  • Lokalną

Występuje tylko w pliku w którym została stworzona, lub jeśli została stworzona w warunku IF lub funkcji, to tylko wewnątrz warunku lub funkcji. 

Definiujemy ją za pomocą

local zmienna = 5242
  • Globalną

 

Występuje w całym zasobie, nie ma znaczenia czy stworzymy ją w funkcji czy też w warunku.

 

Definiujemy ją za pomocą:

zmienna = 4141

Czyli po prostu nazwy zmiennej, = i jej zawartość.

 

 

To na dziś wszystko, planuję także drugą część poradnika :) Zapraszam do pisania sugestii, oraz konstruktywnej krytyki.

Edytowane przez ThePiotrek

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiecie? Od niedawna mnie zastanawia, czemu 1/2 osób kodzących w Lua używa funkcji getRootElement, getResourceRootElement(getThisResource()) - przecież są "ukryte" zmienne, które to zastępują - root i resourceRoot to samo z getLocalPlayer() - localPlayer.

Wracając, do tematu głównego. Poradnik, poradnikiem wielu ciekawych rzeczy tu nie znalazłem.

A i source to nie jest element gracza czy jakiegoś elementu. Ma to fachową nazwę - źródło zdarzenia. Układ kodu jest tragiczny, nie wiem jak Wy na takim czymś możecie na co dzień pracować... Cóż, więcej mogę powiedzieć... rób kolejne poradniki, tylko w tamtych nieco bardziej się postaraj.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Natomiast np. w przypadku onPlayerMarkerHit, source to element marker

Jesteś pewny ?

 

 

 

No tak, zapomniałem.

 

Jeśli zdefiniujemy gracza w funkcji jako np. player (function test (player)) to dopiero wtedy parametr source przybierze wartość markera. 

 

 

Dzięki l0nger za opinię, będę się starać. Wystarczy po każdym warunku, funkcji wcisnąć TAB? :D

 

 

W następnej części poradnika mam zamiar wytłumaczyć funkcje anonimowe, oraz pokazać, jak stworzyć marker, po wejściu do którego da nam jakieś auto.

Edytowane przez ThePiotrek

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Jeśli zdefiniujemy gracza w funkcji jako np. player (function test (player)) to dopiero wtedy parametr source przybierze wartość markera.

Nie nie nie nie nie. To, że wpiszesz w argument funkcji 'player' da Ci tyle co kombajn na asfalcie. Każdy event ma swoje argumenty, które są podane na wiki. Weźmy przykład np z onPlayeLogin :

addEventHandler ( "onPlayerLogin", root, function ( traktor, kombajn, przyczepa )
	outputChatBox ( kombajn, source )
end)

Nie jest ważne co tu wpiszę, to działa jak zmienna. Spróbuj użyc tego kodu powyżej.

 

Traktor - 

  • thePreviousAccount: The account the player was logged into before

Kombajn - 

  • theCurrentAccount: The account the player logged into just now

Przyczepa - 

  • autoLogin: Whether this login was a result of an autologin

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ale ja Ci dałem przykład jak wyglądaja argumenty w funkcjach bo większość ludzi myśli, że w LUA elementy definiujemy poprzez thePlayer co jest po prostu wymysłem MTA bo możemy tam wkleić "czołg" i określi nam jako dany element.

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ę.

×