Ir para conteúdo

#4 - aula de scripting lua - estrutura de controle - IF


Poccnn

Posts Recomendados

Palavras e caracteres reservados

 

aulaLogo.jpg

 

Link da aula anterior, caso não tenha lido.

Palavras reservadas que será usado nessa aula:

if, else, elseif, then, end, and, or, not

 

 

 

 

Estrutura de controle (if)

 

 

O if serve para criar uma condição; ele está precedido de outra palavra que finaliza a condição, que se chama “then”, e também de outra palavra para fechar o if, que se chama “end”.

Caso a condição seja verdadeira, o bloco criado por if será executado, caso não seja verdadeira, ele passa para a próxima instrução.

 

 

Exemplo:

 

if (condição) then -- caso a condição seja verdadeira, executa as instruções abaixo.

print(“condição verdadeira”)

return true

end -- finaliza o if.

 

 

E se precisarmos de mais condições? Podemos usar dentro do if a palavra “and” que diz ao sistema que há mais condições para ser analisadas.

if (condição) and (condição) then -- abertura do bloco.

print(“as duas condições são verdadeiras”) -- evento dentro do bloco criado por then.

end -- finaliza o if.

 

 

Podemos também usar a palavra “or” que diz ao sistema que caso uma condição não seja verdadeira, ele tem que verificar se a próxima condição é verdadeira.

if (condição) or (condição) then

-- abertura do bloco.

 

print(“uma, ou as duas condições é, são verdadeira\’s”) – evento dentro do bloco criado por then.

end -- finaliza o if.

 

 

O “elseif” faz a mesma coisa do “if”, ele cria uma nova condição e um novo bloco, e nela, podemos inserir instruções distintas para cada ocasião.

valordaconta = 100

if valordaconta > 100 then

         print(“não temos essa quantia”)

elseif valordaconta <= 100 and valordaconta > 0 then

         print(“pague a conta”)

elseif valordaconta <= 0 then

         print(“conta não tem valor, portanto não precisa paga-la”)

end -- fecha o if. Não é necessário fechar os elseif’s, pois eles fazem parte do if.

 

 

Existe outra palavra reservada que ajuda muito quando determinamos diversas condições, mas não são validas; O “else” é a ultima possibilidade de se criar um bloco de instruções caso nenhuma condição anterior seja valida.

cor = “azul”

if cor == “vermelha” then

         print(“sinal de pare”)

elseif cor == “amarela” then

         print(“sinal de atenção”)

elseif cor == “verde” then

         print(“sinal de liberado”)

else -- executa o bloco, desde que as demais condições acima não sejam validas.

         print(“cor desconhecida”)

end

 

 

A palavra reservado “not” serve para inverte o valor da condição; caso a condição seja verdadeira, ao usar a palavra not, ela se torna falsa e assim vice-versa.

 if not 1+1 ~= 2 then -- 1+1 não é diferente de 2, portanto é uma condição falsa.

 print(“mesmo 1+1 não sendo diferente de 2, esse bloco foi executado porquê a palavra \“not\” inverteu o valor da condição de \“false\” para \”true\”.”)

end

 

 

Agora no código que vocês criaram nas aulas anteriores, acrescentem estruturas de controles com condições a eles.

Inté a próxima aula.

aulaLogo.jpg.d7f074342f130c3e6ab38e73ddb33f52.jpg

Editado por Poccnn
Link para o comentário
Compartilhar em outros sites

  • Poccnn unlocked this tópico

Cara te admiro, mesmo sabendo que não tem muitas pessoas no fórum para aproveitar esse conteúdo você continua fazendo e com qualidade, meus parabéns carinha eu mesmo pensei em fazer aulas de lógica da programação, algoritmo e c/c++ de acordo com os métodos que estou aprendendo na faculdade, porém não tenho essa paciência que você tem, mesmo eu não estando utilizando essas aulas não deixei de notar a qualidade do seu trabalho, então deixo aqui meu obrigado por mesmo nos dias de hoje continuar ajudando a comunidade.

Editado por Jakson Souza
Link para o comentário
Compartilhar em outros sites

if getPlayerLevel(cid) == 20 then

      doPlayerSendTextMessage(cid, 24,Você tem nível 20")

    elseif getPlayerLevel(cid) >= 21 then

      doPlayerSendTextMessage(cid, 24,Você tem nível maior que 20")

    end

    return true

end

Editado por Nildson
Link para o comentário
Compartilhar em outros sites

if getPlayerLevel(cid) <= 100 then
print("Voçe passou do level 100")
return true
end
elseif getPlayerLevel(cid) == 200 then
print("Voçe precisa de level 200")
return true
end
                            

espero q esteja certo

@Poccnn

Link para o comentário
Compartilhar em outros sites

16 horas atrás, Nildson disse:

if getPlayerLevel(cid) == 20 then

      doPlayerSendTextMessage(cid, 24,Você tem nível 20")

    elseif getPlayerLevel(cid) > 21 then

      doPlayerSendTextMessage(cid, 24,Você tem nível maior que 20")

    end

    return true

end

Não sei como é o restante desse script, mas esse return true e esse end no final não fazem parte de nenhum bloco e o end não está fehando nenhum escopo, portanto geraria um erro de execução. 

 

 

15 horas atrás, ZikaLord disse:

if getPlayerLevel(cid) <= 100 then
print("Voçe passou do level 100")
return true
end
elseif getPlayerLevel(cid) == 200 then
print("Voçe precisa de level 200")
return true
end
                            

espero q esteja certo

@Poccnn

 

Totalmente errado.

Tu fechou o if e após ter fechado quis abrir um elseif. 

O elseif está intimamente ligado ao if, portanto não pode ser declarado sozinho.

Outra coisa: a mensagem que tu pos nos dois blocos criados tanto por if quanto por elseif não condizem com a declaração da condição poata nos mesmo.

Sugiro que reveja a condição declarada ou a mensagem enviada e, caso seja preciso, re-leia essa aula:

 

Editado por Poccnn
Link para o comentário
Compartilhar em outros sites

if getPlayerLevel(cid) < 20 then
      doPlayerSendTextMessage(cid, 25,"Você tem nível menor que 20")
    elseif getPlayerLevel(cid) == 20 then
      doPlayerSendTextMessage(cid, 25,"Você tem nível 20")
    else 
      doPlayerSendTextMessage(cid, 25,"Você tem nível maior que 20")
end

 

E agora ta certo ?

Editado por Nildson
Link para o comentário
Compartilhar em outros sites

if not isPremium(cid) or getPlayerLevel(cid) <= 49  then

doPlayerSendTextMessage(cid,22,"Este item só pode ser usado por jogadores VIP lvl 50+")

return false

end --- nao sei se é pra fazer com print ou sendText então fiz com sendText

   --------------------------------------------------------------------------------------------------ou----------------------------------------------------------------------------------------------------
if getPlayerLevel (cid) < 50 then --- uma duvida esse espaço antes do (cid) interfere no script? eu sempre faço isso e como sei q faço isso sempre no final eu verifico
doPlayerSendTextMessage (cid, 22," você ainda não alcançou o nível 50 e nao tem direiro a nenhum premio ")

     alseif getPlayerLevel(cid) >= 50 then

       doPlayerSendTextMessage(cid, 22,"parabéns você ultrapassou o nível 50 e receberá um premio pela façanha")

         doPlayerAddItem(cid,itemid,quantidade)

return true

end   ---- eu sempre uso esses return true ou false talvez nem precise gostaria de uma dica a respeito de se precisa ou não.
acredito que no primeiro exemplo se faz necessário (ajuda no erro la rsrsrs)


outra duvida eu tb as vezes deixo minusculas algumas letras tipo do
playerAdditem(cid) essas letras minusculas gera erro? é obrigatório maiúsculo ou é apenas mais arrumado?

Editado por wevertonvrb
Link para o comentário
Compartilhar em outros sites

20 horas atrás, Nildson disse:

if getPlayerLevel(cid) < 20 then

      doPlayerSendTextMessage(cid, 25,"Você tem nível menor que 20")

    elseif getPlayerLevel(cid) == 20 then

      doPlayerSendTextMessage(cid, 25,"Você tem nível 20")

    else 

      doPlayerSendTextMessage(cid, 25,"Você tem nível maior que 20")

end

 

E agora ta certo ?

 

Certíssimo. Faça agora com mais condições e mescle uma condição junto com outra condição usando and, or e not.

 

9 horas atrás, wevertonvrb disse:

--- nao sei se é pra fazer com print ou sendText então fiz com sendText

O script é seu, tu faz como quiser.

 

9 horas atrás, wevertonvrb disse:

-- uma duvida esse espaço antes do (cid) interfere no script? eu sempre faço isso e como sei q faço isso sempre no final eu verifico

 

Não tem problema algum. Na ora da execução do código a formatação é removida e fica apenas uma linha de execução desse código. 

 

9 horas atrás, wevertonvrb disse:

alseif getPlayerLevel(cid) >= 50 then

Cuidado com erro de digitação.

 

9 horas atrás, wevertonvrb disse:

-- eu sempre uso esses return true ou false talvez nem precise gostaria de uma dica a respeito de se precisa ou não.

acredito que no primeiro exemplo se faz necessário (ajuda no erro la rsrsrs)

 

Isso é relativo a source da distro. Alguns requerem que seja retornado algum valor verdadeiro, outros não. Irei tratar melhor essa questão quando entrarmos nas aulas sobre tfs.

 

9 horas atrás, wevertonvrb disse:

outra duvida eu tb as vezes deixo minusculas algumas letras tipo doplayerAdditem(cid) essas letras minusculas gera erro? é obrigatório maiúsculo ou é apenas mais arrumado?

Lua é sensível a letras minúsculas para maiúsculas; ou seja, ela diferencia maiúsculas de minúsculas. 

Se existe uma função chamada isLua e tu chamar islua, ela não irá encontra-lo pois ele diferencia o "L" maiúsculo do "l" minúsculo.

Link para o comentário
Compartilhar em outros sites

  • Poccnn featured e pinned this tópico

if isPlayer(cid) then

if getPlayerLevel(cid) >= 1 and getPlayerLevel(cid) <= 100 then

doPlayerSendTextMessage(cid, 25,"Você tem nível entre um e cem")

elseif getPlayerLevel(cid) > 100 then

doPlayerSendTextMessage(cid, 25,"Seu nivel é maior que 101")

end

else

print("Nao é player")

end

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, rorix disse:

if isPlayer(cid) then

if getPlayerLevel(cid) >= 1 and getPlayerLevel(cid) <= 100 then

doPlayerSendTextMessage(cid, 25,"Você tem nível entre um e cem")

elseif getPlayerLevel(cid) > 100 then

doPlayerSendTextMessage(cid, 25,"Seu nivel é maior que 101")

end

else

print("Nao é player")

end

 

 

Ficou certo as sentenças,  única coisa que poderia mudar é a mensagem que diz que o player tem level maior que 101 o que pode não ser verdade; ele pode ter level 101 e cair no bloco do elseif.

 

Outra coisa é que tu poderia ter unido a condição de se é player junto com o outro if; mas ai depende muito do que tu queira fazer.

Já usou também as palavras or e not em condições? 

 

Link para o comentário
Compartilhar em outros sites

if getPlayerLevel(cid) >= 2 and getPlayerLevel(cid) <= 20 then
        doSendMagicEffect(getThingPos(cid), 40)
        doPlayerSendTextMessage(cid, 25,"Parabéns você fez a quest iniciante do nivel 2 ao 20")
    elseif getPlayerLevel(cid) == 21 or getPlayerLevel(cid) >= 22 then
        doSendMagicEffect(getThingPos(cid), 41)
        doPlayerSendTextMessage(cid, 25,"Você não pode fazer mais esta quest por estar nível superior ao 21")
    else
        doSendMagicEffect(getThingPos(cid), 39)
        doPlayerSendTextMessage(cid, 25,"Você tem nível 0, upe até nível 1 e retorne aqui")
end

 

Bom, eu entendi sobre o exercício e adicionei o and e or que o senhor pediu, más tenho uma dúvida, sei que quando adiciona not, mesmo quando a função é correta ela se torna falsa, más quando fui adicionar um if not ela não funcionava no tíbia, em vez de por o if not coloquei o else que é praticamente quase a mesma coisa, obrigado pela suas aulas, eu estou aprendendo bastante do básico do script e quero que continue cada vez mais e me incentivo mais ainda quando tem aquela notificação de nova aula.  :FeelsGood-min:

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Nildson disse:

más tenho uma dúvida, sei que quando adiciona not, mesmo quando a função é correta ela se torna falsa, más quando fui adicionar um if not ela não funcionava no tíbia, em vez de por o if not coloquei o else que é praticamente quase a mesma coisa

 

Como assim não funcionou no tíbia? E o que tem haver o tibia com o script? 

O not é uma negação de uma condição e o else não requer condição alguma, portanto não são sequer parecidas.

Tu tentou por o not nesse script ai?

 

Link para o comentário
Compartilhar em outros sites

58 minutos atrás, Poccnn disse:

 

Como assim não funcionou no tíbia? E o que tem haver o tibia com o script? 

O not é uma negação de uma condição e o else não requer condição alguma, portanto não são sequer parecidas.

Tu tentou por o not nesse script ai?

 

tudo bem, me desculpe se interpretei de maneira errada, mas, sim tentei adicionar ao script.

 

o script funciona só nas partes de elseif, más só não funciona na parte do if not.

 

 

 

if not getPlayerLevel(cid) == 1 then

        doSendMagicEffect(getThingPos(cid), 39)

        doPlayerSendTextMessage(cid, 25,"Você tem nível 0, upe até nível 1 e retorne aqui")

    elseif getPlayerLevel(cid) >= 2 and getPlayerLevel(cid) <= 20 then

        doSendMagicEffect(getThingPos(cid), 40)

        doPlayerSendTextMessage(cid, 25,"Parabéns você fez a quest iniciante do nivel 2 ao 20")

    elseif getPlayerLevel(cid) == 21 or getPlayerLevel(cid) >= 22 then

        doSendMagicEffect(getThingPos(cid), 41)

        doPlayerSendTextMessage(cid, 25,"Você não pode fazer mais esta quest por estar nível superior ao 21")

 

end

 

 

se tiver alguma coisa errada me explique por favor ...

Editado por Nildson
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...