O arquivo Meta
O meta.xml é um arquivo de metadados que define ao MTA os conceitos iniciais de um recurso. Exemplos seriam seu nome, os scripts a serem usados e quais devem ser pré-carregados para serem transferidos ao cliente; junto a outros de sua natureza. Ele também transforma arquivos em elementos, a exemplo de sons, imagens e modelos. É escrito em XML, o qual é baseado em HTML e é pai do XHTML.
obs: Metadados são dados sobre outros dados. O termo é estranho, mas o próprio nome já diz. No caso do MTA eles seriam metadados descritivos, pois se referem ao conteúdo do jogo.
Tags
O XML é um formato de texto muito usado para representar dados, inclusive pelo MTA. As tags a seguir são todas as possibilidades:
- <info /> Representa informações sobre o recurso que podem ser usados de forma opcional, e lidos pela função getResourceInfo, caso necessário:
- author: Quem é o autor desse recurso?
- version: Qual é a versão dele?
- name:' Seu nome
- description: Uma breve descrição
- type: Qual é o tipo do recurso, pode ser um "gamemode", "script", "map", ou "misc".
- <script /> O código fonte do recurso, os possíveis parâmetros são:
- src: Indica o nome do arquivo
- type: Indica o tipo do lado: "client", "server" ou "shared"
- cache: Quando o script é do tipo cliente, esse atributo diz se o arquivo será salvo ou não no disco rígido dele. O padrão é "true", se for usado o contrário, será apagado quando o recurso parar.
- validate: Se for definido como falso, o MTA não verificará se é compatível
- <map /> Define mapa do gamemode, os possíveis atributos são:
- src: o nome do arquivo .map (pode também ser o diretório, ex: maps/nome-do-mapa.map)
- download: Indicará se poderá ser automaticamente enviado ao cliente ou não (opicional). O padrão é "true", caso contrário significará o não envio do mesmo no início do recurso. Mas poderá ser enviado mais tarde usando downloadFile (a partir da ver. 1.4 em diante)
- <include /> Inclui os recursos necessários a estarem rodando
- resource: Diz o nome do recurso que queres usar
- minversion: A versão mínima desse recurso (opcional)
- maxversion: A versão máxima desse recurso (opcional)
- <config /> O arquivo de configuração em XML a ser usado pelo recurso:
- src: Seu nome
- type: Seu tipo: "client" ou "server"
- <export /> Exporta uma função do seu recurso, para que outros possam usa-la com o call
- function: O nome da função
- type: Diz se será exportado para o lado do cliente ou servidor (valores válidos são: "server" ou "client")
- http: Indica se ele pode ser chamado via HTTP ("true" ou "false")
- <html />
- src: O nome do arquivo HTTP (pode ser um diretório)
- default: Qual arquivo html a ser mostrado por padrão ao acessar o caminho /nome-do-recurso/ no servidor. Somente um html pode ser definido, os outros são ignorados (true/false)
- raw: O arquivo html não é interpretado pelo Lua e assim só passa como um dado binário. Deve ser usado para arquivos binários, como imagens principalmente (true/false)
- <settings> <setting name="" value=""/> </settings>: Muitos gamemodes usam o sistema de configurações para habilitar administradores do servidor configurá-los como desejarem. Um exemplo seria definir o tempo de duração da partida e usar o get e set para manipular o valor responsável por isso.
- <min_mta_version /> Versão mínima do MTA para o recurso rodar sem problemas. Quando estiver terminando um recurso, a versão mínima deve a mesma da versão do MTA:SA que está usando (a qual no momento é 1.6.0). Veja o exemplo abaixo.
- client: A versão mínima do cliente
- server: A versão mínima do servidor
- <aclrequest /> Indica uma lista de permissões do ACL a serem usados pelo recurso.
- <sync_map_element_data /> Indica se os dados de elemento como "PosX" e "DoubleSided" são tranferidos para o cliente. Esses geralmente não são necessários por muitos gamemodes ou recursos, exceto Map Editor e Interiors; caso contrário, não funcionarão. Quando definido no recurso, se aplicará a todos os mapas carregados por ele.
- false: Desabilita essa transferência para todos os recursos. Isso pode reduzir a demora de download consideravelmente.
- true: Habilita essa tranferência. Se esses valores forem definidos de forma distinta entre os recursos, o que estiver configurado como "true" terá prioridade e todos os demais transferirão esse mesmo dado.
- <oop/> OOP - Veja mais informações na página: Classes de Scripts do Cliente
- false: Desabilita o OOP.
- true: Habilita-o
Exemplo
Aqui está um exemplo de um arquivo meta usando algumas das tags mencionadas:
<meta>
<info author="Slothman" type="gamemode" name="Stealth" />
<config src="help.xml" type="client"/>
<min_mta_version client="1.6.0" server="1.6.0" />
<sync_map_element_data>false</sync_map_element_data>
<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" />
<file src="riot_shield.dff" />
<file src="riot_shield.col" />
<file src="armor.png" download="true"/>
<file src="camera.png" download="false"/>
<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" />
<export function="exampleExport1" type="server" />
<export function="exampleExport2" type="client" />
<export function="exampleExport3" type="shared" />
<settings>
<setting name="roundlimit" value="[6]" />
<setting name="teamdamage" value="[1]" />
<setting name="teambalance" value="[1]" />
<setting name="spazammo" value="[25]" />
<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]" />
<setting name="isAllowedToShoot" value="true" />
</settings>
<aclrequest>
<right name="function.startResource" access="true" />
<right name="function.stopResource" access="true" />
<right name="function.setPlayerMuted" access="true" />
</aclrequest>
</meta>