Difference between revisions of "PT-BR/Composição de Gamemodes"

From Multi Theft Auto: Wiki
(Page completely revised.)
 
(3 intermediate revisions by one other user not shown)
Line 1: Line 1:
Este guia tenta descrever o processo de como escrever um gamemode adequado. Se você esta iniciando scripting para o MTA, você pode verificar outro tutoriais de scripting [[PT-BR/Página_Inicial|Página Inicial]] em primeiro lugar.  
+
Este guia tenta explicar o processo de como escrever um gamemode adequado. Se você ainda não sabe fazer ''scripts'' para o MTA, é recomendado começar pela [[PT-BR/Introdução_ao_Scripting|Introdução ao Scripting]].
==Introdução==
 
  
Um gamemode é um recurso que quando iniciado controla todo o jogo. Isto pode incluir, dizer aos jogadores oque fazer, a desova dos jogadores, a criação de Equipes, definir como os jogadores podem ganhar dinheiro ou pontos, e assim por diante. Alguns exemplos são o gamemode Race e Deathmatch.
+
==Antes de começar==
 +
Um ''gamemode'' ou modo de jogo é o recurso principal do jogo, pois define todas as regras e tutela boa parte dos acontecimentos. Isto pode incluir: informar aos jogadores como jogar, fazer os seus bonecos nascerem, criar equipes, definir como eles ganharão dinheiro ou pontos, e assim por diante. Alguns exemplos de gamemodes são: Race e Deathmatch.
  
==Oque é um "gamemode adequado"?==
+
==Como é um gamemode adequado?==
 +
Para ser simples, adequado ou bem feito, você deve utilizar todo potencial do sistema de arquivos map do MTA. Isto significa que um gamemode não carrega dentro de si elementos específicos de um mapa, como pickups, objetos, spawnpoints e veículos. Em vez disso, ele deve carregar-los através de arquivos coma a extensão .map, os quais a única função é listar esses elementos. Desta maneira, ele terá a sua disposição certos mapas instalados no servidor. Além disso, os usuários também podem criar novos mapas com o Map Editor - de um jeito mais intuitivo que escrever códigos.
  
Para ser simples, adequado ou bem feito é aquele que utiliza todo potencial do sistema de arquivos MTA Map. Isto significa que não contem elementos específicos do Map (pickups, objetos, spawns, veiculo e etc) codificados no seu interior. Em vez disso ele, o gamemode deve ser capaz de carregar arquivos de mapas que definem os dados. Desta forma o gamemode pode ter vários mapas, as pessoas também podem criar arquivos de mapas para o gamemode com o Map Editor, que é mais conveniente do que escrever códigos.
+
Com certeza, um gamemode competente é o ''Race'', pois ele permite aos jogadores fazerem upload de mapas personalizados para partidas de corrida. Mediante a isso, não é preciso abrir o recurso e edita-lo para adicionar novos circuitos.
  
Um exemplo óbvio de um gamemode adequado é o MTA:Race ; permite que os jogadores façam upload de mapas personalizados. Map. Não há necessidade de alterar o modo de jogo mesmo para alterar as spawnpoints, veículos, etc.
+
Os arquivos de mapas são basicamente documentos em XML com uma extensão .map. Eles criam um cenário para um ou mais gamemodes específicos, a modo de não provocar alterações nas regras do jogo definidas inicialmente pelo próprio gamemode.
  
Arquivos de mapas são basicamente documentos XML com uma extensão .map . Eles definem um ambiente para jogar uma ou mais gamemodes específicos. Que não provoquem uma alteração das regras do jogo, que, por sua vez, depende do gamemode.
+
Cada elemento em um mapa corresponde a uma ''tag'' (instância) em seu respectivo arquivo. uma sintaxe definida a cada elemento padrão do MTA, como objetos, veículos e assim por diante. Porém, no caso de elementos customizados pelos recursos, é necessário criar uma sintaxe nova para cada um.
  
Cada elemento em um mapa corresponde a um nó no arquivo .map . Há uma sintaxe para elementos como objetos, veículos e assim por diante, no entanto, para os elementos "especias" de seus gamemodes, você terá de criar uma sintaxe especial.
+
====''Premier Exmaple''====
 
+
Vamos examinar o modo de jogo chamado ''Capture the Flag''. A função de um mapa criado para ele é definir onde estão os spawnpoints, as bandeiras, e possivelmente outros objetos, como veículos ou pickups.
====Exemplo====
+
Um simples arquivo .map seria assim:
 
 
Para o nosso exemplo, vamos examinar o modo de jogo Capture the Flag. Um mapa para este modo de jogo precisa definir principalmente pontos de desova, localização das bandeiras, e possivelmente a presença de outros objetos, como veículos ou pickups.
 
Um simples arquivo map seria assim :
 
 
<syntaxhighlight lang="xml">
 
<syntaxhighlight lang="xml">
 
<map>
 
<map>
Line 26: Line 24:
 
</map>
 
</map>
 
</syntaxhighlight>
 
</syntaxhighlight>
Aqui você pode ver dois elementos MTA, um ponto de desova e uma pickup. Mais importante ainda, este tem um mapa nó chamado flag que define a localização e a cor da bandeira. O ponto de desova e pickup pode ser manuseado pelos recursos externos, os elementos personalizados têm de ser processado pelo gamemode.
+
Aqui você pode ver dois elementos comuns ao MTA: um spawnpoint e um pickup. Mais importante ainda, este contém uma tag chamada ''flag'', definindo a localização e a cor da bandeira. O spawnpoint e pickup até podem ser normalmente criados por outros recursos, mas qualquer elemento personalizado têm de ser processados pelo gamemode em questão.
  
Resumindo, queremos que os jogadores criem seus próprios mapas como vimos no MTA:Race.
+
Resumindo, o objetivo de todo modo de jogo é que os jogadores criem seus próprios mapas como acontece no MTA Race.
  
====Exemplo de como obter as informações do map.====
+
====Exemplo de como obter as informações do mapa====
 
+
Como mencionado anteriormente, seu recurso precisa encontrar elementos customizados contidos em um arquivo, e processá-los. O exemplo a seguir mostra isso:
Como mencionado anteriormente, sua forma precisa encontrar elementos personalizados definidos em um arquivo, e processá-los. É muito simples como demonstrado abaixo.
 
 
<syntaxhighlight lang="lua">
 
<syntaxhighlight lang="lua">
-- Criar uma tabela com todos os elementos do tipo bandeira
+
-- Crie uma tabela com todos os elementos do tipo bandeira
 
local flagElements = getElementsByType ( "flag" )
 
local flagElements = getElementsByType ( "flag" )
-- cria um laço entre eles
+
-- Crie uma relação entre eles
 
for key, value in pairs(flagElements) do
 
for key, value in pairs(flagElements) do
-- obter informaçõe
+
-- Obtenha informações
 
local posX = getElementData ( value, "posX" )
 
local posX = getElementData ( value, "posX" )
 
local posY = getElementData ( value, "posY" )
 
local posY = getElementData ( value, "posY" )
 
local posZ = getElementData ( value, "posZ" )
 
local posZ = getElementData ( value, "posZ" )
 
local team = getElementData ( value, "team" )
 
local team = getElementData ( value, "team" )
-- criar um objeto de acordo com a posição da bandeira
+
-- Crie um objeto de acordo com a posição da bandeira
 
createObject ( 1337, posX, posY, posZ )
 
createObject ( 1337, posX, posY, posZ )
-- escreve no chatbox da equipe
+
-- Escreva no chat da equipe
outputChatBox ( "Base for team " .. team .. " created" )
+
outputChatBox ( "Uma base para o time " .. team .. " foi criada." )
 
end
 
end
 
</syntaxhighlight>
 
</syntaxhighlight>
A função [[getElementsByType]] retorna uma tabela contendo todos os elementos de um determinado tipo(o tipo é o nome do nó [exemplo de "bandeira"] no arquivo de mapa.). Isso funciona para ambos os tipos personalizados, tanto para o MTA padrão (como "veículo" ou "player") [[getElementData]] é usado para recuperar os atributos definidos no XML. Neste simples exemplo, um objeto é criado no local da bandeira e uma mensagem surge no chatbox. Você naturalmente precisa fazer durante o carregamento do mapa, como neste caso criam formas de colisão para determinar quando o jogador capturar a bandeira.
+
A função [[getElementsByType]] retorna uma tabela contendo todos os elementos de um determinado tipo. Este tipo é o nome da tag, como o exemplo da bandeira no mapa citado acima. Isso funciona para ambos os elementos customizados e os comuns ao MTA, como veículo ou jogador. Já [[getElementData]] é usada para carregar os atributos definidos no XML. Nesse simples exemplo, um objeto é criado nas coordenadas da bandeira, e em seguida, uma mensagem informando seu posicionamento aparece no chat. Você deve proceder com a criação de elementos customizados durante o carregamento do mapa, como também gerenciar sua interação com o mundo. Um exemplo seria o trecho omitido do script acima: ele cria colisores para informar a captura da bandeira por um jogador do outro time.
  
 
==Map manager==
 
==Map manager==
 +
Depois de lidas as seções acima, deve ficar claro que um modo de jogo deve sempre é constituído de duas coisas:
 +
* Seu próprio recurso, sempre intacto.
 +
* Vários mapas, os quais fornecem informações a respeito dos objetos do jogo.
 +
Agora, em vez de escrever um script para cada mapa diferente, o [[Map manager]] fornece funções para carregar tanto os gamemodes, quanto seus mapas. Simplificando, quando você digitar o comando, por exemplo "gamemode ctf ctf-italy", ele irá iniciar ambos os recursos ''ctf'' e o seu mapa: ''ctf-Italy''. Ele também provoca o evento [[Map_manager#Fired_events|onGamemodeMapStart]] para avisar ao recurso ''ctf'' que o mapa especificado no comando será carregado. O recurso ''ctf'' pode, então, acessar as informações contidas nele e começar a fazer os jogadores nascerem.
  
Tendo lido a seção acima, deve ficar claro que um modo de jogo deve sempre consistem de duas partes:
+
===Como usar o Map Manager?===
*O recurso gamemode, que continua o mesmo.
+
Para utilizar o recurso Map Manager, o modo de jogo deverá ser definido, obviamente, como "gamemode". Em outras palavras, é só definir, no arquivo meta, o atributo "type" da tag <info> como "gamemode". Além disso, você pode criar o atributo "name" para indicar um nome mais amigável para seu recurso, como "Capture the flag". Ou seja, em vez de ser mostrado no ''Server Browser'' "ctf" como o gamemode atual, será mostrado "Capture the Flag". Um exemplo seria:
*Muitos recursos de mapas, que fornecem informações relacionadas ao mapa do gamemode.
 
Agora, em vez de escrever um script para cada modo de jogo único, o [[Map manager]] fornece funções para carregar gamemodes e mapas. Simplificando, quando você digitar o comando correto (por exemplo 'gamemode ctf ctf-italy') ele vai começar ambos os recursos 'ctf' e 'ctf-Itália' ao provocar um evento ([[onGamemodeMapStart]]) para avisar o recurso 'ctf' que um mapa é carregado.  O recurso 'ctf' pode, então, acessar as informações contidas em 'ctf-Itália' e começar a desovar os jogadores, etc.
 
 
 
===Como usar o mapmanager===
 
 
 
Para utilizar o recurso mapmanager, o modo de jogo deve ser marcado em conformidade. Mais especificamente, vamos definir em meta.xml, o "tipo" atributo da tag <info> para "gamemode". Além disso, você pode definir o atributo 'name' para um nome 'familiar' (como "Capture the flag"), que será mostrado no navegador do servidor, em vez do o nome do recurso.
 
  
 
<syntaxhighlight lang="xml">
 
<syntaxhighlight lang="xml">
<!-- meta.xml "cowcatapult" gamemode -->
+
<!-- retirado do meta.xml de "cowcatapult" -->
 
<meta>
 
<meta>
 
     <info type="gamemode" name="Cow catapulting 2.0"/>
 
     <info type="gamemode" name="Cow catapulting 2.0"/>
Line 69: Line 64:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Se o seu modo de jogo vai carregar mapas personalizados, você deve adicionar manipuladores para
+
Se o seu modo de jogo irá carregar mapas personalizados, você deverá adicionar eventos:
* onGamemodeMapStart
+
* onGamemodeMapStart, se um mapa for carregado.
* onGamemodeMapStop (se houver descarregamento é necessária)
+
* onGamemodeMapStop, se um mapa for for descarregado.
Esses eventos são chamados quando um mapa para o seu modo de jogo é iniciado ou parado, e passar o recurso mapa de como um parâmetro.
+
Esses eventos são chamados quando um mapa para o seu recurso é iniciado ou parado, e irá definir como parâmetros do evento o mapa em questão.
Dentro da função relacionada a esses eventos você pode obter todas as informações que você precisa do arquivo de mapa.
+
Nas funções destinadas a esses eventos, podes obter todas as informações necessárias sobre o arquivo .map.
  
====Exemplo====
+
====Um exemplo====
  
 
<syntaxhighlight lang="lua">
 
<syntaxhighlight lang="lua">
function startCtfMap( startedMap ) -- startedMap contém uma referência ao recurso do mapa
+
function startCtfMap( startedMap ) -- startedMap se refere ao recurso do mapa
     local mapRoot = getResourceRootElement( startedMap )        -- obtém o nó raiz do mapa iniciado
+
     local mapRoot = getResourceRootElement( startedMap )        -- retorna a raiz do XML
     local flagElements = getElementsByType ( "flag" , mapRoot ) -- obter todas as bandeiras no mapa e salvá-los em uma tabela  
+
     local flagElements = getElementsByType ( "flag" , mapRoot ) -- retorna todas as bandeiras do mapa e salva-os em uma tabela  
     -- continua a carregar informações como acima  
+
     -- agora é só proceder com o carregamento das informações obtidas acima:
     -- os jogadores de desova etc
+
     -- As bandeiras seriam criadas, e os jogadores, nasceriam.
 
end
 
end
 
addEventHandler("onGamemodeMapStart", getRootElement(), startCtfMap)
 
addEventHandler("onGamemodeMapStart", getRootElement(), startCtfMap)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Confecção de mapas compatível===
+
===Como fazer um mapa compatível?===
 
+
Os mapas são nada mais que recursos a parte. Isso porque é necessário o modo de jogo permanecer inalterado e o mapa, é claro, não alterar as regras do jogo. Simples assim.
Os mapas são recursos separados. Isto foi feito para criar um novo mapa não implica qualquer mudança no jogo, e vice-versa.
+
Para fazer um mapa compatível com o seu modo de jogo, abra o seu arquivo meta e faça assim:  
Para fazer um mapa compatível com o seu modo de jogo, abra o seu arquivo meta.xml e editá-lo assim: atributo "type" deve ser definido como "map", eo atributo "gamemodes" deve ser uma lista separada por vírgula (sem espaços) de nomes de recursos GameMode que o mapa trabalha.
+
* O atributo "type" deve ser definido como "map"
 +
* O atributo "gamemodes" deverá conter uma lista separada por vírgula (sem espaços) de nomes de gamemodes compatíveis com o mapa.
 +
Um exemplo:
 
<syntaxhighlight lang="xml">
 
<syntaxhighlight lang="xml">
<!--map's meta.xml-->
+
<!--meta.xml de um mapa qualquer-->
 
<meta>
 
<meta>
 
     <info type="map" gamemodes="cowcatapult,assault,tdm"/>
 
     <info type="map" gamemodes="cowcatapult,assault,tdm"/>
Line 98: Line 95:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Quando tudo estiver pronto, o administrador será capaz de usar esses dois comandos para iniciar parar o modo de jogo:
+
Quando tudo estiver pronto, o administrador poderá usar os seguintes comandos para iniciar ou parar a partida:
*/gamemode nomeGamemode [mapname] (mapname é opcional: você pode selecionar um mapa para começar o jogo, por padrão ele não existe)
+
*/gamemode nome-do-Gamemode [nome-do-mapa]: Com este comando, podes iniciar um mapa, e consequentemente, seu gamemode; caso ele não estiver rodando.
*/changemap mapname [nomeGamemode] (nomeGamemode é opcional: selecione o modo de jogo para começar com o mapa, o padrão é o atual)
+
*/changemap nome-do-mapa [nome-do-Gamemode]: Com ele, podes iniciar um mapa e um gamemode junto. Se não for especificado, o gamemode rodando no momento será mantido.
O [[map manager]] exporta algumas outra funçôes neste exemplo não ajuda, mas pode ser útil.
 
  
==O que mais você deve fazer==
+
''obs'': Os termos em colchetes ([]) são opcionais.
  
Existem alguns outros recursos que você deve usar para criar a sua própria maneira, ou pelo menos saber.
+
{{Dica|O [[map manager]] exporta algumas funções não descritas neste exemplo, podendo ser úteis.}}
  
===Helpmanager===
+
==E agora?==
  
O helpmanager deve ser a interface padrão para os jogadores que precisam de ajuda. Se você usar o helpmanager para exibir a ajuda de seu modo de jogo, cada jogador que usou helpmanager antes (por exemplo, em outros gamemodes) imediatamente sabe como chegar lá. Ele também exibe a ajuda para os diferentes recursos ativos divididos por abas em uma única janela, se necessário.
+
Há alguns recursos úteis para incrementar seu jogo. É bom ter conhecimento deles!
  
Há duas maneiras de usar o mapmanager, em resumo:
+
===Help Manager===
*Fornecer um texto simples que explica como usar o seu modo de jogo
+
O Help Manager é, em teoria, a interface padrão para os jogadores necessitando de ajuda. Portanto, se você usar o helpmanager para exibir informativos a respeito do seu jogo, qualquer jogador que tenha usado o helpmanager antes (em um outro servidor), imediatamente saberá como chegar lá. Além disso, o utilitário cria na mesma janela, outras abas para cada recurso que utiliza suas funcionalidades.
*Mostrar informações mais complexas na forma de GUI.
+
 
Leia a página helpmanager para obter detalhes sobre como fazê-lo.
+
De uma forma geral, há duas maneiras de usa-lo:
 +
* Fornecer um texto simples no chat explicando como usar o seu recurso
 +
* Mostrar informações mais extensas em uma janela.
 +
 
 +
Leia a página do Help Manager para obter detalhes de como utilizá-lo.
  
 
===Scoreboard===
 
===Scoreboard===
 
+
Scoreboard ou painel de avaliação, mostra jogadores e equipes presentes no servidor. Você pode adicionar colunas personalizadas para fornecer informações adicionais, caso necessário. Por exemplo, a coluna "points" do gamemode "ctf" representa os pontos adquiridos pelo jogador através de assassinatos ou capturas.
Scoreboard ou painel de avaliação, apresenta jogadores e equipes que estão presentes no servidor. Você pode adicionar colunas personalizadas para fornecer informações adicionais em seu mapa. Por exemplo, "pontos" a coluna gamemode o "ctf" poderia representar pontos do jogador adquiridos através de mortes ou capturas.
 
  
 
===Map cycler===
 
===Map cycler===
 +
O map cycler ou mapa termociclador, controla os mapas e gamemode que estão rodando no servidor. Por exemplo, você pode especificar quantas vezes um modo de jogo vai ser repetido antes de ir para o próximo. Para fazer isso, você deve dizer ao mapa termociclador em que rodada ele termina.
  
O map cycler ou mapa termociclador, controla o mapas e gamemode que estão em jogo no servidor. Por exemplo, você pode especificar quantas vezes um modo de jogo vai ser repetido antes de ir para o próximo, para fazer isso, você deve dizer ao mapa termociclador quando termina seu modo de jogo (por exemplo, quando uma rodada termina).
+
[[en:Writing Gamemodes]]
 
 
[[en:Writing gamemodes]]
 
 
[[it:Scrivere una gamemode]]
 
[[it:Scrivere una gamemode]]
 
[[ru:Writing Gamemodes]]
 
[[ru:Writing Gamemodes]]
 
[[de:Gamemodes schreiben]]
 
[[de:Gamemodes schreiben]]

Latest revision as of 23:44, 6 July 2014

Este guia tenta explicar o processo de como escrever um gamemode adequado. Se você ainda não sabe fazer scripts para o MTA, é recomendado começar pela Introdução ao Scripting.

Antes de começar

Um gamemode ou modo de jogo é o recurso principal do jogo, pois define todas as regras e tutela boa parte dos acontecimentos. Isto pode incluir: informar aos jogadores como jogar, fazer os seus bonecos nascerem, criar equipes, definir como eles ganharão dinheiro ou pontos, e assim por diante. Alguns exemplos de gamemodes são: Race e Deathmatch.

Como é um gamemode adequado?

Para ser simples, adequado ou bem feito, você deve utilizar todo potencial do sistema de arquivos map do MTA. Isto significa que um gamemode não carrega dentro de si elementos específicos de um mapa, como pickups, objetos, spawnpoints e veículos. Em vez disso, ele deve carregar-los através de arquivos coma a extensão .map, os quais a única função é listar esses elementos. Desta maneira, ele terá a sua disposição certos mapas instalados no servidor. Além disso, os usuários também podem criar novos mapas com o Map Editor - de um jeito mais intuitivo que escrever códigos.

Com certeza, um gamemode competente é o Race, pois ele permite aos jogadores fazerem upload de mapas personalizados para partidas de corrida. Mediante a isso, não é preciso abrir o recurso e edita-lo para adicionar novos circuitos.

Os arquivos de mapas são basicamente documentos em XML com uma extensão .map. Eles criam um cenário para um ou mais gamemodes específicos, a modo de não provocar alterações nas regras do jogo definidas inicialmente pelo próprio gamemode.

Cada elemento em um mapa corresponde a uma tag (instância) em seu respectivo arquivo. Há uma sintaxe definida a cada elemento padrão do MTA, como objetos, veículos e assim por diante. Porém, no caso de elementos customizados pelos recursos, é necessário criar uma sintaxe nova para cada um.

Premier Exmaple

Vamos examinar o modo de jogo chamado Capture the Flag. A função de um mapa criado para ele é definir onde estão os spawnpoints, as bandeiras, e possivelmente outros objetos, como veículos ou pickups. Um simples arquivo .map seria assim:

<map>
    <spawnpoint id="spawnpoint1" posX="1959.5487060547" posY="-1714.4613037109" posZ="877.25219726563" rot="63.350006103516" model="0"/>
    <pickup id="Armor 1" posX="1911.083984375" posY="-1658.8798828125" posZ="885.40216064453" type="armor" health="50" respawn="60000"/>
    <flag posX="1959.5487060547" posY="-1714.4613037109" posZ="877.25219726563" team="blue" />
    ...
</map>

Aqui você pode ver dois elementos comuns ao MTA: um spawnpoint e um pickup. Mais importante ainda, este contém uma tag chamada flag, definindo a localização e a cor da bandeira. O spawnpoint e pickup até podem ser normalmente criados por outros recursos, mas qualquer elemento personalizado têm de ser processados pelo gamemode em questão.

Resumindo, o objetivo de todo modo de jogo é que os jogadores criem seus próprios mapas como acontece no MTA Race.

Exemplo de como obter as informações do mapa

Como mencionado anteriormente, seu recurso precisa encontrar elementos customizados contidos em um arquivo, e processá-los. O exemplo a seguir mostra isso:

-- Crie uma tabela com todos os elementos do tipo bandeira
local flagElements = getElementsByType ( "flag" )
-- Crie uma relação entre eles
for key, value in pairs(flagElements) do
	-- Obtenha informações
	local posX = getElementData ( value, "posX" )
	local posY = getElementData ( value, "posY" )
	local posZ = getElementData ( value, "posZ" )
	local team = getElementData ( value, "team" )
	-- Crie um objeto de acordo com a posição da bandeira
	createObject ( 1337, posX, posY, posZ )
	-- Escreva no chat da equipe
	outputChatBox ( "Uma base para o time " .. team .. " foi criada." )
end

A função getElementsByType retorna uma tabela contendo todos os elementos de um determinado tipo. Este tipo é o nome da tag, como o exemplo da bandeira no mapa citado acima. Isso funciona para ambos os elementos customizados e os comuns ao MTA, como veículo ou jogador. Já getElementData é usada para carregar os atributos definidos no XML. Nesse simples exemplo, um objeto é criado nas coordenadas da bandeira, e em seguida, uma mensagem informando seu posicionamento aparece no chat. Você deve proceder com a criação de elementos customizados durante o carregamento do mapa, como também gerenciar sua interação com o mundo. Um exemplo seria o trecho omitido do script acima: ele cria colisores para informar a captura da bandeira por um jogador do outro time.

Map manager

Depois de lidas as seções acima, deve ficar claro que um modo de jogo deve sempre é constituído de duas coisas:

  • Seu próprio recurso, sempre intacto.
  • Vários mapas, os quais fornecem informações a respeito dos objetos do jogo.

Agora, em vez de escrever um script para cada mapa diferente, o Map manager fornece funções para carregar tanto os gamemodes, quanto seus mapas. Simplificando, quando você digitar o comando, por exemplo "gamemode ctf ctf-italy", ele irá iniciar ambos os recursos ctf e o seu mapa: ctf-Italy. Ele também provoca o evento onGamemodeMapStart para avisar ao recurso ctf que o mapa especificado no comando será carregado. O recurso ctf pode, então, acessar as informações contidas nele e começar a fazer os jogadores nascerem.

Como usar o Map Manager?

Para utilizar o recurso Map Manager, o modo de jogo deverá ser definido, obviamente, como "gamemode". Em outras palavras, é só definir, no arquivo meta, o atributo "type" da tag <info> como "gamemode". Além disso, você pode criar o atributo "name" para indicar um nome mais amigável para seu recurso, como "Capture the flag". Ou seja, em vez de ser mostrado no Server Browser "ctf" como o gamemode atual, será mostrado "Capture the Flag". Um exemplo seria:

<!-- retirado do meta.xml de "cowcatapult" -->
<meta>
    <info type="gamemode" name="Cow catapulting 2.0"/>
</meta>

Se o seu modo de jogo irá carregar mapas personalizados, você deverá adicionar eventos:

  • onGamemodeMapStart, se um mapa for carregado.
  • onGamemodeMapStop, se um mapa for for descarregado.

Esses eventos são chamados quando um mapa para o seu recurso é iniciado ou parado, e irá definir como parâmetros do evento o mapa em questão. Nas funções destinadas a esses eventos, podes obter todas as informações necessárias sobre o arquivo .map.

Um exemplo

function startCtfMap( startedMap ) -- startedMap se refere ao recurso do mapa
    local mapRoot = getResourceRootElement( startedMap )        -- retorna a raiz do XML
    local flagElements = getElementsByType ( "flag" , mapRoot ) -- retorna todas as bandeiras do mapa e salva-os em uma tabela 
    -- agora é só proceder com o carregamento das informações obtidas acima:
    -- As bandeiras seriam criadas, e os jogadores, nasceriam.
end
addEventHandler("onGamemodeMapStart", getRootElement(), startCtfMap)

Como fazer um mapa compatível?

Os mapas são nada mais que recursos a parte. Isso porque é necessário o modo de jogo permanecer inalterado e o mapa, é claro, não alterar as regras do jogo. Simples assim. Para fazer um mapa compatível com o seu modo de jogo, abra o seu arquivo meta e faça assim:

  • O atributo "type" deve ser definido como "map"
  • O atributo "gamemodes" deverá conter uma lista separada por vírgula (sem espaços) de nomes de gamemodes compatíveis com o mapa.

Um exemplo:

<!--meta.xml de um mapa qualquer-->
<meta>
    <info type="map" gamemodes="cowcatapult,assault,tdm"/>
</meta>

Quando tudo estiver pronto, o administrador poderá usar os seguintes comandos para iniciar ou parar a partida:

  • /gamemode nome-do-Gamemode [nome-do-mapa]: Com este comando, podes iniciar um mapa, e consequentemente, seu gamemode; caso ele não estiver rodando.
  • /changemap nome-do-mapa [nome-do-Gamemode]: Com ele, podes iniciar um mapa e um gamemode junto. Se não for especificado, o gamemode rodando no momento será mantido.

obs: Os termos em colchetes ([]) são opcionais.


[[{{{image}}}|link=]] Vale Lembrar: O map manager exporta algumas funções não descritas neste exemplo, podendo ser úteis.

E agora?

Há alguns recursos úteis para incrementar seu jogo. É bom ter conhecimento deles!

Help Manager

O Help Manager é, em teoria, a interface padrão para os jogadores necessitando de ajuda. Portanto, se você usar o helpmanager para exibir informativos a respeito do seu jogo, qualquer jogador que tenha usado o helpmanager antes (em um outro servidor), imediatamente saberá como chegar lá. Além disso, o utilitário cria na mesma janela, outras abas para cada recurso que utiliza suas funcionalidades.

De uma forma geral, há duas maneiras de usa-lo:

  • Fornecer um texto simples no chat explicando como usar o seu recurso
  • Mostrar informações mais extensas em uma janela.

Leia a página do Help Manager para obter detalhes de como utilizá-lo.

Scoreboard

Scoreboard ou painel de avaliação, mostra jogadores e equipes presentes no servidor. Você pode adicionar colunas personalizadas para fornecer informações adicionais, caso necessário. Por exemplo, a coluna "points" do gamemode "ctf" representa os pontos adquiridos pelo jogador através de assassinatos ou capturas.

Map cycler

O map cycler ou mapa termociclador, controla os mapas e gamemode que estão rodando no servidor. Por exemplo, você pode especificar quantas vezes um modo de jogo vai ser repetido antes de ir para o próximo. Para fazer isso, você deve dizer ao mapa termociclador em que rodada ele termina.