RU/Resources: Difference between revisions
No edit summary |
mNo edit summary |
||
Line 6: | Line 6: | ||
==Файл Meta== | ==Файл Meta== | ||
''Для подробностей читайте основную статью [[Meta.xml]]'' | ''Для подробностей читайте основную статью [[RU/Meta.xml|Meta.xml]]'' | ||
Файл Meta - ядро каждого ресурса. Он в точности описывает, какие файлы должны использоваться в ресурсе и как. Далее следует пример, который покрывает все имеющиеся опции, ваши meta файлы могут иметь этих тегов столько, сколько вам потребуется: | Файл Meta - ядро каждого ресурса. Он в точности описывает, какие файлы должны использоваться в ресурсе и как. Далее следует пример, который покрывает все имеющиеся опции, ваши meta файлы могут иметь этих тегов столько, сколько вам потребуется: | ||
Line 60: | Line 60: | ||
Скрипты имеют права на чтение и запись внутрь папки своего ресурса через функции типа [[xmlCreateFile]] и [[fileCreate]]. Они также имеют права на чтение и запись внутри других ресурсов, но только если имеют на это [[Access_Control_List|ACL]]-доступ. | Скрипты имеют права на чтение и запись внутрь папки своего ресурса через функции типа [[xmlCreateFile]] и [[fileCreate]]. Они также имеют права на чтение и запись внутри других ресурсов, но только если имеют на это [[RU/Access_Control_List|ACL]]-доступ. | ||
Revision as of 14:34, 2 July 2012
Ресурсы - ключевая часть MTA. По существу, ресурс - папка или zip-врхив, который содержит набор файлов, включающий в себя скриптовые файлы, плюс файл meta, который описывает серверу, как ресурс должен быть загружен. Ресурс можно рассматривать в качестве частичного эквивалента программе, работающей на операционной системе - он может быть запущен и остановлен, и множество ресурсов могут быть запущенными одновременно. Но тем не менее следует помнить, что в отличие от программ на ОС, между ресурсами нет многозадачности.
Терминология
- Resource - zip-архив или папка, содержащая файл meta.xml и некоторые другие составные части ресурсов. Они помещены в папке mods/deathmatch/resources в директории сервера.
- Составная часть - Файл, содержащийся внутри ресурса, на данный момент это могут быть карты, скрипты, картинки и т.д.
Файл Meta
Для подробностей читайте основную статью Meta.xml
Файл Meta - ядро каждого ресурса. Он в точности описывает, какие файлы должны использоваться в ресурсе и как. Далее следует пример, который покрывает все имеющиеся опции, ваши meta файлы могут иметь этих тегов столько, сколько вам потребуется:
<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-доступ.
Каждый ресурс может быть загружен только один раз, сервер это проконтролирует. Даже при указании ресурса в качестве include более одного раза, каждый раз будет использована одна и та же его копия.
Хранение файлов
Файлы ресурса могут храниться либо в zip-архиве, либо в директории. Они располагаются в:
server/mods/deathmatch/resources/ (если ваш сервер установлен вместе с клиентом)
или
mods/deathmatch/resources/ (для выделенных серверов)
Каждый ресурс может являться zip-архивом, директорией, или и тем, и другим. В последнем случае директория будет приорететней zip-архива, так как в нее можно будет поместить файлы, которые перезапишут старые, что позволит тестировать и рарзратывать карты/скрипты "на лету". Такое не было бы возможно при приоритетах, расставленных наоборот. А zip-архивы, в свою очередь, зачастую используются конечными пользователями.
Другие примечательные вещи
- Названия ресурсов не могут содержать точек.
- Если ресурс сохраняет какие-нибудь файлы, используемые названия файлов не должны быть указаны в meta.xml
- Файлы, указанные в meta.xml, должны рассматриваться скриптами только как файлы для чтения. Не редактируйте их через xmlSaveFile, FileSave и т.д.
- При создании zip-архива вашего ресурса не включайте в него файлы, в которые будет вестись запись. Если ваш ресурс использует такие файлы, они должны быть созданы ресурсом по мере надобности.
- При создании zip-архива вашего ресурса включайте только те файлы, что описаны в meta.xml. Не включайте 'образцы' файлов, в которые будет вестись запись, это чревато последствиями.
- Мы рекомендуем избегать пробелов и экзотических символов в названиях ресурсов.
Функции скриптинга
Система ресурсов может управляться скриптово. Вследствие этого, предоставляются следующие серверные функции скриптинга:
- abortRemoteRequest
- call
- fetchRemote
- getResourceConfig
- getResourceDynamicElementRoot
- getResourceExportedFunctions
- getResourceFromName
- getResourceName
- getResourceRootElement
- getResourceState
- getThisResource
- getRemoteRequests
- getRemoteRequestInfo
Предоставляются также следующие события: