PT-BR/Scripts do Cliente: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
Line 1: Line 1:
Como sabemos, scrips do lado client são scripts executados dentro do lado client deathmatch mod. Isto significa que têm acesso a mais informações sobre o mundo do jogo, mas poucas informações sobre o resto dos jogadores no jogo.
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 é útil para coisas que precisam ser feitas do lado do cliente, como efeitos visuais, criação e manipulação de elementos gráficos.


==Como ele funciona?==
Isso é muito útil para que elementos, principalmente visuais (shaders, objetos e GUI), sejam criados e manipulados corretamente.
Os scripts do lado client seguem o mesmo padrão como os scripts do lado server. Vamos tentar fornecer a funcionalidade necessária para os scripts do lado client. A interface entre o lado server e client é feita usando o sistema com o mesmo evento que já temos. Os scripts do lado client e o server necessitam estar em dois arquivos diferentes, que estão incluídas a partir do recurso (no metafile) usando uma tag <script> (e atributo do type).


Por Exemplo:
==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'''
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<!-- GUI (cliente) script teste -->
<meta>
<meta>
<script src="guitest.lua" type="client" />
<script src="c_gui.lua" type="client" />
<info author="IJs" />
<script src="s_gui.lua" type="server" />
</meta>
</meta>
</syntaxhighlight>
</syntaxhighlight>


Se você quiser disparar um evento do lado client a partir do lado server, primeiro você deve registrar no evento do lado client usando o [[addEvent]]. Depois, você deve anexar um manipulador para o evento como você faria em um script do lado do server. Depois, no script do lado server, você deverá chamar o evento [[triggerClientEvent]] ( player, "nomeDoEvento", fromElement, args ... ) que irá acionar o evento do lado do client. O mesmo pode ser feito disparando o evento do lado server do script com o [[triggerServerEvent]].


Por Exemplo:
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 <i>handler</i> 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]].


'''Lado Client:'''
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:'''
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
function showObjectBrowser(id)
function RecompensadeOscar ( tempo )
  -- codigo aqui
outputChatBox( "Parabéns, você encontrou o Oscar em " .. tempo .. " segundos!" )
end
end
 
addEvent( "aoEncontrarOscar", true )
addEvent("doShowObjectBrowser", true)
addEventHandler( "aoEncontrarOscar", getRootElement(), RecompensadeOscar )
addEventHandler("doShowObjectBrowser", getRootElement(), showObjectBrowser)
</syntaxhighlight>
</syntaxhighlight>


'''Lado Server:'''
'''Script do Servidor:'''
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
triggerClientEvent ( somePlayer, "doShowObjectBrowser", getRootElement(), 1034 )
triggerClientEvent ( algumJogador, "aoEncontrarOscar", getRootElement(), 4800 )
</syntaxhighlight>
</syntaxhighlight>


[[en:Client side scripts]]
[[es:Scripts de Cliente]]
[[it:Script client-side]]
[[ru:Client side scripts]]
[[ru:Client side scripts]]
[[it:Script client-side]]
[[es:Scripts de Cliente]]
[[en:Client side scripts]]

Latest revision as of 16:34, 11 December 2013

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 )