PL/meta.xml

From Multi Theft Auto: Wiki
Revision as of 15:30, 12 September 2024 by FileEX (talk | contribs) (Update)
Jump to navigation Jump to search

Plik meta.xml określa zawartość oraz konfigurację zasobu. Plik jak samo rozszerzenie wskazuje jest w formacie XML, który jest oparty na języku HTML i jest jednostką dominującą XHTML.

Tagi

XML jest tekstowym formatem danych, który jest stosowany do ich prezentacji. MTA wykorzystuje pliki XML do opisu metadanych dla zasobów przy użyciu poniższych tagów:

  • <info /> Określa podstawowe informacje o zasobie, które mogą być później odczytane przy użyciu getResourceInfo. Tag nie jest wymagany. Dostępne parametry:
    • author: Autor zasobu.
    • version: Wersja zasobu.
    • name: Nazwa zasobu.
    • description: Krótki opis zasobu.
    • type: Typ zasobu, dostępne opcje to gamemode, script, map oraz misc.
  • <script /> Kod źródłowy zasobu, dostępne parametry:
    • src: Ścieżka do pliku z kodem źródłowym np. .lua.
    • type: Rodzaj kodu źródłowego, dostępne opcje to client, server oraz shared. W przypadku gdy plik jest po stronie serwera, nie trzeba podawać tego parametru. Domyślnie jest to server.
    • cache: Określa czy plik źródłowy zasobu ma zapisywać się na dysku klienta, dostępne opcje to true oraz false. Ma zastosowanie tylko dla plików klienta, czyli tam gdzie parametr type ustawiono na client. Domyślnie true.
[[{{{image}}}|link=|]] Notatka: {{{1}}}
    • validate: Sprawdza kompatybilność pobranego zasobu z tym na serwerze, dostępne opcje true lub false. Domyślnie true.
  • <map /> Mapa do gamemode, możliwe parametry:
    • src: Ścieżka do pliku .map.
    • dimension: Wymiar w którym zostanie załadowana mapa.
  • <file /> Pliki dodatkowe tj. zdjęcia, modele, dźwięki itp.
    • src: Ścieżka do pliku. Od wersji 1.6.0 r22430 można podawać globalne ścieżki, oznacza to, że zamiast pisać każdy plik osobno można dodać po prostu wszystkie pliki używając symbolu gwiazdki *. Zobacz przykład.
    • download: Określa czy plik ma zostać pobrany po starcie zasobu, dostępne opcje true lub false. Domyślnie true, jeśli ustawimy na false to można później pobrać plik przez downloadFile.
  • <include /> Dołącza zasoby, które będą używane przez ten zasób. Oznacza to, że wskazane zasoby zostaną uruchomione wraz z tym zasobem. Tag ten może być używany jeśli korzystamy z innego zasobu przez eksporty call. Możliwe parametry:
    • resource: Nazwa zasobu, który ma zostać dołączony.
    • minversion: Minimalna wersja zasobu (opcjonalnie).
    • maxversion: Maksymalna wersja zasobu (opcjonalnie).
  • <config /> Plik .xml zawierający konfigurację, która może być odczytywana przez zasoby. Możliwe parametry:
    • src: Ścieżka do pliku.
    • type: Typ pliku client lub server.
  • <export /> Funkcje, które są eksportowane z tego zasobu dla innych. W innym zasobie, aby użyć funkcji z tego zasobu użyj call.
    • function: Nazwa funkcji.
    • type Określa czy funkcja jest eksportowana dla strony serwera, klienta czy obu, dostępne opcje to client, server oraz shared.
    • http: Określa czy funkcja może być wywoływana z poziomu interfejsu HTTP, dostępne opcje true lub false.
  • <html />
    • src: Ścieżka do pliku HTTTP.
    • default: Domyślny plik .html, który będzie wyświetlany po odwiedzeniu strony zasobu przez interfejs HTTP /nazwaZasobu/. Tylko jeden plik może być ustawiony jako domyślny, pozostałe będą ignorowane. Dostępne opcje true oraz false.
    • raw: HTML nie jest przetwarzany przez interpreter Lua, a plik jest traktowany jako dane binarne. Używane w przypadku plików binarnych jak np. obrazy. Dostępne opcje true lub false.
  • <settings/> Większość gamemode'ów używa systemu ustawień, aby pozwolić administratorom na konfigurację go tak jak chcą. Przykładowo można ustalić czas trwania jednej rundy, a następnie za pomocą funkcji get oraz set można odczytać lub zmienić wartość tego ustawienia.
    • <setting/> Konkretne ustawienie, które może być odczytywane i zmieniane przez skrypty oraz panel admina. Możliwe parametry:
      • name: Nazwa ustawienia, która będzie używana przez funkcje get oraz set do zarządzania wartością.
      • value: Wartość ustawienia.
      • friendlyname: Nazwa ustawienia, która będzie wyświetlana dla użytkownika np. w panelu admina. Parametr opcjonalny.
      • accept: Wartości, które są akceptowane dla tego ustawienia. Pozwala uniknąć pomyłek. Parametr opcjonalny.
      • examples: Przykładowe wartości. Parametr opcjonalny.
      • desc: Opis za co odpowiada ustawienie. Parametr opcjonalny.
  • <min_mta_version /> Minimalna wymagana wersja, która jest niezbędna do poprawnego uruchomienia zasobu. Gdy tworzysz zasoby, w miarę możliwości należy podawać aktualną wersję MTA:SA (w tej chwili jest to Template:Current version). Tag nie jest wymagany.
    • client: Minimalna wersja klienta.
    • server: Minimalna wersja serwera.
  • <aclrequest /> Lista praw ACL, które potrzebuje ten zasób. Każdy użytkownik z uprawnieniami administratora może zezwolić lub odmówić udzielenia uprawnień ACL dla zasobu używając komendy
aclrequest [list/allow/deny] <nazwa_zasobu> [<nazwa_uprawnienia> / all]
    • <right/> Uprawnienie, które zasób chce uzyskać. Możliwe parametry:
      • name: Nazwa uprawnienia.
      • access: Ustaw na true, aby zezwolić na dostęp do uprawnienia dla tego zasobu lub na false, aby odmówić dostępu.
  • <sync_map_element_data/> Określa czy dane (element data) mapy tj. PosX czy DoubleSided mają być przesyłane do klienta. Zazwyczaj większość zasobów i gamemode'ów nie potrzebuje tego ustawienia, a co za tym idzie tej synchronizacji danych (Map Editor oraz Interiors wymagają tego ustawienia do działania). Dostępne opcje to true i false. Jeśli określimy ten tag dla jakiegoś gamemode to ustawienie zostanie dołączone dla każdej mapy wczytanej przez ten zasób.
    • false Wyłącza synchronizację danych mapy dla wszystkich zasobów. Może to wpłynąć na czas wczytywania mapy.
    • true Włącza synchronizację danych mapy dla wszystkich zasobów. Jeśli w różnych zasobach są różne ustawienia tego tagu to wartośc true ma wyższy priorytet i wszystkie zasoby będą synchronizowały dane mapy.
  • <oop/> Zezwala na pseudo-obiektowe skryptowanie. Zajrzyj do dokumentacji OOP po więcej. Dostępne opcje to true i false.
  • <download_priority_group/> Tag, który określa priorytet pobierania zasobu. Jeśli nie został określony to domyślnie priorytet wynosi 0. Jeśli priorytet został określony na większy od 0 to zasób zostanie pobrany i uruchomiony u klienta wcześniej niż inne. Jeśli natomiast priorytet ustawiono na mniejszy niż 0 to zasób zostanie pobrany i uruchomiony u klienta później niż inne. To ustawienie może być przydatne jeśli chcesz np. wyświetlać własny ekran pobierania zasobów zamiast domyślnego paska pobierania. Przykład użycia:
    • Zasób A: Ustawiono <download_priority_group>20</download_priority_group>, więc zasób wystartuje wcześniej niż..
    • Zasób B: Gdzie ustawiono <download_priority_group>10</download_priority_group>.

Jest to normalna kolejność, ponieważ zasób A ma wyższy priorytet niż zasób B, dlatego zostanie pobrany i uruchomiony wcześniej. Analogicznie zasób B zostanie uruchomiony i pobrany wcześniej niż zasób, który ma ustawiony priorytet na niższy niż 10.

Przykład

Prosty plik meta.xml, aby uruchomić zasób

<meta>
    <script src="c.lua" type="client" />
    <script src="s.lua" />
</meta>

Bardziej złożony przykład meta.xml z niektórymi wspomnianymi wcześniej tagami

<meta>
    <info author="Slothman" version="1.0.2" name="Stealth" description="Allow scripts to insert a ped that simulates combat with a real player" type="gamemode" />

    <script src="stealthmain_server.lua" />
    <script src="noiseblip.lua" />
    <script src="mission_timer.lua" />
    <script src="gadgets_server.lua" />
    <script src="gadgets_client.lua" type="client"/>
    <script src="stealthmain_client.lua" type="client" validate="true"/>
    <script src="noisebar.lua" type="client"/>
    <script src="spycam.lua" type="client"/>
    <script src="riemann_z_demonstration.lua" type="client" cache="false"/>

    <map src="base.map" dimension="1"/>

    <file src="riot_shield.txd" download="false" />
    <file src="riot_shield.dff" download="false" />
    <file src="riot_shield.col" download="false" />
    <file src="armor.png" />
    <file src="camera.png" />
    <file src="cloak.png" />
    <file src="goggles.png" />
    <file src="mine.png" />
    <file src="radar.png" />
    <file src="shield.png" />

    <include resource="scoreboard" />
    <include resource="killmessages" />
    <include resource="maplimits" />
    
    <config src="help.xml" type="client"/>

    <export function="exampleExport1" type="server" />
    <export function="exampleExport2" type="client" />
    <export function="exampleExport3" type="shared" />

    <settings>
        <setting name="roundlimit" value="[6]" /> <!-- czas trwania rundy w minutach -->
	<setting name="teamdamage" value="[1]" /> <!-- 1 dla ochrony drużyny, 0 dla braku ochrony drużyny -->
	<setting name="teambalance" value="[1]" /> <!--  limit różnicy graczy pomiędzy drużynami -->
	<setting name="isAllowedToShoot" value="true" />
	<setting name="admingroup" value="Admin,AdminPlus"
		friendlyname="Admin group list"
		group="_Advanced"
		accept="*"
		examples="Admin,Moderator,SuperModerator"
		desc="To use this resource, the player must belong to one of the groups listed."
		/> <!-- Przykład ustawienia ze wszystkimi opcjonalnymi parametrami -->
	<setting name="spazammo" value="[25]" /> <!-- ilość amunicji -->
	<setting name="m4ammo" value="[100]" />
	<setting name="shotgunammo" value="[25]" />
	<setting name="sniperammo" value="[20]" />
	<setting name="ak47ammo" value="[120]" />
	<setting name="rifleammo" value="[40]" />
	<setting name="deserteagleammo" value="[45]" />
	<setting name="pistolammo" value="[132]" />
	<setting name="uziammo" value="[150]" />
	<setting name="tec9ammo" value="[150]" />
	<setting name="silencedammo" value="[65]" />
	<setting name="grenadeammo" value="[4]" />
	<setting name="satchelammo" value="[4]" />
	<setting name="teargasammo" value="[4]" />
	<setting name="molatovammo" value="[4]" />
    </settings>

    <min_mta_version server="1.5.2-9.07903" client="1.5.2-9.07903" />

    <aclrequest>
        <right name="function.startResource" access="true" />
        <right name="function.stopResource" access="true" />
        <right name="function.setPlayerMuted" access="true" />
    </aclrequest>

    <sync_map_element_data>false</sync_map_element_data>

    <oop>false</oop>

    <download_priority_group>0</download_priority_group>
</meta>

Wczytywanie plików za pomocą wzorca

DODANO/ZAKTUALIZOWANO w wersji 1.6.0 r22430

Od wersji 1.6.0 r22430 dostępna jest możliwość wczytywania plików za pomocą wzorca. Wcześniej konieczne było wypisane każdego z plików osobno, co było bardzo uciążliwe w przypadku dużych zasobów z dużą ilością dodatkowych plików. Wzorzec możesz określić za pomocą biblioteki glob.

<meta>
    <script src="shared/**/*.lua" type="shared" cache="false" />
    <script src="client/**/*.lua" type="client" cache="false" />
    <script src="server/**/*.lua" type="server" />

    <file src="assets/fonts/**/*.ttf" />
    <file src="assets/sounds/**/*.mp3" />
    <file src="assets/images/**/*.png" />
</meta>