Skocz do zawartości

Od zera do LUA Mastera - Funkcje, zdarzenia, wiki


math90
 Udostępnij

Rekomendowane odpowiedzi

Witam po raz kolejny w moim poradniku! Dzisiaj trochę o funkcjach i zdarzeniach. Tak więc zaczynamy...

Na początku opiszę prostą budowę funkcji (najprostszego bloku kodu).

function sendMessage(player, text) -- tworzymy funkcję o nazwie sendMessage i argumentach(to takie zmienne; może być ich więcej) player oraz text
    if(player ~= nil) then -- sprawdzamy warunkiem if czy zmienna player nie równa się nil
        outputChatBox(text, player) -- wysyłamy wiadomość o treści text do gracza 'player'.
    end
end -- kończymy funkcję

Jak widzimy w przeciwieństwie do PAWN w LUA nie ma klamer. Po prostu tworzymy funkcję i zamykamy ją wyrazem 'end'. Nazwy funkcji piszemy z małej litery! Z takich bloków składają się praktycznie wszystkie skrypty.
Co do zmiennej player powinna ona przechowywać element gracza - dokładniej o tym trochę później.

Event (zdarzenie) to tak jak sama nazwa mówi jakieś wydarzenie na serwerze. Przykłady:
- gracz wchodzi na serwer - onPlayerJoin
- gracz wychodzi z serwera - onPlayerQuit
- gracz klika myszką - onPlayerClick
Biblioteka MTA posiada dość sporo zdarzeń, z których możemy korzystać pisząc skrypty, ale oprócz nich możemy również sami tworzyć nowe event'y. Do czego są one nam potrzebne? Dzięki tym event'om wywołujemy funkcję. Najprostszy przykład:

function hello() -- tworzymy funkcję "hello"
    outputChatBox("Witamy na serwerze.", source) -- dodajemy funkcję wysyłają do gracza wiadomość
end -- zamyka funkcję
addEvenHandler("onPlayerJoin", getRootElement(), hello) -- podpinamy wbudowany event MTA "onPlayerJoin" pod funkcję "hello"

Source jest to zmienna zwracana przez event i przechowująca element, który wykonał dane zdarzenie. W sytuacji powyżej source będzie gracz, który wszedł na serwer.

Nowe zdarzenie tworzymy w następujący sposób:

function hello()
    outputChatBox("Witamy na serwerze.", source)
end
addEvent("helloPlayer", true) -- tworzymy event 'helloPlayer'; true oznacza, że event będzie aktywny
addEventHandler("helloPlayer", getRootElement(), helloPlayer) -- podpinamy nowy event pod funkcję

Funkcje - czyli trzecia rzecz, którą chciałbym omówić (ja nazywam je komendami wydawanymi przez skrypt dla serwera/gry). Służą one do wydawania poleceń dla serwera. Na przykład możemy mu rozkazać wyrzucić gracza, czy pobrać jego IP. Biblioteka MTA jest strasznie bogata w te polecenia. Uwierzcie mi, że nie ma porównania do PAWN. Kilka przykładów:

outputChatBox("tekst", gracz) -- wysyła wiadomość go gracza
getServerName() -- pobiera nazwę serwera
givePlayerMoney(player, 1000) -- daje graczowi tysiaka

Jest tego mnóstwo i nie jestem w stanie wszystkich wypisać, bo nawet ich nie pamiętam. Dlatego istnieje specjalna strona wiki na której znajdziecie spis wszystkich funkcji i event'ów, które posiada biblioteka MTA. Polecam mimo wszystko korzystanie z angielskiej wersji (jeżeli ktoś ma problemy to przyda się translator). Na początku można się pogubić, ale wystarczy trochę posiedzieć i potem korzystanie z tej strony jest naprawdę proste, a żeby było Wam łatwiej przygotowałem dwa SS'y.


pawn-2.png

pawn-1.png

Pamiętajcie, że istnieją dwie strony po których możemy pisać skrypty: server/client. Opowiem o nich i ich łączeniu w następnym poradniku. W tym przedstawiłem wszystko od strony server'a.

Zadanko na koniec: przeanalizujcie funkcję poniżej krok po kroku - prostota.

local nazwa = "Gaming"

function playerJoin()
outputChatBox("Witaj na serwerze ".. nazwa .."! Życzymy miłej zabawy.", source)
for k, player in ipairs(getElementsByType("player")) do
if(source ~= player) then
outputChatBox("Gracz ".. getPlayerName(source) .." wszedł na serwer.", player)
end
end
addEventHandler("onPlayerJoin", root, playerJoin)

Ciekawostka:
Zamiast getRootElement() możemy użyć zwykłego wyrazu 'root', analogicznie po stronie klienta zamiast getLocalPlayer() używamy 'localPlayer'.

Jeżeli czegoś nie zrozumieliście, albo potrzebujecie więcej przykładów piszcie pod spodem lub na PW/GG. Z chęcią odpowiem. W kolejnym poradniku postaram się wyjaśnić różnicę pomiędzy stronami klienta a serwera oraz opowiedzieć o sposobie ich łączenia.

((Na szybko pisałem trochę ))

Autor: szymex
Zakaz kopiowania i rozpowszechniania bez mojej zgody!

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

×