- Dokumentacja
- Konwencje
Przewodnik
Konwencje
Zasady wspólne dla całego API: strony skryptu, elementy, root i source, współrzędne i obsługa błędów.
Serwer, klient, obie strony
Przy każdej funkcji i zdarzeniu widzisz, gdzie działa:
| Znak | Strona | Gdzie użyjesz |
|---|---|---|
| S | Serwer | skrypty type="server" |
| C | Klient (client) | skrypty type="client" |
| O | Obie | każdy skrypt, także type="shared" |
Niektóre funkcje wspólne mają po stronie klienta krótszą składnię, bo zawsze dotyczą lokalnego gracza. Na przykład outputChatBox na serwerze przyjmuje gracza, a u klienta od razu pisze na jego czacie. Takie różnice są opisane na stronie funkcji.
Elementy
Gracze, pojazdy, obiekty, znaczniki, okna GUI i dźwięki to elementy. Funkcje przyjmują je jako argumenty, a zdarzenia przekazują jako source. isElement(x) sprawdza, czy element nadal istnieje.
Elementy tworzą drzewo. Na górze jest root, pod nim każdy zasób ma swój resourceRoot. Obsługa podpięta do root złapie zdarzenie każdego elementu, a podpięta do resourceRoot tylko elementów tego zasobu.
Zmienne wbudowane
| Zmienna | Strona | Znaczenie |
|---|---|---|
root | obie | korzeń drzewa elementów |
resourceRoot | obie | korzeń elementów bieżącego zasobu |
source | obie | element, którego dotyczy zdarzenie |
localPlayer | klient | gracz, u którego działa skrypt |
client | serwer | gracz, który wysłał zdarzenie przez triggerServerEvent |
Współrzędne
Pozycję podajesz jako trzy liczby x, y, z w metrach świata gry. Środek mapy to 0, 0, Los Santos leży na południowym wschodzie (dodatnie x, ujemne y), a z to wysokość. Obroty podajesz w stopniach.
Błędy i złe argumenty
Zły argument nie przerywa skryptu. Funkcja zwraca false, a w konsoli pojawia się ostrzeżenie z nazwą funkcji i numerem argumentu:
Bad argument @ 'setPlayerMoney' [oczekiwano player na pozycji 1, jest string 'Adam']
Wartość spoza zakresu też jest odrzucana, a nie obcinana, chyba że opis funkcji mówi inaczej. Dlatego warto sprawdzać wynik funkcji, które coś tworzą:
local auto = createVehicle(411, 0, 0, 3)
if not auto then
outputDebugString("Nie udało się stworzyć auta")
return
end
Własne zdarzenia
Zdarzenie rejestrujesz przez addEvent("nazwa"). Jeśli ma je wywoływać klient, serwer musi zarejestrować je z drugim argumentem true: addEvent("nazwa", true). Bez tego serwer odrzuci zdarzenie od gracza. Szczegóły w triggerServerEvent i triggerClientEvent.
Lua 5.4 i skrypty z MTA
Skrypty działają w Lua 5.4. Dla zgodności ze skryptami pisanymi pod Lua 5.1 (MTA) są math.atan2(y, x) (w 5.4 to math.atan(y, x)), math.pow(x, y) (to samo co x ^ y) i math.log10(x). Dzielenie / zawsze daje liczbę zmiennoprzecinkową (7 / 2 = 3.5); dzielenie całkowite to //.
Ograniczenia i obejścia
- Kolizja tylko między dwoma elementami (
setElementCollidableWith) jeszcze nie istnieje. Obejście w trybie ducha:setElementCollisionsEnabled(cudzeAuto, false)u klienta i półprzezroczystość (setElementAlpha); takie auto u tego gracza nie koliduje z niczym, więc warto włączać to tylko na czas startu rundy. - Mapa gry na serwerze: serwer nie ma kolizji budynków ani terenu, więc
processLineOfSight,isLineOfSightClearigetGroundPositionna serwerze widzą tylko elementy skryptów. Dokładny test z mapą zrób w skrypcie klienta i wyślij wynik przeztriggerServerEvent. - Obrażenia NPC u klienta: jest
onClientPlayerDamage(własna postać); obrażenia NPC zgłasza serwer wonPedDamage.