Controladores Lógicos

Oneshot
em Tutoriais de Scripting

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347
titlexl.png

ballred.png

 

Bem-vindos ao primeiro tutorial da série Scripting!, escolhi abordar um tema simples, mas que fará muita diferença nos próximos temas que irei abordar.

 

Aprender a linguagem LUA é como aprender matemática. Sabe por quê?

 

Na matemática, para resolver equações, você não precisa ter aprendido soma e subtração? No campo da LUA, para aprender (por exemplo) a construção do escopo do operador FOR, deverá primeiro, aprender o tema de hoje: Controladores Lógicos.

 

Está preparado? Se sim, vamos lá!

 

ballred.png

 

Para começar, galera, temos que pensar nas estruturas de controle lógico mais comuns no ramo da LUA, são as que trabalham com condições. Provavelmente quando você estava fazendo sua aula de inglês ou de português, seu professor falou algo parecido com isso abaixo:

 

Se chover hoje, não irei para a escola.

 

Veja que o Se ali remete a nossa condição (não chover) e ao que irá acontecer (não irei para a escola), por incrível que pareça, no campo da LUA, a coisa é exatamente a mesma, só que usamos o controlador IF. Vejamos abaixo como usar ele:

 

if true then
 --[[bloco]]
end

 

O IF funciona desse jeito mostrado acima, se ele verifica que algo retorna verdadeiro, ele executa o escopo atribuído a ele. Seguem abaixo exemplos do que poderia ser verdadeiro.

 

1 == 1

2 == 2

type("Oneshot") == "string"

type(3) == "number"

4 < 7

 

Para verificar se algo é verdadeiro, você precisa fazer uma relação entre algo declarado e o argumento, para o LUA não é diferente. Para fazer essas verificações, você deverá usar os operadores de relação. Você deve conhecer alguns desses operadores das suas aulas de matemática, são eles:

 

== -> Igualdade

>= -> Superioridade (Maior ou Igual)

<= -> Inferioridade (Menor ou Igual)

> -> Superioridade Absoluta (Maior)

< -> Inferioridade Absoluta (Menor)

~= -> Diferença

 

São os operadores que vão retornar o true ou o false da estrutura de controle IF para que ela funcione. Agora veremos um código simples abaixo:

 

local var = 3

if(var <= 4) then
 print("Legal")
end

 

O seu interpretador que, na maioria dos casos, será o executável do seu servidor, entende o bloco acima como algo mais ou menos assim:

 

Se var menor ou igual a 4 então mostrar "Legal".

 

Certo, se você entendeu tudinho, deixe eu falar algo sábio: "Para tudo existe algo contrário."

É com isso que apresento-lhe nosso segundo controlador lógico: ELSE.

 

O ELSE é um controlador lógico que remete a "do contrário". Ele é usado juntamente com o IF, de modo que, podemos nos aproveitar do true e do false. Sendo assim, vamos voltar ao exemplo dado acima:

 

Se var menor ou igual a 4 então mostrar "Legal". Do contrário, mostrar "Chato".

 

Como já sabemos montar o escopo do IF, vamos prosseguir com o código.

 

local var = 3

if(var <= 4) then
  print("Legal")
else
  print("Chato")
end

 

Lembre-se! Que o ELSE não precisa do then, pois ele se aproveita da verificação do IF que ele é atribuído. Agora existe um último controlador que funciona como junção de ELSE e de IF e o nome não é nada criativo: ELSEIF.

 

Ele foi criado mais com o objetivo de evitar as construções de escopos abaixo:

 

if true then
 --[[bloco 1]]
else
  if true then
     --[[bloco 2]]
  else
     if true then
        --[[bloco 3]]
     end
  end
end

 

Ele tem a função de permitir outra verificação ou outra efeito para a condição, de modo que:

 

Se chover hoje não irei para a escola, mas se nevar irei fazer guerra de neve.

 

De modo que o escopo com o uso do ELSEIF fica assim:

 

if true then
 --[[bloco 1]]
elseif true then
 --[[bloco 2]]
elseif true then
 --[[bloco 3]]
end

 

Um exemplo básico para fixar o conteúdo passado acima é esse abaixo:

 

local var = math.random(1, 3)

if var == 1 then
 print("var tem valor 1")
elseif var == 2 then
 print("var tem valor 2")
elseif var == 3 then
 print("var tem valor 3")
end

 

Agora existem dois "operadores-controladores" que são usados para atribuir várias condições a um controlador lógico.

São eles o AND e o OR, eles como o nome remete, tem significado lógico de "E" e "OU", respectivamente. Sendo assim, imagine a seguinte frase:

 

Se chover hoje ou ter muito trânsito e eu chegar atrasado então não irei para a escola.

 

Sim, creio que você entendeu. A estrutura montada fica mais ou menos assim:

 

if true and true or true then
  --[[bloco]]

 

Esse dois operadores fazem um papel grandioso no campo do LUA. Eles, igual ao ELSEIF, evitam construções de escopos do tipo:

 

if true then
  if true then
     --[[bLOCO]]
  end
elseif true then
  --[[bLOCO]]
end

 

Veja, é um mesmo bloco (escopo) executado se todas essas condições retornarem verdadeiro. O AND faz o papel daqueles dois IF e o OR faz o papel do ELSEIF. Concorda comigo que esses operadores reduzem o código em muito?

 

O AND verifica todas as condições ligadas, se todas retornarem verdadeiro, ele executa o escopo. Se uma delas for falso, ele pula o escopo. Se houver presença do OR, ao invés do interpretador pular o escopo, ele verifica se a condição do OR é verdadeira.

 

E assim acabamos a matéria do nosso primeiro tutorial. Será que vocês conseguem fazer o exercício de fixação?

 

ballred.png

 

local var = 28

 

Com a variável passada acima, quero que vocês montem uma estrutura que faça tudo isso abaixo:

 

Verificar se o número é maior que 20 e menor que 30, então

Verificar se ele é igual a 28, então mostrar no interpretador "XTibia". Do contrário, mostrar no interpretador "Scripting!".

 

O exercício está bem simples, se você ler o conteúdo, você conseguirá fazer.

 

Abraços, galera!

 

ballred.png

 

luisfe23

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 31/10/08Posts: 871Char no Tibia: Luis Felipe Knight

Este tutorial foi APROVADO.

 

- Tutorial muito organizado

- Imagens que auxiliam a organização

- Conteúdo ótimo

- Muito bem explicativo

 

Continue sempre trazendo tutoriais ao XTibia.

luisfe23 here

thequestion

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 09/09/10Posts: 23

Exercício:

local var=28

if var > 20 and var < 30 then
 if var == 28 then
  print("Xtibia")
 else
  print("Scripting")
 end
end

Dica:

Acho que no próximo Tutorial poderia mostrar algum interpretador e 'debugador'(o ScriptLive(único bom que conheço))

 

E o que é "Léxica"???

damarium2.png

740860.png

Saymon14

.
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 05/05/10Posts: 544

Bom tutorial, vo almoçar agora, mais eu volto daqui a pouco para ler mais atencioso.



:thumbsupsmiley:

Abraços

 

Não entro em equipes, já tenho meu projeto, não insista.

 

 

 

 

 

 

Easy Mapper Map Editor 8.60: Clique aqui

[8.60] BeastXHunter: Clique aqui

joaohd

Neox Boy
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 03/02/09Posts: 361Char no Tibia: Fearless Man

Belo tutorial hein... Voltou com tudo!

 

Respostas abaixo:

 

local var = 28
print((20 <= var and var == 28) and "Xtibia" or "Scripting")

 

 

:bigode:

 

flw

brunin86

avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 30/05/10Posts: 101

Vlw cara me ajudo d+ espero q continue assim, trazendo sempre seus tutoriais.

MSN : brunin.1420@hotmail.com

 

 

Catch System + Go/Back ' (da época de 2010 que não tinha server de pokemon sem ser o da SVKE)

Pokedex System (Basico) (da época de 2010 que não tinha server de pokemon sem ser o da SVKE)

Saffari Zone (da época de 2010 que não tinha server de pokemon sem ser o da SVKE)

 

 

740733.png

Ajudei ? Quer me ajudar ? Upa meu pet pls :]

 

fbbc5e2.png

nightshade

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/02/08Posts: 18Char no Tibia: Ysuldur

local var = 28
if var > 20 and var < 30
if var = 28 then
 print ("Xtibia")
else
 print ("Scripting")
end

end

 

 

postei mas acho que nao esta certo to usando o script live pra ver se compila ele falo que nao da sempre tem algo errado -.-



Sou fan de..

Subwat

GAUCHO MACHO
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 27/07/09Posts: 1516Char no Tibia: Gean Riot
local var == 28
if var > 20 and var < 30
if var == 28 then
 print ("Xtibia")
else
 print ("Scripting")
end

end

Entrem Server online desde o dia 22/02/2013 Monster 24HORAS dedicado!

IP: monster24h.com

PROTOCOL:8.60

PORT:7171

 

RATES:

Exp: 9999x~10x

Skills:800x

Magic:200x

Loot:2x

Pvp-e Advanced: 1.1x Ao matar players de level semelhante.

 

Accounts Pelo Account Manager!

thequestion

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 09/09/10Posts: 23

local var = 28
if war > 20 and var < 30
if var = 28 then
 print ("Xtibia")
else
 print ("Scripting")
end

end

 

 

postei mas acho que nao esta certo to usando o script live pra ver se compila ele falo que nao da sempre tem algo errado -.-

è porque ta escrito 'war' e não 'var'(na 2ª linha)

damarium2.png

740860.png

nightshade

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/02/08Posts: 18Char no Tibia: Ysuldur

hmm é mesmo, dhsauidhiusada mas dai ja testei com var ele fala que precisa de then perto de if

 

sei lah negocio complicado :|



Sou fan de..

tinfer

Time changes everything that you dreamed
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 31/10/10Posts: 33

local var == 28 
if var > 20 and var < 30 
if var == 28 then 
 print ("Xtibia") 
else 
 print ("Scripting") 
end 

end

 

ta falho isso ai errou em 2 lugares

 

certo é

 

local var = 28 

 

e faltou um "then" nesta linha,certo é:

 

if var > 20 and var < 30 then



natsusign1.png

"You hate it but you know respect you’ve got to give me..."

drakylucas

Draky Scripter
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 12/09/10Posts: 416Char no Tibia: Draky Lucas

realmente excelente.

tao bom para pessoas novatas quanto para os mais avançados que tem alguma duvida =d

rep +