PL/Zasoby
Zasoby to kluczowa część w MTA oraz tworzeniu serwera. Zasobem może być folder lub plik .zip który zawiera kolekcje plików, skryptów, oraz plik mety który opisuje jak zasób ma być załadowany. Zasób może być częściowo porównywany do programu działającego na systemie operacyjnym - może być wystartowany, zatrzymany oraz wiele zasobów może być włączone na raz. Wartą do zapamiętania informacją jest brak multi-taskingu między zasobami.
Terminologia
- Zasób - Plik zip lub folder posiadający plik meta.xml oraz pliki potrzebne do działania zasobu. Zasoby są umieszczane w folderze mods/deathmatch/resources katalogu serwera.
- Plik - Plik zawarty w zasobie, może być to mapa, skrypt, obraz, plik txt, itd.
- Typ - Typ pliku. Są 3 typy ( 'client' plik pobierany z serwera do klienta, 'server' plik uzywany przez serwer, 'shared' plik serwera oraz klienta ( nie są one połączone, poprostu identyczne ) )
Meta
Przeglądnij główny artykuł - Meta.xml
Meta jest sercem każdego skryptu, opisuje on które pliki mają być użyte oraz jak. Na dole jest przykład, który opisuje każdą opcje która w jest. Twój plik mety może zawierać tyle tagów ( plików ), ile będziesz potrzebować:
<meta> <info author="eAi" description="This is a basic CTF script" version="4"/> <include resource="radarblips"/> <include resource="markermanagement" /> <script src="ctf.lua" /> <script src="flag.lua" /> <script src="ctf_client.lua" type="client" /> <file src="model.dff" /> <file src="quitbutton.png" /> <file src="killed.png" /> <html src="test.htm" default="true"/> <html src="logo.png" raw="true" /> <export function="multiply" http="true" /> <export function="getPlayerList" /> <export function="getElementOwner" type="client"/> <config src="vehicle-list.xml" type="client" /> <config src="markerconfig.xml" type="server" /> <map src="somestuff.map" dimension="99" /> </meta>
Meta mapy CTF wyglądałaby następująco:
<meta> <include resource="ctf" /> <map src="myuberl33tctfmap.map" /> <info author="Tom" instructions="this is uber l33t !!!!!1111111" type="map" /> </meta>
Atrybuty Script/type, Config/type oraz File/type opisują czy skrypt/zasób powinien być wysyłany do klienta czy nie, jest to potrzebne do skryptów typu klienta ( np. plik obrazu musi zostać wysłany do klienta, żeby potem można było go wczytać i namalować na ekranie), domyślnie podpisane pod 'server'.
Tag include opisuje inne zasoby który powinny zostać wystartowane przed nim. Jeśli zasób korzysta z wielu zasobów, wymaga on włączenia innego zasobu do właściwego funkcjonowania.
Każdy zasób ma własny zakres pamięci. Dotyczy to każdego zasobu. Zmienne nie mogą być udostępniane między zasobami. Musisz używać export tagu oraz exportować funkcje która będzie zwracać tą zmienną. Następnie będziesz mógł użyć w każdym skrypcie tego samego typu funkcje call.
Skrypty wysłane do klienta są włączane, przy pobraniu wszystkich skryptów zasobu. Dlatego najczęściej wysyła się event do serwera, że klient może odbierać wiadomości oraz zmienne ( triggerClientEvent )
Skrypty mogą czytać oraz pisać w własnym folderze zasobu funkcjami typu xmlCreateFile oraz fileCreate. Mogą czytać oraz pisać w innych zasobach, potrzebują jednak zezwolenia ACL.
Każdy zasób może być włączony tylko raz, serwer to zapewni. Jeśli zasób będzie powtórzony, podczas refreshu wystąpi błąd oraz jego opis.
Przechowywanie plików
Pliki zasobu mogą być przechowywane w pliku zip lub folderze. Wszystko będzie umiejscowione w: server/mods/deathmatch/resources/ (jeśli pobrałeś serwer razem z klientem )
lub
mods/deathmatch/resources/ (w instalacji serwerów dedykowanych)
Każdy zasób może mieć plik zip, katalog lub oba. W przypadku obu istniejących, katalog ma pierwszeństwo przed plikiem zip, ponieważ takie pliki można umieścić w katalogu, aby zastąpić pliki w pliku zip. Dzięki temu katalogi mogą być używane do testowania i opracowywania map/skryptów, podczas gdy pliki zip używane przez użytkowników końcowych.
Rzeczy do zapamiętania
- Zasób nie może mieć kropki w nazwie.
- Jeśli zasób korzysta z zapisu pliku, plik nie powinien być zapisany w meta.xml lub być włączonym skryptem.
- Pliki w meta.xml powinny być tylko dla odczytu. Nie nadpisuj ich funkcjami typu fileWrite.
- Tworząc plik zip zasobu, nie dołączaj plików zapisu. Jeśli zasób używa zapisu plików, muszą one zostać utworzone przez zasób w razie potrzeby ( fileCreate ).
- Zalecamy unikanie spacji i egzotycznych znaków w nazwach zasobów.
Funkcje
Systemem zasobów można manipulować za pomocą skryptu. W związku z tym dostępne są następujące funkcje skryptów po stronie serwera:
- abortRemoteRequest
- call
- fetchRemote
- getResourceConfig
- getResourceDynamicElementRoot
- getResourceExportedFunctions
- getResourceFromName
- getResourceName
- getResourceRootElement
- getResourceState
- getThisResource
- getRemoteRequests
- getRemoteRequestInfo
Przewidziane są również następujące eventy: