PT-BR/Scripts do Cliente

From Multi Theft Auto: Wiki
Jump to: navigation, search

Scripts do Cliente são roteiros que rodam no computador do jogador. Isso significa que o MTA tem acesso a mais informações a respeito do que se passa no mundo dele, mas não no mundo dos outros que estão conectados no mesmo servidor.

Isso é muito útil para que elementos, principalmente visuais (shaders, objetos e GUI), sejam criados e manipulados corretamente.

Como isso funciona?

Scripts do Cliente segum a mesma lógica de programação dos roteiros executados no servidor. É possível fazer uma comunicação entre os dois com o sistema de eventos nativo do MTA. Porém, é obrigatório que eles estejam em arquivos diferentes para evitar confusão na hora de distingui-los. Além disso, como qualquer outro componente do recurso, eles são definidos no meta.xml ao inserir uma etiqueta <script> e <type>.

Por exemplo:

meta.xml

<meta>
	<script src="c_gui.lua" type="client" />
	<script src="s_gui.lua" type="server" />
</meta>


Se você desejar ativar um evento no cliente a partir do servidor, é preciso primeiramente registrar o evento no cliente usando addEvent. Após disso vincularemos um handler para indicar o que pode ativar o evento e qual função será executada. Agora no script do servidor, é possível chamar este evento usando triggerClientEvent. A mesma coisa pode ser feita na ordem inversa: chamar um evento no servidor a partir do cliente usando triggerServerEvent.

Vamos imaginar um exemplo bem prático. Imagine que criamos um mini jogo em que os jogadores precisam encontrar o mágico chamado Oscar. Ele está perdido com um saco de dinheiro como recompensa pra quem encontrá-lo no mapa de San Andreas. Assim que algum jogador avista-lo e se aproximar dele, um montante será adicionado no seu inventário. E é ai que nós usamos o triggerClientEvent para que o servidor possa pedir que o script do cliente mande uma mensagem (e o dinheiro) caso esse perceber que o jogador se aproximou de Oscar. A seguir, um exemplo:

Script do Cliente:

function RecompensadeOscar ( tempo )
	outputChatBox( "Parabéns, você encontrou o Oscar em " .. tempo .. " segundos!" )
end
addEvent( "aoEncontrarOscar", true )
addEventHandler( "aoEncontrarOscar", getRootElement(), RecompensadeOscar )

Script do Servidor:

triggerClientEvent ( algumJogador, "aoEncontrarOscar", getRootElement(), 4800 )