<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multitheftauto.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Msk</id>
	<title>Multi Theft Auto: Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multitheftauto.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Msk"/>
	<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/wiki/Special:Contributions/Msk"/>
	<updated>2026-04-05T18:22:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=GenerateString&amp;diff=36816</id>
		<title>GenerateString</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=GenerateString&amp;diff=36816"/>
		<updated>2013-08-01T07:41:49Z</updated>

		<summary type="html">&lt;p&gt;Msk: /* Code */ Bug in &amp;quot;if not length or type ( length ) ~= &amp;quot;number&amp;quot; or math.ceil ( number ) &amp;lt; 2 then return false end&amp;quot;, should be &amp;quot;math.ceil ( length )&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
With this function you can generate a random string with any characters.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;string generateString ( int length )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''length''': The length of the string to generate.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns a string with specified the length argument, or false if ''int'' was wrongly specified.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Client- and/or serverside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
letters = { &amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;,&amp;quot;d&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;f&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;h&amp;quot;,&amp;quot;i&amp;quot;,&amp;quot;j&amp;quot;,&amp;quot;k&amp;quot;,&amp;quot;l&amp;quot;,&amp;quot;m&amp;quot;,&amp;quot;n&amp;quot;,&amp;quot;o&amp;quot;,&amp;quot;p&amp;quot;,&amp;quot;q&amp;quot;,&amp;quot;r&amp;quot;,&amp;quot;s&amp;quot;,&amp;quot;t&amp;quot;,&amp;quot;u&amp;quot;,&amp;quot;v&amp;quot;,&amp;quot;w&amp;quot;,&amp;quot;x&amp;quot;,&amp;quot;y&amp;quot;,&amp;quot;z&amp;quot; }&lt;br /&gt;
numbers = { &amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;3&amp;quot;,&amp;quot;4&amp;quot;,&amp;quot;5&amp;quot;,&amp;quot;6&amp;quot;,&amp;quot;7&amp;quot;,&amp;quot;8&amp;quot;,&amp;quot;9&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
function generateLetter ( upper )&lt;br /&gt;
    if upper then return letters[ math.random ( #letters ) ]:upper ( ) end&lt;br /&gt;
    return letters[ math.random ( #letters ) ]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function generateNumber ( ) return numbers[ math.random ( 1, #numbers ) ] end&lt;br /&gt;
&lt;br /&gt;
function generateString ( length )&lt;br /&gt;
    if not length or type ( length ) ~= &amp;quot;number&amp;quot; or math.ceil ( length ) &amp;lt; 2 then return false end&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    for i = 1, math.ceil ( length ) do&lt;br /&gt;
        if math.random ( 2 ) == 1 then upper = true else upper = false end&lt;br /&gt;
&lt;br /&gt;
        if math.random ( 2 ) == 1 then result = result .. generateLetter ( upper )&lt;br /&gt;
        else result = result .. generateNumber ( ) end&lt;br /&gt;
    end&lt;br /&gt;
    return tostring ( result )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This example generates a string with 8 characters and outputs it to the chatbox.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local string = generateString ( 8 )&lt;br /&gt;
if string then outputChatBox ( &amp;quot;Generated string was: &amp;quot; .. string, getRootElement ( ), 0, 255, 0 ) end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==About==&lt;br /&gt;
&lt;br /&gt;
Author: Stryp&lt;br /&gt;
&lt;br /&gt;
Edited, simplified and &amp;quot;english-ied&amp;quot; by Benxamix2/The Kid.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26462</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26462"/>
		<updated>2011-08-02T08:45:41Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; version=&amp;quot;0.1&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; type=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby przywoływać sobie pojazdy, blisko ich pozycji. Możesz pominąć tą część, i przejść do bardziej zaawansowanego skryptowania z [[Map Manager|Map Managerem]], które kontunuuje ten samouczek. Inną drogą jest przejście do samouczka [[Wstęp do pisania skryptów z GUI]], gdzie wyjaśnione jest, jak interfejs graficzny jest rysowany oraz oskryptowany w MTA.&lt;br /&gt;
&lt;br /&gt;
==Tworzymy prostą komendę==&lt;br /&gt;
Wróćmy więc do zawartości pliku ''script.lua''. Jak zostało wspomniane wyżej, stworzymy komendę, po której wywołaniu obok bieżącej pozycji gracza pojawi się wybrany pojazd. Po pierwsze, musimy utworzyć funkcję, którą będziemy wzywali wywołaniem komendy, oraz tzw. ''command handler'', który tworzy i powoduje, że komenda może być wprowadzona przez gracza w konsoli.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- tworzymy funkcję, którą będzie wzywał command handler, z argumentami thePlayer (gracz), command (komenda), vehicleModel (model pojazdu)&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
   -- Tutaj stworzymy i zespawnujemy pojazd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- tworzymy command handler&lt;br /&gt;
addCommandHandler(&amp;quot;stworzpojazd&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Notka: kliknięcie nazwy funkcji powoduje przejście do strony z informacjami na jej temat.''&lt;br /&gt;
&lt;br /&gt;
===O command handlerach===&lt;br /&gt;
Pierwszym argumentem funkcji [[addCommandHandler]] jest nazwa komendy, którą gracz może wprowadzić, drugim argumentem jest nazwa funkcji, którą chcielibyśmy wywołać, w tym przypadku ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Jeżeli masz już doświadczenie w programowaniu, zapewne wiesz, jak wygląda typowa postać funkcji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(thePlayer, commandName, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jeżeli bliżej przypatrzymy się powyższemu przykładowi, zobaczymy, że argumentem1 jest thePlayer, a argumentem2 jest commandName. thePlayer jest po prostu zmienną oznaczającą kto wprowadził komendę, więc jakkolwiek byś jej nie nazwał, będzie zawierała gracza, który aktywował komendę. commandName jest komendą, którą gracz wprowadził. Także, jeżeli gracz wpisałby np. &amp;quot;/alarm&amp;quot;, ten argument zawierałby wartość typu string &amp;quot;alarm&amp;quot;. Argument3 jest czymś dodatkowym, co tylko wpisze gracz za komendą, będzie to później omawiane. Nigdy nie zapomnij, że pierwsze 2 argumenty są obowiązkowe, lecz możesz je nazwać dowolnie.&lt;br /&gt;
&lt;br /&gt;
Dlatego też najpierw wywołaliśmy funkcję, do której [[addCommandHandler]] się odwołuje, a potem dopiero dodaliśmy command handler. W innym przypadku komenda nie zostałaby poprawnie przypisana do funkcji. Zalecany jest taki porządek.&lt;br /&gt;
&lt;br /&gt;
Dla przykładu: ktoś wpisze w konsoli &amp;quot;/stworzpojazd 468&amp;quot;, aby stworzyć obok siebie Sancheza, command handler wywoła funkcję createVehicleForPlayer, która będzie wyglądała tak, kiedy argumenty zostaną do niej przekazane:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;stworzpojazd&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer to zmienna typu element (gracz), która wskazuje na tego gracza, który wprowadził komendę&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jak możemy zobaczyć, dostarczane jest kilka parametrów: gracza, który wywołał komendę, treść komendy, oraz wartość, która została wprowadzona po niej, w tym przypadku &amp;quot;486&amp;quot; (ID Sancheza). Pierwsze dwa parametry będą takie same we wszystkich command handlerach, można to doczytać na stronie funkcji [[addCommandHandler]]. W wyniku tego, zawsze będziesz musiał definiować przynajmniej dwa pierwsze argumenty, aby potem dodać ich dowolną ilość (dla przykładu, jakieś wartości, które funkcja ma przetwarzać)&lt;br /&gt;
&lt;br /&gt;
''Przypomnienie: Musisz zawsze dodawać command handler PO funkcji, którą definiowałeś. Porządek wykonania ma znaczenie, inaczej command handler jej nie znajdzie.''&lt;br /&gt;
&lt;br /&gt;
====Piszemy funkcję====&lt;br /&gt;
Aby prawidłowo &amp;quot;zapełnić&amp;quot; naszą funkcję, powinniśmy pomyśleć o rzeczach, które ma zrobić:&lt;br /&gt;
* Pobrać pozycję gracza, skąd będziemy wiedzieli, gdzie respawnować pojazd (chcemy, aby pojawił się po lewej stronie)&lt;br /&gt;
* Obliczyć dokładną pozycję spawnu auta (nie chcemy, aby spadło na gracza)&lt;br /&gt;
* Zespawnować podany pojazd&lt;br /&gt;
* Sprawdzić, czy się udało, w innym wypadku wypisać komunikat&lt;br /&gt;
&lt;br /&gt;
Aby dokonać tego celu, będziemy potrzebować kilku funkcji. Aby znaleźć funkcje, których będziemy potrzebować, powinniśmy odwiedzić [[Scripting Functions|Server Functions List]]. Po pierwsze, potrzebujemy funkcji, która pobierze i zwróci pozycję gracza. Odkąd gracze są Elementami, przejdziemy najpierw do '''Element functions''', gdzie znajdziemy funkcję [[getElementPosition]]. Klikając nazwę funkcji na liście, pokaże się jej opis. Możeny tam zobaczyć jej składnię, co zwraca, oraz przykłady użycia. Składnia pokazuje nam, jakich argumentów trzeba użyć:&lt;br /&gt;
&lt;br /&gt;
Dla [[getElementPosition]], składnia wygląda tak:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trzy zmienne typu ''float'' na początku oznaczają wartości, które funkcja zwraca. W tym wypadku są to 3 wartości typu zmiennoprzecinkowego (floating point) (x, y i z). W nawiasach możesz dostrzec argumenty, które musisz dostarczyć funkcji, aby została prawidłowo wykonana. W tym przypadku będzie to jedynie element (gracz), którego pozycję chcesz znać.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- pobierz pozycję i zapisz ją w zmiennych x,y,z&lt;br /&gt;
	-- (local znaczy, że zmienna będzie istniała tylko w obrębie tej funkcji, przeciwieństwo globalnej zmiennej)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie chcemy mieć pewność, że pojazd nie zespawnuje się przygniatając gracza, toteż dodamy kilka jednostek do zmiennej x, aby go przesunąć na wschód:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- pobierz pozycję gracza&lt;br /&gt;
	x = x + 5 -- dodaj 5 jednostek do pozycji&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teraz potrzebujemy następnej, innej funkcji, która będzie spawnować podane auto. Raz jeszcze poszukamy jej w [[Scripting Functions|Server Functions List]], tym razem powinna być w kategorii '''Vehicle functions''', gdzie wybierzemy właściwą: [[createVehicle]]. W składnie tej funkcji mamy tylko jedną rzecz, którą zwraca (jest to często spotykane), element typu vehicle, który wskazuje na spawnowany pojazd. Także, możemy zauważyć argumenty objęte nawiasem kwadratowym, które są opcjonalne.&lt;br /&gt;
&lt;br /&gt;
Mamy już wszystkie argumenty, których potrzebujemy dla [[createVehicle]] w naszej funkcji: Pozycję, którą obliczyliśmy w zmiennych ''x,y,z'', oraz model pojazdu, który dostarczymy przez komendę (&amp;quot;stworzpojazd 486&amp;quot;), oraz możliwość dostępu do funkcji przez zmienną ''vehicleModel'' (model pojazdu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- pobierz pozycję gracza&lt;br /&gt;
	x = x + 5 -- dodaj 5 jednostek do pozycji&lt;br /&gt;
	-- Stwórz pojazd i przechowaj element typu vehicle w zmiennej ''createdVehicle''&lt;br /&gt;
	local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26461</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26461"/>
		<updated>2011-08-02T08:38:53Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; version=&amp;quot;0.1&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; type=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby przywoływać sobie pojazdy, blisko ich pozycji. Możesz pominąć tą część, i przejść do bardziej zaawansowanego skryptowania z [[Map Manager|Map Managerem]], które kontunuuje ten samouczek. Inną drogą jest przejście do samouczka [[Wstęp do pisania skryptów z GUI]], gdzie wyjaśnione jest, jak interfejs graficzny jest rysowany oraz oskryptowany w MTA.&lt;br /&gt;
&lt;br /&gt;
==Tworzymy prostą komendę==&lt;br /&gt;
Wróćmy więc do zawartości pliku ''script.lua''. Jak zostało wspomniane wyżej, stworzymy komendę, po której wywołaniu obok bieżącej pozycji gracza pojawi się wybrany pojazd. Po pierwsze, musimy utworzyć funkcję, którą będziemy wzywali wywołaniem komendy, oraz tzw. ''command handler'', który tworzy i powoduje, że komenda może być wprowadzona przez gracza w konsoli.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- tworzymy funkcję, którą będzie wzywał command handler, z argumentami thePlayer (gracz), command (komenda), vehicleModel (model pojazdu)&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
   -- Tutaj stworzymy i zespawnujemy pojazd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- tworzymy command handler&lt;br /&gt;
addCommandHandler(&amp;quot;stworzpojazd&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Notka: kliknięcie nazwy funkcji powoduje przejście do strony z informacjami na jej temat.''&lt;br /&gt;
&lt;br /&gt;
===O command handlerach===&lt;br /&gt;
Pierwszym argumentem funkcji [[addCommandHandler]] jest nazwa komendy, którą gracz może wprowadzić, drugim argumentem jest nazwa funkcji, którą chcielibyśmy wywołać, w tym przypadku ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Jeżeli masz już doświadczenie w programowaniu, zapewne wiesz, jak wygląda typowa postać funkcji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(thePlayer, commandName, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jeżeli bliżej przypatrzymy się powyższemu przykładowi, zobaczymy, że argumentem1 jest thePlayer, a argumentem2 jest commandName. thePlayer jest po prostu zmienną oznaczającą kto wprowadził komendę, więc jakkolwiek byś jej nie nazwał, będzie zawierała gracza, który aktywował komendę. commandName jest komendą, którą gracz wprowadził. Także, jeżeli gracz wpisałby np. &amp;quot;/alarm&amp;quot;, ten argument zawierałby wartość typu string &amp;quot;alarm&amp;quot;. Argument3 jest czymś dodatkowym, co tylko wpisze gracz za komendą, będzie to później omawiane. Nigdy nie zapomnij, że pierwsze 2 argumenty są obowiązkowe, lecz możesz je nazwać dowolnie.&lt;br /&gt;
&lt;br /&gt;
Dlatego też najpierw wywołaliśmy funkcję, do której [[addCommandHandler]] się odwołuje, a potem dopiero dodaliśmy command handler. W innym przypadku komenda nie zostałaby poprawnie przypisana do funkcji. Zalecany jest taki porządek.&lt;br /&gt;
&lt;br /&gt;
Dla przykładu: ktoś wpisze w konsoli &amp;quot;/stworzpojazd 468&amp;quot;, aby stworzyć obok siebie Sancheza, command handler wywoła funkcję createVehicleForPlayer, która będzie wyglądała tak, kiedy argumenty zostaną do niej przekazane:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;stworzpojazd&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer to zmienna typu element (gracz), która wskazuje na tego gracza, który wprowadził komendę&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jak możemy zobaczyć, dostarczane jest kilka parametrów: gracza, który wywołał komendę, treść komendy, oraz wartość, która została wprowadzona po niej, w tym przypadku &amp;quot;486&amp;quot; (ID Sancheza). Pierwsze dwa parametry będą takie same we wszystkich command handlerach, można to doczytać na stronie funkcji [[addCommandHandler]]. W wyniku tego, zawsze będziesz musiał definiować przynajmniej dwa pierwsze argumenty, aby potem dodać ich dowolną ilość (dla przykładu, jakieś wartości, które funkcja ma przetwarzać)&lt;br /&gt;
&lt;br /&gt;
''Przypomnienie: Musisz zawsze dodawać command handler PO funkcji, którą definiowałeś. Porządek wykonania ma znaczenie, inaczej command handler jej nie znajdzie.''&lt;br /&gt;
&lt;br /&gt;
====Piszemy funkcję====&lt;br /&gt;
Aby prawidłowo &amp;quot;zapełnić&amp;quot; naszą funkcję, powinniśmy pomyśleć o rzeczach, które ma zrobić:&lt;br /&gt;
* Pobrać pozycję gracza, skąd będziemy wiedzieli, gdzie respawnować pojazd (chcemy, aby pojawił się po lewej stronie)&lt;br /&gt;
* Obliczyć dokładną pozycję spawnu auta (nie chcemy, aby spadło na gracza)&lt;br /&gt;
* Zespawnować podany pojazd&lt;br /&gt;
* Sprawdzić, czy się udało, w innym wypadku wypisać komunikat&lt;br /&gt;
&lt;br /&gt;
Aby dokonać tego celu, będziemy potrzebować kilku funkcji. Aby znaleźć funkcje, których będziemy potrzebować, powinniśmy odwiedzić [[Scripting Functions|Server Functions List]]. Po pierwsze, potrzebujemy funkcji, która pobierze i zwróci pozycję gracza. Odkąd gracze są Elementami, przejdziemy najpierw do '''Element functions''', gdzie znajdziemy funkcję [[getElementPosition]]. Klikając nazwę funkcji na liście, pokaże się jej opis. Możeny tam zobaczyć jej składnię, co zwraca, oraz przykłady użycia. Składnia pokazuje nam, jakich argumentów trzeba użyć:&lt;br /&gt;
&lt;br /&gt;
Dla [[getElementPosition]], składnia wygląda tak:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trzy zmienne typu ''float'' na początku oznaczają wartości, które funkcja zwraca. W tym wypadku są to 3 wartości typu zmiennoprzecinkowego (floating point) (x, y i z). W nawiasach możesz dostrzec argumenty, które musisz dostarczyć funkcji, aby została prawidłowo wykonana. W tym przypadku będzie to jedynie element (gracz), którego pozycję chcesz znać.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- pobierz pozycję i zapisz ją w zmiennych x,y,z&lt;br /&gt;
	-- (local znaczy, że zmienna będzie istniała tylko w obrębie tej funkcji, przeciwieństwo globalnej zmiennej)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie chcemy mieć pewność, że pojazd nie zespawnuje się przygniatając gracza, toteż dodamy kilka jednostek do zmiennej x, aby go przesunąć na wschód:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- pobierz pozycję gracza&lt;br /&gt;
	x = x + 5 -- dodaj 5 jednostek do pozycji&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teraz potrzebujemy następnej, innej funkcji, która będzie spawnować podane auto. Raz jeszcze poszukamy jej w [[Scripting Functions|Server Functions List]], tym razem powinna być w kategorii '''Vehicle functions''', gdzie wybierzemy właściwą: [[createVehicle]]. W składnie tej funkcji mamy tylko jedną rzecz, którą zwraca (jest to często spotykane), element typu vehicle, który wskazuje na spawnowany pojazd. Także, możemy zauważyć argumenty objęte nawiasem kwadratowym, które są opcjonalne.&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26460</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26460"/>
		<updated>2011-08-02T08:35:22Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; version=&amp;quot;0.1&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; type=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby przywoływać sobie pojazdy, blisko ich pozycji. Możesz pominąć tą część, i przejść do bardziej zaawansowanego skryptowania z [[Map Manager|Map Managerem]], które kontunuuje ten samouczek. Inną drogą jest przejście do samouczka [[Wstęp do pisania skryptów z GUI]], gdzie wyjaśnione jest, jak interfejs graficzny jest rysowany oraz oskryptowany w MTA.&lt;br /&gt;
&lt;br /&gt;
==Tworzymy prostą komendę==&lt;br /&gt;
Wróćmy więc do zawartości pliku ''script.lua''. Jak zostało wspomniane wyżej, stworzymy komendę, po której wywołaniu obok bieżącej pozycji gracza pojawi się wybrany pojazd. Po pierwsze, musimy utworzyć funkcję, którą będziemy wzywali wywołaniem komendy, oraz tzw. ''command handler'', który tworzy i powoduje, że komenda może być wprowadzona przez gracza w konsoli.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- tworzymy funkcję, którą będzie wzywał command handler, z argumentami thePlayer (gracz), command (komenda), vehicleModel (model pojazdu)&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
   -- Tutaj stworzymy i zespawnujemy pojazd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- tworzymy command handler&lt;br /&gt;
addCommandHandler(&amp;quot;stworzpojazd&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Notka: kliknięcie nazwy funkcji powoduje przejście do strony z informacjami na jej temat.''&lt;br /&gt;
&lt;br /&gt;
===O command handlerach===&lt;br /&gt;
Pierwszym argumentem funkcji [[addCommandHandler]] jest nazwa komendy, którą gracz może wprowadzić, drugim argumentem jest nazwa funkcji, którą chcielibyśmy wywołać, w tym przypadku ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Jeżeli masz już doświadczenie w programowaniu, zapewne wiesz, jak wygląda typowa postać funkcji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(thePlayer, commandName, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jeżeli bliżej przypatrzymy się powyższemu przykładowi, zobaczymy, że argumentem1 jest thePlayer, a argumentem2 jest commandName. thePlayer jest po prostu zmienną oznaczającą kto wprowadził komendę, więc jakkolwiek byś jej nie nazwał, będzie zawierała gracza, który aktywował komendę. commandName jest komendą, którą gracz wprowadził. Także, jeżeli gracz wpisałby np. &amp;quot;/alarm&amp;quot;, ten argument zawierałby wartość typu string &amp;quot;alarm&amp;quot;. Argument3 jest czymś dodatkowym, co tylko wpisze gracz za komendą, będzie to później omawiane. Nigdy nie zapomnij, że pierwsze 2 argumenty są obowiązkowe, lecz możesz je nazwać dowolnie.&lt;br /&gt;
&lt;br /&gt;
Dlatego też najpierw wywołaliśmy funkcję, do której [[addCommandHandler]] się odwołuje, a potem dopiero dodaliśmy command handler. W innym przypadku komenda nie zostałaby poprawnie przypisana do funkcji. Zalecany jest taki porządek.&lt;br /&gt;
&lt;br /&gt;
Dla przykładu: ktoś wpisze w konsoli &amp;quot;/stworzpojazd 468&amp;quot;, aby stworzyć obok siebie Sancheza, command handler wywoła funkcję createVehicleForPlayer, która będzie wyglądała tak, kiedy argumenty zostaną do niej przekazane:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;stworzpojazd&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer to zmienna typu element (gracz), która wskazuje na tego gracza, który wprowadził komendę&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jak możemy zobaczyć, dostarczane jest kilka parametrów: gracza, który wywołał komendę, treść komendy, oraz wartość, która została wprowadzona po niej, w tym przypadku &amp;quot;486&amp;quot; (ID Sancheza). Pierwsze dwa parametry będą takie same we wszystkich command handlerach, można to doczytać na stronie funkcji [[addCommandHandler]]. W wyniku tego, zawsze będziesz musiał definiować przynajmniej dwa pierwsze argumenty, aby potem dodać ich dowolną ilość (dla przykładu, jakieś wartości, które funkcja ma przetwarzać)&lt;br /&gt;
&lt;br /&gt;
''Przypomnienie: Musisz zawsze dodawać command handler PO funkcji, którą definiowałeś. Porządek wykonania ma znaczenie, inaczej command handler jej nie znajdzie.''&lt;br /&gt;
&lt;br /&gt;
====Piszemy funkcję====&lt;br /&gt;
Aby prawidłowo &amp;quot;zapełnić&amp;quot; naszą funkcję, powinniśmy pomyśleć o rzeczach, które ma zrobić:&lt;br /&gt;
* Pobrać pozycję gracza, skąd będziemy wiedzieli, gdzie respawnować pojazd (chcemy, aby pojawił się po lewej stronie)&lt;br /&gt;
* Obliczyć dokładną pozycję spawnu auta (nie chcemy, aby spadło na gracza)&lt;br /&gt;
* Zespawnować podany pojazd&lt;br /&gt;
* Sprawdzić, czy się udało, w innym wypadku wypisać komunikat&lt;br /&gt;
&lt;br /&gt;
Aby dokonać tego celu, będziemy potrzebować kilku funkcji. Aby znaleźć funkcje, których będziemy potrzebować, powinniśmy odwiedzić [[Scripting Functions|Server Functions List]]. Po pierwsze, potrzebujemy funkcji, która pobierze i zwróci pozycję gracza. Odkąd gracze są Elementami, przejdziemy najpierw do '''Element functions''', gdzie znajdziemy funkcję [[getElementPosition]]. Klikając nazwę funkcji na liście, pokaże się jej opis. Możeny tam zobaczyć jej składnię, co zwraca, oraz przykłady użycia. Składnia pokazuje nam, jakich argumentów trzeba użyć:&lt;br /&gt;
&lt;br /&gt;
Dla [[getElementPosition]], składnia wygląda tak:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trzy zmienne typu ''float'' na początku oznaczają wartości, które funkcja zwraca. W tym wypadku są to 3 wartości typu zmiennoprzecinkowego (floating point) (x, y i z). W nawiasach możesz dostrzec argumenty, które musisz dostarczyć funkcji, aby została prawidłowo wykonana. W tym przypadku będzie to jedynie element (gracz), którego pozycję chcesz znać.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	-- pobierz pozycję i zapisz ją w zmiennych x,y,z&lt;br /&gt;
	-- (local znaczy, że zmienna będzie istniała tylko w obrębie tej funkcji, przeciwieństwo globalnej zmiennej)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie chcemy mieć pewność, że pojazd nie zespawnuje się przygniatając gracza, toteż dodamy kilka jednostek do zmiennej x, aby go przesunąć na wschód:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
	local x,y,z = getElementPosition(thePlayer) -- pobierz pozycję gracza&lt;br /&gt;
	x = x + 5 -- dodaj 5 jednostek do pozycji&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26459</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26459"/>
		<updated>2011-08-02T07:09:51Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; version=&amp;quot;0.1&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; type=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby przywoływać sobie pojazdy, blisko ich pozycji. Możesz pominąć tą część, i przejść do bardziej zaawansowanego skryptowania z [[Map Manager|Map Managerem]], które kontunuuje ten samouczek. Inną drogą jest przejście do samouczka [[Wstęp do pisania skryptów z GUI]], gdzie wyjaśnione jest, jak interfejs graficzny jest rysowany oraz oskryptowany w MTA.&lt;br /&gt;
&lt;br /&gt;
==Tworzymy prostą komendę==&lt;br /&gt;
Wróćmy więc do zawartości pliku ''script.lua''. Jak zostało wspomniane wyżej, stworzymy komendę, po której wywołaniu obok bieżącej pozycji gracza pojawi się wybrany pojazd. Po pierwsze, musimy utworzyć funkcję, którą będziemy wzywali wywołaniem komendy, oraz tzw. ''command handler'', który tworzy i powoduje, że komenda może być wprowadzona przez gracza w konsoli.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- tworzymy funkcję, którą będzie wzywał command handler, z argumentami thePlayer (gracz), command (komenda), vehicleModel (model pojazdu)&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
   -- Tutaj stworzymy i zespawnujemy pojazd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- tworzymy command handler&lt;br /&gt;
addCommandHandler(&amp;quot;stworzpojazd&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Notka: kliknięcie nazwy funkcji powoduje przejście do strony z informacjami na jej temat.''&lt;br /&gt;
&lt;br /&gt;
===O command handlerach===&lt;br /&gt;
Pierwszym argumentem funkcji [[addCommandHandler]] jest nazwa komendy, którą gracz może wprowadzić, drugim argumentem jest nazwa funkcji, którą chcielibyśmy wywołać, w tym przypadku ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Jeżeli masz już doświadczenie w programowaniu, zapewne wiesz, jak wygląda typowa postać funkcji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(thePlayer, commandName, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jeżeli bliżej przypatrzymy się powyższemu przykładowi, zobaczymy, że argumentem1 jest thePlayer, a argumentem2 jest commandName. thePlayer jest po prostu zmienną oznaczającą kto wprowadził komendę, więc jakkolwiek byś jej nie nazwał, będzie zawierała gracza, który aktywował komendę. commandName jest komendą, którą gracz wprowadził. Także, jeżeli gracz wpisałby np. &amp;quot;/alarm&amp;quot;, ten argument zawierałby wartość typu string &amp;quot;alarm&amp;quot;. Argument3 jest czymś dodatkowym, co tylko wpisze gracz za komendą, będzie to później omawiane. Nigdy nie zapomnij, że pierwsze 2 argumenty są obowiązkowe, lecz możesz je nazwać dowolnie.&lt;br /&gt;
&lt;br /&gt;
Dlatego też najpierw wywołaliśmy funkcję, do której [[addCommandHandler]] się odwołuje, a potem dopiero dodaliśmy command handler. W innym przypadku komenda nie zostałaby poprawnie przypisana do funkcji. Zalecany jest taki porządek.&lt;br /&gt;
&lt;br /&gt;
Dla przykładu: ktoś wpisze w konsoli &amp;quot;/stworzpojazd 468&amp;quot;, aby stworzyć obok siebie Sancheza, command handler wywoła funkcję createVehicleForPlayer, która będzie wyglądała tak, kiedy argumenty zostaną do niej przekazane:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;stworzpojazd&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer to zmienna typu element (gracz), która wskazuje na tego gracza, który wprowadził komendę&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jak możemy zobaczyć, dostarczane jest kilka parametrów: gracza, który wywołał komendę, treść komendy, oraz wartość, która została wprowadzona po niej, w tym przypadku &amp;quot;486&amp;quot; (ID Sancheza). Pierwsze dwa parametry będą takie same we wszystkich command handlerach, można to doczytać na stronie funkcji [[addCommandHandler]]. W wyniku tego, zawsze będziesz musiał definiować przynajmniej dwa pierwsze argumenty, aby potem dodać ich dowolną ilość (dla przykładu, jakieś wartości, które funkcja ma przetwarzać)&lt;br /&gt;
&lt;br /&gt;
''Przypomnienie: Musisz zawsze dodawać command handler PO funkcji, którą definiowałeś. Porządek wykonania ma znaczenie, inaczej command handler jej nie znajdzie.''&lt;br /&gt;
&lt;br /&gt;
====Piszemy funkcję====&lt;br /&gt;
Aby prawidłowo &amp;quot;zapełnić&amp;quot; naszą funkcję, powinniśmy pomyśleć o rzeczach, które ma zrobić:&lt;br /&gt;
* Pobrać pozycję gracza, skąd będziemy wiedzieli, gdzie respawnować pojazd (chcemy, aby pojawił się po lewej stronie)&lt;br /&gt;
* Obliczyć dokładną pozycję spawnu auta (nie chcemy, aby spadło na gracza)&lt;br /&gt;
* Zespawnować podany pojazd&lt;br /&gt;
* Sprawdzić, czy się udało, w innym wypadku wypisać komunikat&lt;br /&gt;
&lt;br /&gt;
Aby dokonać tego celu, będziemy potrzebować kilku funkcji. Aby znaleźć funkcje, których będziemy potrzebować, powinniśmy odwiedzić [[Scripting Functions|Server Functions List]]. Po pierwsze, potrzebujemy funkcji, która pobierze i zwróci pozycję gracza. Odkąd gracze są Elementami, przejdziemy najpierw do '''Element functions''', gdzie znajdziemy funkcję [[getElementPosition]]. Klikając nazwę funkcji na liście, pokaże się jej opis. Możeny tam zobaczyć jej składnię, co zwraca, oraz przykłady użycia. Składnia pokazuje nam, jakich argumentów trzeba użyć:&lt;br /&gt;
&lt;br /&gt;
Dla [[getElementPosition]], składnia wygląda tak:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float getElementPosition ( element theElement )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26444</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26444"/>
		<updated>2011-07-30T12:33:36Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; version=&amp;quot;0.1&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; type=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby przywoływać sobie pojazdy, blisko ich pozycji. Możesz pominąć tą część, i przejść do bardziej zaawansowanego skryptowania z [[Map Manager|Map Managerem]], które kontunuuje ten samouczek. Inną drogą jest przejście do samouczka [[Wstęp do pisania skryptów z GUI]], gdzie wyjaśnione jest, jak interfejs graficzny jest rysowany oraz oskryptowany w MTA.&lt;br /&gt;
&lt;br /&gt;
==Tworzymy prostą komendę==&lt;br /&gt;
Wróćmy więc do zawartości pliku ''script.lua''. Jak zostało wspomniane wyżej, stworzymy komendę, po której wywołaniu obok bieżącej pozycji gracza pojawi się wybrany pojazd. Po pierwsze, musimy utworzyć funkcję, którą będziemy wzywali wywołaniem komendy, oraz tzw. ''command handler'', który tworzy i powoduje, że komenda może być wprowadzona przez gracza w konsoli.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- tworzymy funkcję, którą będzie wzywał command handler, z argumentami thePlayer (gracz), command (komenda), vehicleModel (model pojazdu)&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
   -- Tutaj stworzymy i zespawnujemy pojazd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- tworzymy command handler&lt;br /&gt;
addCommandHandler(&amp;quot;stworzpojazd&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Notka: kliknięcie nazwy funkcji powoduje przejście do strony z informacjami na jej temat.''&lt;br /&gt;
&lt;br /&gt;
===O command handlerach===&lt;br /&gt;
Pierwszym argumentem funkcji [[addCommandHandler]] jest nazwa komendy, którą gracz może wprowadzić, drugim argumentem jest nazwa funkcji, którą chcielibyśmy wywołać, w tym przypadku ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Jeżeli masz już doświadczenie w programowaniu, zapewne wiesz, jak wygląda typowa postać funkcji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(thePlayer, commandName, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jeżeli bliżej przypatrzymy się powyższemu przykładowi, zobaczymy, że argumentem1 jest thePlayer, a argumentem2 jest commandName. thePlayer jest po prostu zmienną oznaczającą kto wprowadził komendę, więc jakkolwiek byś jej nie nazwał, będzie zawierała gracza, który aktywował komendę. commandName jest komendą, którą gracz wprowadził. Także, jeżeli gracz wpisałby np. &amp;quot;/alarm&amp;quot;, ten argument zawierałby wartość typu string &amp;quot;alarm&amp;quot;. Argument3 jest czymś dodatkowym, co tylko wpisze gracz za komendą, będzie to później omawiane. Nigdy nie zapomnij, że pierwsze 2 argumenty są obowiązkowe, lecz możesz je nazwać dowolnie.&lt;br /&gt;
&lt;br /&gt;
Dlatego też najpierw wywołaliśmy funkcję, do której [[addCommandHandler]] się odwołuje, a potem dopiero dodaliśmy command handler. W innym przypadku komenda nie zostałaby poprawnie przypisana do funkcji. Zalecany jest taki porządek.&lt;br /&gt;
&lt;br /&gt;
Dla przykładu: ktoś wpisze w konsoli &amp;quot;/stworzpojazd 468&amp;quot;, aby stworzyć obok siebie Sancheza, command handler wywoła funkcję createVehicleForPlayer, która będzie wyglądała tak, kiedy argumenty zostaną do niej przekazane:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;stworzpojazd&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer to zmienna typu element (gracz), która wskazuje na tego gracza, który wprowadził komendę&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jak możemy zobaczyć, dostarczane jest kilka parametrów: gracza, który wywołał komendę, treść komendy, oraz wartość, która została wprowadzona po niej, w tym przypadku &amp;quot;486&amp;quot; (ID Sancheza). Pierwsze dwa parametry będą takie same we wszystkich command handlerach, można to doczytać na stronie funkcji [[addCommandHandler]]. W wyniku tego, zawsze będziesz musiał definiować przynajmniej dwa pierwsze argumenty, aby potem dodać ich dowolną ilość (dla przykładu, jakieś wartości, które funkcja ma przetwarzać)&lt;br /&gt;
&lt;br /&gt;
''Przypomnienie: Musisz zawsze dodawać command handler PO funkcji, którą definiowałeś. Porządek wykonania ma znaczenie, inaczej command handler jej nie znajdzie.''&lt;br /&gt;
&lt;br /&gt;
====Piszemy funkcję====&lt;br /&gt;
Aby prawidłowo &amp;quot;zapełnić&amp;quot; naszą funkcję, powinniśmy pomyśleć o rzeczach, które ma zrobić:&lt;br /&gt;
* Pobrać pozycję gracza, skąd będziemy wiedzieli, gdzie respawnować pojazd (chcemy, aby pojawił się po lewej stronie)&lt;br /&gt;
* Obliczyć dokładną pozycję spawnu auta (nie chcemy, aby spadło na gracza)&lt;br /&gt;
* Zespawnować podany pojazd&lt;br /&gt;
* Sprawdzić, czy się udało, w innym wypadku wypisać komunikat&lt;br /&gt;
&lt;br /&gt;
Aby dokonać tego celu, będziemy potrzebować kilku funkcji. Aby znaleźć funkcje, których będziemy potrzebować, powinniśmy odwiedzić [[Scripting Functions|Server Functions List]]. Po pierwsze, potrzebujemy funkcji, która pobierze pozycję gracza.&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26438</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26438"/>
		<updated>2011-07-29T16:33:33Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; version=&amp;quot;0.1&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; type=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby przywoływać sobie pojazdy, blisko ich pozycji. Możesz pominąć tą część, i przejść do bardziej zaawansowanego skryptowania z [[Map Manager|Map Managerem]], które kontunuuje ten samouczek. Inną drogą jest przejście do samouczka [[Wstęp do pisania skryptów z GUI]], gdzie wyjaśnione jest, jak interfejs graficzny jest rysowany oraz oskryptowany w MTA.&lt;br /&gt;
&lt;br /&gt;
==Tworzymy prostą komendę==&lt;br /&gt;
Wróćmy więc do zawartości pliku ''script.lua''. Jak zostało wspomniane wyżej, stworzymy komendę, po której wywołaniu obok bieżącej pozycji gracza pojawi się wybrany pojazd. Po pierwsze, musimy utworzyć funkcję, którą będziemy wzywali wywołaniem komendy, oraz tzw. ''command handler'', który tworzy i powoduje, że komenda może być wprowadzona przez gracza w konsoli.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- tworzymy funkcję, którą będzie wzywał command handler, z argumentami thePlayer (gracz), command (komenda), vehicleModel (model pojazdu)&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
   -- Tutaj stworzymy i zespawnujemy pojazd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- tworzymy command handler&lt;br /&gt;
addCommandHandler(&amp;quot;stworzpojazd&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Notka: kliknięcie nazwy funkcji powoduje przejście do strony z informacjami na jej temat.''&lt;br /&gt;
&lt;br /&gt;
===O command handlerach===&lt;br /&gt;
Pierwszym argumentem funkcji [[addCommandHandler]] jest nazwa komendy, którą gracz może wprowadzić, drugim argumentem jest nazwa funkcji, którą chcielibyśmy wywołać, w tym przypadku ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Jeżeli masz już doświadczenie w programowaniu, zapewne wiesz, jak wygląda typowa postać funkcji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(thePlayer, commandName, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jeżeli bliżej przypatrzymy się powyższemu przykładowi, zobaczymy, że argumentem1 jest thePlayer, a argumentem2 jest commandName. thePlayer jest po prostu zmienną oznaczającą kto wprowadził komendę, więc jakkolwiek byś jej nie nazwał, będzie zawierała gracza, który aktywował komendę. commandName jest komendą, którą gracz wprowadził. Także, jeżeli gracz wpisałby np. &amp;quot;/alarm&amp;quot;, ten argument zawierałby wartość typu string &amp;quot;alarm&amp;quot;. Argument3 jest czymś dodatkowym, co tylko wpisze gracz za komendą, będzie to później omawiane. Nigdy nie zapomnij, że pierwsze 2 argumenty są obowiązkowe, lecz możesz je nazwać dowolnie.&lt;br /&gt;
&lt;br /&gt;
Dlatego też najpierw wywołaliśmy funkcję, do której [[addCommandHandler]] się odwołuje, a potem dopiero dodaliśmy command handler. W innym przypadku komenda nie zostałaby poprawnie przypisana do funkcji. Zalecany jest taki porządek.&lt;br /&gt;
&lt;br /&gt;
Dla przykładu: ktoś wpisze w konsoli &amp;quot;/stworzpojazd 468&amp;quot;, aby stworzyć obok siebie Sancheza, command handler wywoła funkcję createVehicleForPlayer, która będzie wyglądała tak, kiedy argumenty zostaną do niej przekazane:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;stworzpojazd&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer to zmienna typu element (gracz), która wskazuje na tego gracza, który wprowadził komendę&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jak możemy zobaczyć, dostarczane jest kilka parametrów: gracza, który wywołał komendę, treść komendy, oraz wartość, która została wprowadzona po niej, w tym przypadku &amp;quot;486&amp;quot; (ID Sancheza). Pierwsze dwa parametry będą takie same we wszystkich command handlerach, można to doczytać na stronie funkcji [[addCommandHandler]]. W wyniku tego, zawsze będziesz musiał definiować przynajmniej dwa pierwsze argumenty, aby potem dodać ich dowolną ilość (dla przykładu, jakieś wartości, które funkcja ma przetwarzać)&lt;br /&gt;
&lt;br /&gt;
''Przypomnienie: Musisz zawsze dodawać command handler PO funkcji, którą definiowałeś. Porządek wykonania ma znaczenie, inaczej command handler jej nie znajdzie.''&lt;br /&gt;
&lt;br /&gt;
====Piszemy funkcję====&lt;br /&gt;
Aby prawidłowo &amp;quot;zapełnić&amp;quot; naszą funkcję, powinniśmy pomyśleć o rzeczach, które ma zrobić:&lt;br /&gt;
* Pobrać pozycję gracza, skąd będziemy wiedzieli, gdzie respawnować pojazd (chcemy, aby pojawił się po lewej stronie)&lt;br /&gt;
* Obliczyć dokładną pozycję spawnu auta (nie chcemy, aby spadło na gracza)&lt;br /&gt;
* Zespawnować podany pojazd&lt;br /&gt;
* Sprawdzić, czy się udało, w innym wypadku wypisać komunikat&lt;br /&gt;
&lt;br /&gt;
Aby dokonać tego celu, będziemy potrzebować kilku funkcji. Aby znaleźć funkcje, których będziemy potrzebować, powinniśmy odwiedzić [[Scripting Functions|Server Functions List]]&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Strona_g%C5%82%C3%B3wna&amp;diff=26437</id>
		<title>Strona główna</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Strona_g%C5%82%C3%B3wna&amp;diff=26437"/>
		<updated>2011-07-29T15:33:58Z</updated>

		<summary type="html">&lt;p&gt;Msk: /* Pisanie skryptów */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background: #FFEEAA; padding: 5px; float:right; width: 30%;&amp;quot;&amp;gt;Ostatnia stabilna wersja '''Multi Theft Auto: San Andreas''' to '''{{Current Version|full}}'''. Odwiedź [http://mtasa.com/ stronę główną] i pobierz ją.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Możesz także sprawdzić [http://nightly.mtasa.com/ nightly build], aby pobrać najnowszą dostępną wersję.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Witaj w polskiej wersji Multi Theft Auto wiki. Znajdziesz tutaj bogactwo informacji na temat użytkowania Multi Theft Auto.&lt;br /&gt;
&lt;br /&gt;
Jest wiele [[How you can help|rzeczy które możesz zrobić]], by pomoc nam w rozwijaniu MTA - stworzyć mapę, gamemod, pomóc w dokumentowaniu funkcji, napisać przykładowy kod, napisać samouczek lub po prostu grać w MTA i raportować błędy, które znajdziesz.&lt;br /&gt;
&lt;br /&gt;
Jeśli masz jakieś pytania bądź problemy związane z pisaniem skryptów, zapytaj nas na [[PL/IRC_Channel|kanale IRC]].&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px; background:#fff0ac;&amp;quot;&amp;gt;&lt;br /&gt;
====Polskie wsparcie====&lt;br /&gt;
* [http://www.mtasa.pl Portal polskiej społeczności MTA:SA]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Dla początkujących====&lt;br /&gt;
&lt;br /&gt;
* [[PL/Client_Manual|Instrukcja obsługi klienta]] [[Image:Plflag.png|Artykuł w języku polskim]]/[[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
* [[PL/Server_Manual|Instrukcja obsługi serwera]] [[Image:Plflag.png|Artykuł w języku polskim]]&lt;br /&gt;
* [[Known_Issues_-_FAQ|Znane problemy - FAQ]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
* [[PL/Migracja_z_MTA:Race_do_MTA:SA_1.0.x|Migracja z MTA:Race do MTA:SA 1.0.x]] [[Image:Plflag.png|Artykuł w języku polskim]]&lt;br /&gt;
* [[Map_manager|Menadżer map]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Pisanie skryptów====&lt;br /&gt;
&lt;br /&gt;
* [[Wstęp do pisania skryptów|Wstęp do pisania skryptów]] [[Image:Plflag.png|Artykuł w języku polskim]]/[[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
* [[Introduction to Scripting the GUI|Wstęp do pisania skryptów GUI]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
* [http://robhol.net/guide/basics &amp;quot;The basics of scripting&amp;quot;] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
* [[Debugging|Samouczek debugowania]] [[Image:usen.gif|Artykuł w języku angielskim]] - Jak znaleźć błędy w swoich skryptach&lt;br /&gt;
* [[Resources|Wstęp do zasobów (resources)]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
** [[Resource Web Access|Dostęp WWW do zasobów]] [[Image:usen.gif|Artykuł w języku angielskim]] - Jak pisać strony WWW z wykorzystaniem zasobów&lt;br /&gt;
** [[:Category:Resource|Katalog zasobów]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
** [[Meta.xml]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
* [[Writing_Gamemodes|Pisanie gamemodów]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
* [[Useful_Functions|Przydatne funkcje]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Bazy danych====&lt;br /&gt;
Ta sekcja opisuje wszystkie możliwości Lua umożliwiane przez MTA bądź zasoby.&lt;br /&gt;
* [[PL/Category:Resource|Katalog zasobów]] [[Image:Plflag.png‎|Artykuł w języku polskim]] - Musisz je poznać, aby tworzyć właściwe skrypty&lt;br /&gt;
* [[PL/Client side scripts|Skrypty po stronie klienta]] [[Image:Plflag.png‎|Artykuł w języku polskim]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====General Lua Help====&lt;br /&gt;
Strony zaprojektowane, by pomóc Ci zrozumieć Lua&lt;br /&gt;
*[http://www.lua.org/pil/index.html &amp;quot;Programming in Lua&amp;quot; Manual]&lt;br /&gt;
*[http://lua-users.org/wiki/TutorialDirectory Lua Wiki]&lt;br /&gt;
*[http://nixstaller.berlios.de/manual/0.2/nixstaller_9.html A general guide to Lua from Nixstaller]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Map Editor====&lt;br /&gt;
*[[PL/Resource:Editor|Instrukcja obsługi]] [[Image:Plflag.png‎|Artykuł w języku polskim]]&lt;br /&gt;
*[[Resource:Editor/EDF|Editor Definition Format]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
*[[Resource:Editor/Plugins|Pluginy]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
*[[Resource:Editor#FAQ|Najczęściej Zadawane Pytania]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Rozwijanie Multi Theft Auto====&lt;br /&gt;
* [[Roadmap]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
* [[Git Coding Guidelines]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px; background:#CCCCFF;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Odwołania====&lt;br /&gt;
* [[PL/Funkcje po stronie klienta|Funkcje po stronie klienta]] [[Image:Plflag.png‎|Artykuł w języku polskim]]&lt;br /&gt;
* [[Client Scripting Events|Zdarzenia po stronie klienta]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
* [[Server Scripting Functions|Funkcje po stronie serwera]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
* [[Server Scripting Events|Zdarzenia po stronie serwera]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
&amp;lt;!-- Incomplete * [[Module functions|Server-side external module scripting functions list]] --&amp;gt;&lt;br /&gt;
* [[MTA Classes|Klasy MTA]] [[Image:usen.gif|Artykuł w języku angielskim]] - Szczegółowe opisy wszystkich niestandardowych typów MTA&lt;br /&gt;
** [[Element|Elementy MTA]] [[Image:usen.gif|Artykuł w języku angielskim]] / [[Element tree|Drzewo elementów]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[[Id|Listy ID]]====&lt;br /&gt;
*[[Animations|Animacje]]&lt;br /&gt;
*[[Character Skins|Skiny Postaci]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
*[[CJ_Clothes|Ubrania]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
*[[Garage|Garaże]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
*[[Interior IDs|Interiory]]&lt;br /&gt;
*[[PL/Pociski|Pociski]][[Image:Plflag.png|Artykuł w języku polskim]]&lt;br /&gt;
*[[Radar Blips|Punkty na radarze]]&lt;br /&gt;
*[[Sounds|Dźwięki]] [[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
*[[PL/Pojazdy|Pojazdy]][[Image:Plflag.png|Artykuł w języku polskim]]&lt;br /&gt;
*[[PL/Kolory Pojazdów|Kolory pojazdów]][[Image:Plflag.png|Artykuł w języku polskim]]&lt;br /&gt;
*[[Vehicle Upgrades|Modyfikacje pojazdów]]&lt;br /&gt;
*[[PL/Weapons|Bronie]] [[Image:Plflag.png|Artykuł w języku polskim]]/[[Image:usen.gif|Artykuł w języku angielskim]]&lt;br /&gt;
*[[PL/Pogoda|Pogoda]][[Image:Plflag.png|Artykuł w języku polskim]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
[[en:Main Page]]&lt;br /&gt;
[[ru:Main Page]]&lt;br /&gt;
[[it:Pagina principale]]&lt;br /&gt;
[[nl:Main Page]]&lt;br /&gt;
[[de:Hauptseite]]&lt;br /&gt;
[[es:Pagina Principal]]&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26436</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26436"/>
		<updated>2011-07-29T15:32:50Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby przywoływać sobie pojazdy, blisko ich pozycji. Możesz pominąć tą część, i przejść do bardziej zaawansowanego skryptowania z [[Map Manager|Map Managerem]], które kontunuuje ten samouczek. Inną drogą jest przejście do samouczka [[Wstęp do pisania skryptów z GUI]], gdzie wyjaśnione jest, jak interfejs graficzny jest rysowany oraz oskryptowany w MTA.&lt;br /&gt;
&lt;br /&gt;
==Tworzymy prostą komendę==&lt;br /&gt;
Wróćmy więc do zawartości pliku ''script.lua''. Jak zostało wspomniane wyżej, stworzymy komendę, po której wywołaniu obok bieżącej pozycji gracza pojawi się wybrany pojazd. Po pierwsze, musimy utworzyć funkcję, którą będziemy wzywali wywołaniem komendy, oraz tzw. ''command handler'', który tworzy i powoduje, że komenda może być wprowadzona przez gracza w konsoli.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- tworzymy funkcję, którą będzie wzywał command handler, z argumentami thePlayer (gracz), command (komenda), vehicleModel (model pojazdu)&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
   -- Tutaj stworzymy i zespawnujemy pojazd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- tworzymy command handler&lt;br /&gt;
addCommandHandler(&amp;quot;stworzpojazd&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Notka: kliknięcie nazwy funkcji powoduje przejście do strony z informacjami na jej temat.''&lt;br /&gt;
&lt;br /&gt;
===O command handlerach===&lt;br /&gt;
Pierwszym argumentem funkcji [[addCommandHandler]] jest nazwa komendy, którą gracz może wprowadzić, drugim argumentem jest nazwa funkcji, którą chcielibyśmy wywołać, w tym przypadku ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Jeżeli masz już doświadczenie w programowaniu, zapewne wiesz, jak wygląda typowa postać funkcji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(thePlayer, commandName, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jeżeli bliżej przypatrzymy się powyższemu przykładowi, zobaczymy, że argumentem1 jest thePlayer, a argumentem2 jest commandName. thePlayer jest po prostu zmienną oznaczającą kto wprowadził komendę, więc jakkolwiek byś jej nie nazwał, będzie zawierała gracza, który aktywował komendę. commandName jest komendą, którą gracz wprowadził. Także, jeżeli gracz wpisałby np. &amp;quot;/alarm&amp;quot;, ten argument zawierałby wartość typu string &amp;quot;alarm&amp;quot;. Argument3 jest czymś dodatkowym, co tylko wpisze gracz za komendą, będzie to później omawiane. Nigdy nie zapomnij, że pierwsze 2 argumenty są obowiązkowe, lecz możesz je nazwać dowolnie.&lt;br /&gt;
&lt;br /&gt;
Dlatego też najpierw wywołaliśmy funkcję, do której [[addCommandHandler]] się odwołuje, a potem dopiero dodaliśmy command handler. W innym przypadku komenda nie zostałaby poprawnie przypisana do funkcji. Zalecany jest taki porządek.&lt;br /&gt;
&lt;br /&gt;
Dla przykładu: ktoś wpisze w konsoli &amp;quot;/stworzpojazd 468&amp;quot;, aby stworzyć obok siebie Sancheza, command handler wywoła funkcję createVehicleForPlayer, która będzie wyglądała tak, kiedy argumenty zostaną do niej przekazane:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;stworzpojazd&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer to zmienna typu element (gracz), która wskazuje na tego gracza, który wprowadził komendę&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jak możemy zobaczyć, dostarczane jest kilka parametrów: gracza, który wywołał komendę, treść komendy, oraz wartość, która została wprowadzona po niej, w tym przypadku &amp;quot;486&amp;quot; (ID Sancheza). Pierwsze dwa parametry będą takie same we wszystkich command handlerach, można to doczytać na stronie funkcji [[addCommandHandler]]. W wyniku tego, zawsze będziesz musiał definiować przynajmniej dwa pierwsze argumenty, aby potem dodać ich dowolną ilość (dla przykładu, jakieś wartości, które funkcja ma przetwarzać)&lt;br /&gt;
&lt;br /&gt;
''Przypomnienie: Musisz zawsze dodawać command handler PO funkcji, którą definiowałeś. Porządek wykonania ma znaczenie, inaczej command handler jej nie znajdzie.''&lt;br /&gt;
&lt;br /&gt;
====Piszemy funkcję====&lt;br /&gt;
Aby prawidłowo &amp;quot;zapełnić&amp;quot; naszą funkcję, powinniśmy pomyśleć o rzeczach, które ma zrobić:&lt;br /&gt;
* Pobrać pozycję gracza, skąd będziemy wiedzieli, gdzie respawnować pojazd (chcemy, aby pojawił się po lewej stronie)&lt;br /&gt;
* Obliczyć dokładną pozycję spawnu auta (nie chcemy, aby spadło na gracza)&lt;br /&gt;
* Zespawnować podany pojazd&lt;br /&gt;
* Sprawdzić, czy się udało, w innym wypadku wypisać komunikat&lt;br /&gt;
&lt;br /&gt;
Aby dokonać tego celu, będziemy potrzebować kilku funkcji. Aby znaleźć funkcje, których będziemy potrzebować, powinniśmy odwiedzić [[Scripting Functions|Server Functions List]]&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26435</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26435"/>
		<updated>2011-07-29T15:26:04Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby przywoływać sobie pojazdy, blisko ich pozycji. Możesz pominąć tą część, i przejść do bardziej zaawansowanego skryptowania z [[Map Manager|Map Managerem]], które kontunuuje ten samouczek. Inną drogą jest przejście do samouczka [[Wstęp do pisania skryptów z GUI]], gdzie wyjaśnione jest, jak interfejs graficzny jest rysowany oraz oskryptowany w MTA.&lt;br /&gt;
&lt;br /&gt;
==Tworzymy prostą komendę==&lt;br /&gt;
Wróćmy więc do zawartości pliku ''script.lua''. Jak zostało wspomniane wyżej, stworzymy komendę, po której wywołaniu obok bieżącej pozycji gracza pojawi się wybrany pojazd. Po pierwsze, musimy utworzyć funkcję, którą będziemy wzywali wywołaniem komendy, oraz tzw. ''command handler'', który tworzy i powoduje, że komenda może być wprowadzona przez gracza w konsoli.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- tworzymy funkcję, którą będzie wzywał command handler, z argumentami thePlayer (gracz), command (komenda), vehicleModel (model pojazdu)&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
   -- Tutaj stworzymy i zespawnujemy pojazd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- tworzymy command handler&lt;br /&gt;
addCommandHandler(&amp;quot;stworzpojazd&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Notka: kliknięcie nazwy funkcji powoduje przejście do strony z informacjami na jej temat.''&lt;br /&gt;
&lt;br /&gt;
===O command handlerach===&lt;br /&gt;
Pierwszym argumentem funkcji [[addCommandHandler]] jest nazwa komendy, którą gracz może wprowadzić, drugim argumentem jest nazwa funkcji, którą chcielibyśmy wywołać, w tym przypadku ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Jeżeli masz już doświadczenie w programowaniu, zapewne wiesz, jak wygląda typowa postać funkcji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(thePlayer, commandName, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jeżeli bliżej przypatrzymy się powyższemu przykładowi, zobaczymy, że argumentem1 jest thePlayer, a argumentem2 jest commandName. thePlayer jest po prostu zmienną oznaczającą kto wprowadził komendę, więc jakkolwiek byś jej nie nazwał, będzie zawierała gracza, który aktywował komendę. commandName jest komendą, którą gracz wprowadził. Także, jeżeli gracz wpisałby np. &amp;quot;/alarm&amp;quot;, ten argument zawierałby wartość typu string &amp;quot;alarm&amp;quot;. Argument3 jest czymś dodatkowym, co tylko wpisze gracz za komendą, będzie to później omawiane. Nigdy nie zapomnij, że pierwsze 2 argumenty są obowiązkowe, lecz możesz je nazwać dowolnie.&lt;br /&gt;
&lt;br /&gt;
Dlatego też najpierw wywołaliśmy funkcję, do której [[addCommandHandler]] się odwołuje, a potem dopiero dodaliśmy command handler. W innym przypadku komenda nie zostałaby poprawnie przypisana do funkcji. Zalecany jest taki porządek.&lt;br /&gt;
&lt;br /&gt;
Dla przykładu: ktoś wpisze w konsoli &amp;quot;/stworzpojazd 468&amp;quot;, aby stworzyć obok siebie Sancheza, command handler wywoła funkcję createVehicleForPlayer, która będzie wyglądała tak, kiedy argumenty zostaną do niej przekazane:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
createVehicleForPlayer(thePlayer,&amp;quot;stworzpojazd&amp;quot;,&amp;quot;468&amp;quot;) -- thePlayer to zmienna typu element (gracz), która wskazuje na tego gracza, który wprowadził komendę&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Jak możemy zobaczyć, dostarczane jest kilka parametrów: gracza, który wywołał komendę, treść komendy, oraz wartość, która została wprowadzona po niej, w tym przypadku &amp;quot;486&amp;quot; (ID Sancheza). Pierwsze dwa parametry będą takie same we wszystkich command handlerach, można to doczytać na stronie funkcji [[addCommandHandler]]. W wyniku tego, zawsze będziesz musiał definiować przynajmniej dwa pierwsze argumenty, aby potem dodać ich dowolną ilość (dla przykładu, jakieś wartości, które funkcja ma przetwarzać)&lt;br /&gt;
&lt;br /&gt;
''Przypomnienie: Musisz zawsze dodawać command handler PO funkcji, którą definiowałeś. Porządek wykonania ma znaczenie, inaczej command handler jej nie znajdzie.''&lt;br /&gt;
&lt;br /&gt;
====Piszemy funkcję====&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26434</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26434"/>
		<updated>2011-07-29T14:59:22Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby przywoływać sobie pojazdy, blisko ich pozycji. Możesz pominąć tą część, i przejść do bardziej zaawansowanego skryptowania z [[Map Manager|Map Managerem]], które kontunuuje ten samouczek. Inną drogą jest przejście do samouczka [[Wstęp do pisania skryptów z GUI]], gdzie wyjaśnione jest, jak interfejs graficzny jest rysowany oraz oskryptowany w MTA.&lt;br /&gt;
&lt;br /&gt;
==Tworzymy prostą komendę==&lt;br /&gt;
Wróćmy więc do zawartości pliku ''script.lua''. Jak zostało wspomniane wyżej, stworzymy komendę, po której wywołaniu obok bieżącej pozycji gracza pojawi się wybrany pojazd. Po pierwsze, musimy utworzyć funkcję, którą będziemy wzywali wywołaniem komendy, oraz tzw. ''command handler'', który tworzy i powoduje, że komenda może być wprowadzona przez gracza w konsoli.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- tworzymy funkcję, którą będzie wzywał command handler, z argumentami thePlayer (gracz), command (komenda), vehicleModel (model pojazdu)&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
   -- Tutaj stworzymy i zespawnujemy pojazd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- tworzymy command handler&lt;br /&gt;
addCommandHandler(&amp;quot;stworzpojazd&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''Notka: kliknięcie nazwy funkcji powoduje przejście do strony z informacjami na jej temat.''&lt;br /&gt;
&lt;br /&gt;
===O command handlerach===&lt;br /&gt;
Pierwszym argumentem funkcji [[addCommandHandler]] jest nazwa komendy, którą gracz może wprowadzić, drugim argumentem jest nazwa funkcji, którą chcielibyśmy wywołać, w tym przypadku ''createVehicleForPlayer''.&lt;br /&gt;
&lt;br /&gt;
Jeżeli masz już doświadczenie w programowaniu, zapewne wiesz, jak wygląda typowa postać funkcji:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(argument1, argument2, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
nazwaFunkcji(thePlayer, commandName, argument3, ..)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26433</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26433"/>
		<updated>2011-07-29T14:54:16Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby przywoływać sobie pojazdy, blisko ich pozycji. Możesz pominąć tą część, i przejść do bardziej zaawansowanego skryptowania z [[Map Manager|Map Managerem]], które kontunuuje ten samouczek. Inną drogą jest przejście do samouczka [[Wstęp do pisania skryptów z GUI]], gdzie wyjaśnione jest, jak interfejs graficzny jest rysowany oraz oskryptowany w MTA.&lt;br /&gt;
&lt;br /&gt;
==Tworzymy prostą komendę==&lt;br /&gt;
Wróćmy więc do zawartości pliku ''script.lua''. Jak zostało wspomniane wyżej, stworzymy komendę, po której wywołaniu obok bieżącej pozycji gracza pojawi się wybrany pojazd. Po pierwsze, musimy utworzyć funkcję, którą będziemy wzywali wywołaniem komendy, oraz tzw. ''command handler'', który tworzy i powoduje, że komenda może być wprowadzona przez gracza w konsoli.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- tworzymy funkcję, którą będzie wzywał command handler, z argumentami thePlayer (gracz), command (komenda), vehicleModel (model pojazdu)&lt;br /&gt;
function createVehicleForPlayer(thePlayer, command, vehicleModel)&lt;br /&gt;
   -- Tutaj stworzymy i zespawnujemy pojazd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- tworzymy command handler&lt;br /&gt;
addCommandHandler(&amp;quot;createvehicle&amp;quot;, createVehicleForPlayer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26429</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26429"/>
		<updated>2011-07-29T13:57:34Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby przywoływać sobie pojazdy, blisko ich pozycji. Możesz pominąć tą część, i przejść do bardziej zaawansowanego skryptowania z [[Map Managerem|Map Manager]], które kontunuuje ten samouczek. Inną drogą jest przejście do samouczka [[Wstęp do pisania skryptów z GUI]], gdzie wyjaśnione jest, jak interfejs graficzny jest rysowany oraz oskryptowany w MTA.&lt;br /&gt;
&lt;br /&gt;
==Tworzymy prostą komendę==&lt;br /&gt;
Wróćmy więc do zawartości pliku ''script.lua''&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26428</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26428"/>
		<updated>2011-07-29T12:17:10Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to, aby można było mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, oraz wciśnij Enter. Serwer uruchomi twój świeżo utworzony gamemode, a także wyświetli tutaj listę wszystkich błędów/ostrzeżeń. Wreszcie, możesz uruchomić klienta MTA, wybrać opcję &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26427</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26427"/>
		<updated>2011-07-29T12:15:21Z</updated>

		<summary type="html">&lt;p&gt;Msk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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ładuje, ale nie uruchomi), które znajdują się w katalogu /resources/, i finalnie, stanie się dostępny dla graczy (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, 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ę &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26426</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26426"/>
		<updated>2011-07-29T12:14:50Z</updated>

		<summary type="html">&lt;p&gt;Msk: 4z. Kolejne zmiany&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
===Uruchamianie skryptu===&lt;br /&gt;
Ż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 (&amp;quot;ready to accept connections!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Zanim podłączysz się do serwera, musisz wpierw uruchomić gamemode. To logiczne, po to mieć na &amp;quot;czymś&amp;quot; grać. Wpisz &amp;quot;gamemode myserver&amp;quot;, 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ę &amp;quot;Quick Connect&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Następnie, utworzymy prostą komendę do wcześniejszego skryptu, którą gracze będą mogli używać, aby&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26425</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26425"/>
		<updated>2011-07-29T11:56:24Z</updated>

		<summary type="html">&lt;p&gt;Msk: 3z. Opisy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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!&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26424</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26424"/>
		<updated>2011-07-29T11:43:31Z</updated>

		<summary type="html">&lt;p&gt;Msk: Następny kod źr.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
Znacznik ''&amp;lt;script /&amp;gt;'' wskazuje na pliki skryptów (.lua), które znajdują się w zasobie, większość z nich utworzysz samodzielnie później.&lt;br /&gt;
===Piszemy prosty skrypt===&lt;br /&gt;
Zauważ, że w znaczniku ''&amp;lt;script /&amp;gt;'' 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.&lt;br /&gt;
Możesz teraz skopiować i wkleić poniższy kod do pliku script.lua:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function joinHandler()&lt;br /&gt;
	local x = 1959.55&lt;br /&gt;
	local y = -1714.46&lt;br /&gt;
	local z = 15&lt;br /&gt;
	spawnPlayer(source, x, y, z)&lt;br /&gt;
	fadeCamera(source, true)&lt;br /&gt;
	setCameraTarget(source, source)&lt;br /&gt;
	outputChatBox(&amp;quot;Witaj na moim serwerze!&amp;quot;, source)&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onPlayerJoin&amp;quot;, getRootElement(), joinHandler)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26423</id>
		<title>Wstęp do pisania skryptów</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Wst%C4%99p_do_pisania_skrypt%C3%B3w&amp;diff=26423"/>
		<updated>2011-07-29T11:32:43Z</updated>

		<summary type="html">&lt;p&gt;Msk: 1 część, tworzona, dopisywana&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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).&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
'''Pierwszym krokiem na drodze pisania skryptów w LUA powinno być używanie odpowiedniego edytora skryptów. Ułatwi to zadanie znacznie. Polecamy [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] lub [http://luaedit.sourceforge.net/ LuaEdit]. Istnieje także nieoficjalny [[MTASE|MTA Script Editor]] (w stanie in-development), którego także można użyć.'''&lt;br /&gt;
&lt;br /&gt;
==Tworzymy działający skrypt==&lt;br /&gt;
Najpierw nauczymy się, krok po kroku, jak stworzyć podstawowy, prosty skrypt, który pozwoli graczowi chodzić po mieście Los Santos.&lt;br /&gt;
===Ale gdzie zacząć?===&lt;br /&gt;
Spójrzmy na strukturę skryptów. Wejdź do swojego folderu serwera MTA (MTA Server), a następnie w poniższą ścieżkę:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/&lt;br /&gt;
&lt;br /&gt;
Powinieneś zobaczyć dużo plików .zip, które są przykładowymi skryptami, dostarczanymi wraz z MTA. Każdy plik jest &amp;quot;zasobem&amp;quot;, 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 &amp;quot;myserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Powinieneś być teraz w tym katalogu:&lt;br /&gt;
&lt;br /&gt;
        /MTA Server/mods/deathmatch/resources/myserver/&lt;br /&gt;
&lt;br /&gt;
===Identyfikujemy swój zasób===&lt;br /&gt;
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, &amp;quot;myserver&amp;quot;). Tak więc, stwórz plik tekstowy i nazwij go &amp;quot;meta.xml&amp;quot;, oraz otwórz go do edycji.&lt;br /&gt;
&lt;br /&gt;
Wpisz do pliku ''meta.xml'' ponizszy kod:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
     &amp;lt;info author=&amp;quot;TwojNick&amp;quot; type=&amp;quot;gamemode&amp;quot; name=&amp;quot;My Server&amp;quot; description=&amp;quot;Moj pierwszy serwer MTA&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;script src=&amp;quot;script.lua&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
W znaczniku ''&amp;lt;info /&amp;gt;'' znajduje się pole &amp;quot;type&amp;quot;, 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.&lt;/div&gt;</summary>
		<author><name>Msk</name></author>
	</entry>
</feed>