Wstęp do pisania skryptów

From Multi Theft Auto: Wiki
Revision as of 12:14, 29 July 2011 by Msk (talk | contribs) (4z. Kolejne zmiany)
Jump to navigation Jump to search

Zasoby są kluczową częścią MTA. Najprościej rzecz ujmując, zasób to folder lub plik .zip, który zawiera zbiór plików, oraz dodatkowo plik meta, który opisuje serwerowi jak zasób powinien być ładowany i jakie pliki zawiera. Zasób w MTA, w przełożeniu na bardziej znane środowisko systemu operacyjnego, odpowiada programowi lub usłudze (sys. Windows), działającego pod jego kontrolą - mogą być uruchamiane i zatrzymywane, przy czym wiele z nich może działać jednocześnie (multitasking).

Wszystko, co dzieje się wokół skryptów, dzieje się w zasobach, które to definiują, czy jest to gamemode, mapa, czy też cokolwiek innego. MTA jest dostępne do pobrania z wieloma zasobami, których to można opcjonalnie użyć w swoich gamemodach, np. takimi jak maplimits (zatrzymuje graczy w określonych granicach na mapie), deathpickups (tworzy pickupy z brońmi), czy też admin (panel administratora).

Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy Notepad++ lub LuaEdit. Istnieje także nieoficjalny MTA Script Editor (w stanie in-development), którego także można użyć.

Tworzymy działający skrypt

Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.

Ale gdzie zacząć?

Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:

       /MTA Server/mods/deathmatch/resources/

Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest "zasobem", oraz mogą być rozpakowane i załadowane przez serwer, kiedy jest uruchamiany. Aby stworzyć swój własny zasób, po prostu utwórz folder z preferowaną nazwą. Do celów tego samouczka, użyjemy nazwy "myserver".

Powinieneś być teraz w tym katalogu:

       /MTA Server/mods/deathmatch/resources/myserver/

Identyfikujemy swój zasób

Aby serwer wiedział, co znajduje się w zasobie, plik meta.xml musi zostać stworzony, aby wylistować wszystkie pliki zasobu serwerowi. Musi on znajdować się w głównym katalogu naszego zasobu (w tym przypadku, "myserver"). Tak więc, stwórz plik tekstowy i nazwij go "meta.xml", oraz otwórz go do edycji.

Wpisz do pliku meta.xml ponizszy kod:

<meta>
     <info author="TwojNick" type="gamemode" name="My Server" description="Moj pierwszy serwer MTA" />
     <script src="script.lua" />
</meta>

W znaczniku <info /> znajduje się pole "type", które wskazuje na typ zasobu (może być to: gamemode, zwykły include lub mapa, która zostanie objaśniona w dalszej części). Gamemode to właśnie to, czego potrzebujesz, aby utworzyć działający serwer.

Znacznik <script /> wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.

Piszemy prosty skrypt

Zauważ, że w znaczniku <script /> plik skryptu .lua umieściliśmy w bieżącym katalogu (gdybyśmy chcieli inaczej, zawsze jest taka możliwości, działa to dokładnie tak, jak w HTML'u). Teraz utwórzmy ten plik. Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:

function joinHandler()
	local x = 1959.55
	local y = -1714.46
	local z = 15
	spawnPlayer(source, x, y, z)
	fadeCamera(source, true)
	setCameraTarget(source, source)
	outputChatBox("Witaj na moim serwerze!", source)
end
addEventHandler("onPlayerJoin", getRootElement(), joinHandler)

Skrypt ten zespawnuję cię w powyższych koordynatach (x, y, z), kiedy tylko dołączysz do gry. Zauważ, że funkcja fadeCamera musi zostać tutaj użyta, inaczej ekran byłby cały czas czarny. Także, w wydaniach MTA po DP2, musisz ustawić cel kamery (inaczej gracz zobaczy tylko niebo).

Zmienna source wskazuje, kto wywołał event (zdarzenie). Gdy gracz dołączy, kiedy kod jest wykonywany, zmiennej tej używa się, aby zobaczyć, kto dołączył. Dzięki niej, zespawnuję docelowego gracza, zamiast każdego, lub losowej osoby.

Jeżeli bliżej przyjrzymy się funkcji addEventHandler, możemy zauważyć 3 rzeczy: zdarzenie 'onPlayerJoin', który wskazuje, kiedy event jest wywoływany; getRootElement(), które pokazuje kto/co może go wywołać (getRootElement() to wszystko/każdy), oraz joinHandler, które wskazuje na funkcję, która ma być wywołana po tym, kiedy event się zaczął. Wszelakie inne detale zostaną wyjaśnione w dalszej części. Teraz można już uruchomić serwer, oraz wytestować skrypt!

Uruchamianie skryptu

Żeby wystartować serwer pod kontrolą systemu Windows, po prostu uruchom plik wykonywalny w katalogu twojego serwera MTA. Na początku wyświetlą się dane twojego serwera. Zanotuj numer portu, którego będziesz potem potrzebował, przy dołączaniu do gry. Następnie serwer załaduje wszystkie zasoby (załąduje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy ("ready to accept connections!").

Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to mieć na "czymś" grać. Wpisz "gamemode myserver", oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję "Quick Connect" i używając swojego adresu IP, oraz portu (który zdobyliśmy wcześniej) połączyć się. Jeżeli wszystko pójdzie dobrze, za kilka chwil twoja postać będzie wędrowała po ulicach Los Santos.

Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby