RU/Resources
Ресурсы - ключевая часть MTA. Ресурс представляет из себя каталог или zip архив, содержащий набор файлов, таких как скрипты, плю meta файл, описывающий то, как ресурс должен загружаться. Отчасти, ресурс можно рассматривать как эквивалент программе, работающей под управлением операционной системы - он может быть запущен, остановлен, и множество ресурсов может работать одновременно. Несмотря на это важно помнить, что, в отличии от программ, между ресурсами нет многозадачности.
Терминология
- Ресурс - Zip-архив или каталог, содержащий файл meta.xml и некоторое количество других элементов. Они размещаются в каталоге mods/deathmatch/resources сервера.
- Элемент ресурса - Файл, содержащийся в ресурсе, на данный момент это может быть карта, скрипт, рисунок и т.д.
Мета-файл
Прочитайте статью RU/Meta.xml чтобы узнать подробности
Мета-файл это основа любого ресурса. Он описывает, какие файлы в ресурсе должны использоваться и как. Следующий пример показывает все доступные опции. Ваши мета-файлы могут содержать столько тэгов, сколько вам понадобится:
<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>
В то же время карта CTF может содержать следующий meta.xml:
<meta> <include resource="ctf" /> <map src="myuberl33tctfmap.map" /> <info author="Tom" instructions="this is uber l33t !!!!!1111111" type="map" /> </meta>
Атрибуты Script/type, Config/type и File/type определяют, должен ли скрипт/ресурс отправляться клиенту, и по умолчанию равны "server".
Тэг include указывает какие ресурсы должны быть запущены перед запуском данного ресурса. Другими словами, если ваш ресурс зависит от других, вы можете подключить их так, чтобы они стартовали первыми.
Каждый ресурс работает в собственной виртуальной машине (VM). В ней работает каждый скрипт ресурса. Это значит, что переменные не разделяются с другими ресурсами. Наилучший способ взаимодействовать с другими ресурсами - использовать тэг export для экспортирования функции. Это позволит другим ресурсам выполнять функцию используя вызов функции call.
Скрипты, отправляемые клиенту, запускаются сразу по завершении скачивания.
У скриптов есть достум на чтение и запись в каталог ресурса через такие функции, как xmlCreateFile и fileCreate. Так же они могут читать/писать в другие ресурсы, но для этого нужны разрешения ACL.
Каждый ресурс может быть запущен только 1 раз, за этим следит сервер. Если ресурс подключен более одного раза, для всех ресурсов, подключивших его, будет использоваться одна копия.
Файловые хранилища
Файлы ресурсов могут храниться в zip-архивах или каталогах. Они размещаются в:
server/mods/deathmatch/resources/ (для клиентов MTASA)
или
mods/deathmatch/resources/ (для выделенных серверов)
Каждый ресурс может быть zip-архивом, каталогом, либо объединять оба варианта. Приоритет каталога выше, чем у архива, таким образом файлы могут быть помещены в каталог, чтобы заменить файлы из архива. Это позволяет использовать каталоги для разработки и тестирования карт/скриптов, в то время, как архивы используются конечными пользователями.
Скриптовые функции
Системой ресурсов можно управлять из скриптов. Для этого существуют следующие серверные функции:
- abortRemoteRequest
- call
- fetchRemote
- getResourceConfig
- getResourceDynamicElementRoot
- getResourceExportedFunctions
- getResourceFromName
- getResourceName
- getResourceRootElement
- getResourceState
- getThisResource
- getRemoteRequests
- getRemoteRequestInfo
Также генерируются следующие события: