PT-BR/Composição de Gamemodes

From Multi Theft Auto: Wiki
Revision as of 02:03, 11 January 2013 by Ninguem (talk | contribs)
Jump to navigation Jump to search

Este guia tenta descrever o processo de como escrever um gamemode adequado. Se você esta iniciando scripting para o MTA, você pode verificar outros tutoriais de scripting Página Inicial em primeiro lugar.

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.

Oque é um "gamemode adequado"?

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 mapa (pickups, objetos, dasovas, 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.

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 desovas, veículos, etc.

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 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.

Exemplo

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 :

<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 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 processados pelo gamemode.

Resumindo, queremos que os jogadores criem seus próprios mapas como vimos no MTA:Race.

Exemplo de como obter as informações do map.

Como mencionado anteriormente, sua forma precisa encontrar elementos personalizados definidos em um arquivo, e processá-los. É muito simples como demonstrado abaixo.

-- Criar uma tabela com todos os elementos do tipo bandeira
local flagElements = getElementsByType ( "flag" )
-- cria um laço entre eles
for key, value in pairs(flagElements) do
	-- obter informaçõe
	local posX = getElementData ( value, "posX" )
	local posY = getElementData ( value, "posY" )
	local posZ = getElementData ( value, "posZ" )
	local team = getElementData ( value, "team" )
	-- criar um objeto de acordo com a posição da bandeira
	createObject ( 1337, posX, posY, posZ )
	-- escreve no chatbox da equipe
	outputChatBox ( "Base for team " .. team .. " created" )
end

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.

Map manager

Tendo lido a seção acima, deve ficar claro que um modo de jogo deve sempre consistem de duas partes:

  • O recurso gamemode, que continua o mesmo.
  • 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.

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

Se o seu modo de jogo vai carregar mapas personalizados, você deve adicionar manipuladores para

  • onGamemodeMapStart
  • onGamemodeMapStop (se houver descarregamento é necessária)

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. Dentro da função relacionada a esses eventos você pode obter todas as informações que você precisa do arquivo de mapa.

Exemplo

function startCtfMap( startedMap ) -- startedMap contém uma referência ao recurso do mapa
    local mapRoot = getResourceRootElement( startedMap )        -- obtém o nó raiz do mapa iniciado
    local flagElements = getElementsByType ( "flag" , mapRoot ) -- obter todas as bandeiras no mapa e salvá-los em uma tabela 
    -- continua a carregar informações como acima 
    -- os jogadores de desova etc
end
addEventHandler("onGamemodeMapStart", getRootElement(), startCtfMap)

Confecção de mapas compatível

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.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.

<!--map's meta.xml-->
<meta>
    <info type="map" gamemodes="cowcatapult,assault,tdm"/>
</meta>

Quando tudo estiver pronto, o administrador será capaz de usar esses dois comandos para iniciar parar o modo de jogo:

  • /gamemode nomeGamemode [mapname] (mapname é opcional: você pode selecionar um mapa para começar o jogo, por padrão ele não existe)
  • /changemap mapname [nomeGamemode] (nomeGamemode é opcional: selecione o modo de jogo para começar com o mapa, o padrão é o atual)

O map manager exporta algumas outra funçôes neste exemplo não ajuda, mas pode ser útil.

O que mais você deve fazer

Existem alguns outros recursos que você deve usar para criar a sua própria maneira, ou pelo menos saber.

Helpmanager

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á duas maneiras de usar o mapmanager, em resumo:

  • Fornecer um texto simples que explica como usar o seu modo de jogo
  • Mostrar informações mais complexas na forma de GUI.

Leia a página helpmanager para obter detalhes sobre como fazê-lo.

Scoreboard

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

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).