SerweryWłasny serwerDla twórcówForumFAQDokumentacjaBezpieczeństwo
Pobierz launcher
  1. Dokumentacja
  2. Zasoby i meta.xml

Przewodnik

Zasoby i meta.xml

Wszystko o pliku meta.xml: skrypty serwera, klienta i wspólne, pliki dla graczy, eksporty i kolejność pobierania.

Pełny przykład

<meta>
    <info author="Ty" name="Mój tryb" version="1.0" type="gamemode" />

    <script src="server.lua" type="server" />
    <script src="client.lua" type="client" />
    <script src="wspolne.lua" type="shared" />
    <script src="tajne.lua" type="client" cache="false" />

    <file src="logo.png" />
    <file src="muzyka.mp3" download="false" />

    <download_priority_group>10</download_priority_group>
    <export function="dajNagrode" type="server" />
</meta>

info

Opis zasobu. Atrybut type to script (domyślnie) albo gamemode. Tryby gry startują na końcu, gdy inne zasoby są już gotowe.

script

AtrybutZnaczenie
srcścieżka do pliku .lua w folderze zasobu
type="server"skrypt działa tylko na serwerze i nigdy go nie opuszcza
type="client"skrypt jest wysyłany do gracza i działa w jego grze
type="shared"ten sam plik działa po obu stronach
cache="false"skrypt klienta nie jest zapisywany na dysku gracza, tylko pobierany przy każdym wejściu

Skrypty wspólne przydają się na stałe dane i funkcje pomocnicze, np. tabelę cen albo listę pojazdów. Po każdej stronie działają niezależnie: zmiana zmiennej na serwerze nie zmienia jej u gracza.

file

Plik wysyłany do gracza: obraz, dźwięk, czcionka, dane. Gracz pobiera go przy wejściu, a przy następnym wejściu tylko wtedy, gdy plik się zmienił.

Z download="false" plik nie jest pobierany przy starcie. Skrypt klienta ściąga go sam, kiedy go potrzebuje, przez downloadFile("muzyka.mp3"), a wynik dostaje w zdarzeniu onClientFileDownloadComplete.

Wzorce w src

W src znaczników script, file i map możesz wpisać wzorzec zamiast jednej nazwy,:

WzorzecPasuje do
*dowolne znaki w nazwie, bez przechodzenia do podfolderów (*.lua)
**dowolne znaki razem z podfolderami (images/**)
?jeden znak (sounds/s?.mp3)
<meta>
    <script src="shared/**/*.lua" type="shared" />
    <script src="client/*.lua" type="client" />
    <file src="images/**" />
</meta>

Pliki z jednego wzorca są ładowane w kolejności alfabetycznej. Wzorzec w file pomija pliki zadeklarowane jako script (kod serwera nie trafi do graczy), meta.xml i ukryte foldery (.git itp.). Wzorzec, który nie pasuje do żadnego pliku, daje ostrzeżenie w konsoli serwera, a zasób startuje normalnie.

download_priority_group

Kolejność pobierania przy wejściu gracza. Większa liczba jest pobierana wcześniej, domyślnie 0, ujemne na końcu. Przydaje się, gdy ekran logowania ma się pojawić, zanim dojdą ciężkie pliki innych zasobów.

export

Udostępnia funkcję innym zasobom. Wywołujesz ją przez exports:

-- meta.xml zasobu "nagrody": <export function="dajNagrode" type="server" />
function dajNagrode(gracz, kwota)
    givePlayerMoney(gracz, kwota)
    return true
end

W funkcji eksportu sourceResource to zasób, który ją wywołał, a sourceResourceRoot jego korzeń. Dzięki temu zasób z eksportami może sprzątać po zasobach, które przestały działać (np. zamknąć ich panele w onResourceStop z source == sourceResourceRoot):

local wywolania = {}
function dajNagrode(gracz, kwota)
    wywolania[sourceResource] = (wywolania[sourceResource] or 0) + 1
    givePlayerMoney(gracz, kwota)
    return true
end

include

<include resource="nazwa" /> = ten zasób wymaga innego. Przy starcie serwer najpierw uruchamia zasoby z <include> (także te z disabled_resources), a gdy któregoś brakuje w resources/, zasób nie startuje i w konsoli jest błąd. Pętla zależności (A wymaga B, B wymaga A) też zatrzymuje start.

<meta>
    <include resource="trilogy_core" />
    <script src="server.lua" type="server" />
</meta>

Które zasoby startują i w jakiej kolejności

  • Każdy folder z meta.xml w resources/ (także w podfolderach-grupach) startuje razem z serwerem.
  • Kolejność: alfabetycznie po nazwie, a zasoby <info type="gamemode"> na końcu. Zależności z <include> ruszają przed zasobem, który ich wymaga.
  • Wyłączenie bez kasowania folderu: "disabled_resources": ["nazwa"] w server-config.json. Taki zasób uruchomisz komendą start nazwa albo jako zależność innego.
  • Nowy folder dodany w trakcie działania serwera: start nazwa w konsoli albo ze skryptu refreshResources() i startResource(getResourceFromName("nazwa")).

Limity i konsola

Jeden plik może mieć do 64 MB, cały zasób do 256 MB. Wszystko, co zasób utworzy (pojazdy, obiekty, okna, timery), znika po jego zatrzymaniu.

KomendaCo robi
start <zasób>uruchamia zasób
stop <zasób>zatrzymuje zasób i usuwa wszystko, co utworzył
restart <zasób>zatrzymuje i uruchamia ponownie, także u graczy