Sign in to follow this  
.Dev

[CURSO] Básico de Lua 04

Recommended Posts

Post Anterior: 


Eai pessoal tudo bom? Continuando o Curso básico, hoje vamos um pouco sobre a Wiki e Funções:

MTA WIKI 

 

Antes de mais nada, praticamente todo o conteúdo da wiki do mta, se encontra em inglês, portanto se você não entende bem o idioma use algum método de tradução, apesar que sinceramente, eu recomendo aprender inglês, afinal quando se trata de programação uns 80% do conteúdo é em inglês.

Para começamos, segue o link oficial da Wiki do MTA: https://wiki.multitheftauto.com/wiki/Main_Page

Como podem notar quando abrirem o link, a wiki conta com uma grande variedade de conteúdo, então para ser sincero eu vou simplesmente citar os conteúdos que eu considero essenciais para criação de scripts, e os algumas dicas e métodos para ajudar quem não está familiarizado com a wiki entender como ela é organizada.

Antes de mais nada, a wiki possui uma barra de pesquisa, que fica localizada a esquerda da página, como mostra a imagem: https://prnt.sc/r98vua

Nesta barra de pesquisa, você pode digitar o nome de funções para saber sua funcionalidade, por exemplo vamos pesquisar onPlayer: https://prnt.sc/r98wa4

Como podem ver a pesquisa nos retorna possíveis resultados, acredito eu que seja baseado em ordem de adição ou visualização que os conteúdos são mostrados, mas não tenho certeza.

Quando encontrar o recurso que procura, basta clicar no nome que sera direcionado a pagina com a explicação e exemplo de código sobre o recurso, por exemplo onPlayerWasted(): https://wiki.multitheftauto.com/wiki/OnPlayerWasted

Novamente o próprio nome da função já diz para que ela serve, por isso recomendo que aprendem inglês ou traduzam caso tenham dificuldades. OnPlayerWasted pode ser lido como "Quando o Jogador Morrer" (tradução livre),esse recurso, como o nome já diz, só será executado quando o jogador for morto, na wiki também é possível visualizar os argumentos que o recurso recebe por exemplo:

 

int totalAmmo, element killer, int killerWeapon, int bodypart, bool stealth

 

Lembrando que Anteriormente eu expliquei que int = interger que significa "Valor Numérico", portanto sempre que vocês verem int lembrem-se que se trata de números.

 

Vamos separar por partes os argumentos da função:

int totalAmmo = Numero total de munições da vitima;          -- Recebe Numero
element killer = Quem é o assassino;                         -- Recebe o elemento
int killerWeapon = Qual arma ele usava;                      -- Recebe Numero
int bodypart =  Qual parte do corpo da Vitima, foi atingido; -- Recebe Numero
bool stealth =  Se foi uma execução ou não;                  -- Recebe true ou false

 

Bom vamos entender algumas coisas. O principal nessa função é o Element o Bodypart e o Source, como a propria wiki explica: https://prnt.sc/r98zkl 

O Source desse recurso é quem foi morto. Então tenham em mente que até os paramentos de elementos são passados na wiki.

 

Só para esclarecimento, element (elemento), no MTA pode ser considerado tudo aquilo que é uma entidade existente, por exemplo: Ped, jogadores, carros, markers e etc. Tudo que existe e foi criado é um elemento.

No caso da killerWeapon temos que levar em consideração como as armas no MTA são organizadas, para isso a wiki tem uma tabela com todas as armas e suas informações: https://wiki.multitheftauto.com/wiki/Weapons

Os pontos principais a serem observados em questão de armas são: https://prnt.sc/r99134

Nessa mesma página da wiki, um pouco mais a baixo, a wiki sempre nos surege recursos relacionados ao que estamos pesquisando, por exemplo: https://prnt.sc/r991qy

 

**Clicando em algum desses links, sera redirecionado até a página do recurso, onde pudera encontrar, todas as informações necessárias.**

 

Eu sei que pode parecer meio vago a explicação da Wiki, mas aqui cobrimos os principais pontos, o exemplos de código, os argumentos, source e elementos, e alem de tudo isso a wiki ainda conta com exemplos de código, retornando ao onPlayerWasted, por exemplo: 

addEventHandler( "onPlayerWasted", getRootElement(),
    function()
        setTimer( spawnPlayer, 2000, 1, source, 0, 0, 3 )
    end)

 

Esse é um exemplo de código, no caso a wiki conta com outro bem mais explicativo, mas para não deixar o tópico com muito código da wiki, vou me ater apenas aos básicos para explicação.

 

Além dos exemplos de código, a wiki ainda conta com recursos relacionados, então se tirarem um tempo para olhar melhor a wiki, tenho certeza que vão encontrar tudo que precisa.

Outra coisa a se manter atenção na wiki são os "lados" dos códigos, sempre que se depararem com exemplos de código, em uma caixa laranja como a da foto: https://prnt.sc/r993el , se trata de um código que deve ser executado do lado Server.

Caso contrário, encontrem uma janela vermelha como a da foto: https://prnt.sc/r9941b , se trata de um código que deve ser executado do lado Client.

 

**Caso um código tenha apenas uma caixa branca, ou possua as 2 caixas, significa que ele é shared ou seja funciona em ambos os lados. Salvo casos de funções exclusivas de cada lado.**

 

Mas alguns de vocês devem estar se perguntando qual a diferença entre o lado Client e o Server. Eu poderia entrar em toda a explicação do porque são diferentes e etc, 

mas para facilitar o entendimento, vamos considerar que: 

 

Client Side: Tudo que roda na máquina do Jogador/Usuário;

Server Side: Tudo que roda no servidor, sem interação ou necessidade dela, pelo Usuário.

 

E qual a importância da utilização correta do Client e do Server? Bem, por questão de segurança mesmo, eu recomendo que sempre utilizem informações sensíveis, e recursos em Server Side, e exportem apenas a parte gráfica e valores necessários para exibição para o lado client.

Assim você evitar que pessoas roubem os teus scripts e também evita que jogadores tenham acesso a dados sensíveis, como datas, sets e etc.

 

Para facilitar a pesquisa de vocês, eu vou linkar ao post os links uteis da wiki, mas só lembrando que eles podem ser encontrados na pagina inicial:

 

Introdução ao Script:https://wiki.multitheftauto.com/wiki/Scripting_Introduction

Introdução ao Script com Interface Gráficahttps://wiki.multitheftauto.com/wiki/Introduction_to_Scripting_the_GUI

Funções do Lado Serverhttps://wiki.multitheftauto.com/wiki/Server_Scripting_Functions

Eventos do Lado Serverhttps://wiki.multitheftauto.com/wiki/Server_Scripting_Events

Funções do Lado Clienthttps://wiki.multitheftauto.com/wiki/Client_Scripting_Functions

Eventos do Lado Clienthttps://wiki.multitheftauto.com/wiki/Client_Scripting_Events

Funções Uteishttps://wiki.multitheftauto.com/wiki/Useful_Functions

Elemento do MTAhttps://wiki.multitheftauto.com/wiki/Element

Classes do MTAhttps://wiki.multitheftauto.com/wiki/MTA_Classes

 

Os ID podem ser encontrados na pagina inicial como mostrado na imagem, não vou linkar porque seria muitos links: https://prnt.sc/r998ga

Outro link que recomendo muito a leitura é sobre os eventos: https://wiki.multitheftauto.com/wiki/Event_system

Ok Tendo tudo isso em mente, vamos começa a entender funções. Alguns podem achar que a introdução sobre a wiki é perda de tempo, porem, enquanto estiverem programando, é importante saber como utilizar a wiki, ja que a maiorias se não todas as duvidas, podem ser tiradas lá.

Vou dizer algo que o pessoal pode não querer ouvir, mas ninguém é obrigado a ti ajudar. Nunca, nem em código nem na vida, ninguém é obrigado a isso, as pessoas fazem porque querem, ou ganham algo com isso. Mas nem sempre vão fazer ou ganhar algo, então eu realmente sugiro que aprendam a aprender, e a maneira mais fácil de fazer isso é pesquisando e lendo.

 

**Meio irônico vindo do cara que ta escrevendo isso, mas acreditem isso vale para vida, aprendem a se virar.**

 

Funções 

 

Primeiro vamos definir oque são funções, pudemos definir funções como blocos de código que executam tarefas especificas. Podemos escrever também como "Funções dão programas, dentro de programas.", e acreditem essa frase faz sentido, programa é tudo aquilo que realiza algo, e as funções são blocos de código, que  executam tarefas específicas como eu mencionei logo acima, portanto são programas por si só, e estão dentro fazem parte de um programa maior.

 

Antes de começarmos a falar de funções, é necessário que se entenda a sintaxe dela em Lua.

function nome_daFunção(argumentos)
    -- Bloco de Código
end 

 

**Vamos lembrar das boas praticas de programação quando formos nomear as funções.**

 

Bom para declarar uma função utilizamos o function seguido do nome da mesma e (), dentro desses parênteses, podemos passar argumentos caso haja. Mas oque seriam argumentos?

 

Vamos pensar nas funções como chamados, nós estamos chamando algo, e podemos direcionar esse chamado, por exemplo, vamos supor que estamos chamando uma pessoa, no meio da multidão, então essa pessoa tem um nome, como verificaríamos que essa pessoa é a qual procuramos? Com o uso de condicionais acredito que vocês ja devam conseguir pensar em algo mas vamos a um exemplo:

function chamar_pessoa(nome)
    if nome == "Dev" then 
        print('Você encontrou a pessoa!')
    else
        print('Você não encontrou a pessoa!')
    end
end

 

Sendo assim a função logo acima está bem logica, mas como iriamos chamar a pessoa de fato? utilizando a seguinte sintaxe:

 

nome_daFunção(argumento)

 

No nosso exemplo ficaria assim:

 

chamar_pessoa('Dev')

 

E o resultado seria => [ Você encontrou a pessoa! ]

 

Então para deixamos claro, uma função não é executada a menos que a gente chame ela. No caso do MTA nos temos os eventos e Handlers que poderíamos pensar como pequenos robôs chamando as funções para nos, por exemplo o onPlayerWasted(), ela é uma função que só é chamado quando o jogador morre, outro exemplo seria o onPlayerLogin() que só execu a quando o jogador entra no servidor.

Mas tirando esses casos de auto execução, as funções só serão chamadas caso você queira, ou defina alguma forma do usuário chamar por exemplo com o addCommandHandler().

Só para relembrar, funções podem receber Condicionais, iterações e afins, mas ainda seguem a mesma logica de concatenação e etc.

Outra coisa importante, funções recebem argumentos em ordem sequencial, isso significa que pode exemplo uma função com:

function soma_numeros(a1, a2)
    if a1 and a2 then 
        local resultado = a1 + a2
        return resultado
    end   
end

 

Caso eu chame a função por exemplo soma_numeros(1,2); o resultado seria => 3. Porem caso eu não passe algum dos argumentos, ele vai retornar nil e dará um erro, e lembre se de separar os argumentos por virgula " , ".

 

Para ajudar vocês, deem uma lida sobre os handlers e etc nos links abaixo:

 

addEventhttps://wiki.multitheftauto.com/wiki/AddEvent

addEventHandlerhttps://wiki.multitheftauto.com/wiki/AddEventHandler

cancelEventhttps://wiki.multitheftauto.com/wiki/CancelEvent

 

Exercícios

 

1. Faça um programa que receba do usuário um numero é faça o seguinte ( n * n/4 - 1 );

2. Faça um programa onde uma função main() ira executar uma verificação sobre a existência de um numero X, e passar a uma função externa, que deva imprimir o resultado;

3. Faça uma função que divida numero enviado pelo usuário;

4. Faça uma função que imprime um certo numero de linhas, recebidos em um for;

5. Faça uma função main() que executa uma função ao fim de um repeat.

 

Caso queiram, podem postar o código nesse tópico, e caso tenham alguma duvida, deixem logo a baixo. Só lembrando ao pessoal que já entende do assunto, ou pelo menos sabe o básico, vamos ajudar quem esta começando, todo mundo começou sem saber quase nada.
 

Parte 05: 

 

Edited by .Dev
  • Like 4

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.