Oneshot 732 Postado Outubro 31, 2011 Share Postado Outubro 31, 2011 (editado) AULA II LÓGICA, ALGORITMO E OPERADORES. Na aula passada, você aprendeu qual a linguagem usada nos servidores, onde surgiu a programação Lua, o que é scripting e como se tornar um scripter. Nessa segunda aula, você irá aprenderá a pensar como um programador, irá aprender a transformar seu raciocínio lógico em uma sequência de instruções e finalmente, com a apresentação do que são operadores, você irá montar um script básico, mas eficaz. Lógica e Algoritmo Toda linguagem de programação, inclusive a Lua, segue uma certa lógica para funcionar corretamente. A isso, damos o nome de lógica de programação. Programação lógica é um paradigma de programação que faz uso da lógica matemática. John McCarthy, em 1958. foi o primeiro a publicar uma proposta de uso da lógica matemática para programação. Wikipédia Para fazer um script em Open Tibia não é diferente, você precisa criar uma lógica que relacione sua ideia e o script, uma sequência de instruções que, depois, se torne o script em si. Isso é um algoritmo. Um algoritmo é uma sequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito e com uma quantidade de esforço finita. O conceito de algoritmo é frequentemente ilustrado pelo exemplo de uma receita culinária, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iterações) ou necessitar de decisões (tais como comparações ou lógica) até que a tarefa seja completada. Um algoritmo corretamente executado não irá resolver um problema se estiver implementado incorretamente ou se não for apropriado ao problema. Wikipédia Pegaremos agora um exemplo bem simples de funcionamento em um servidor - Uma pedra mágica que usada, verifique o sexo do jogador e troque para o sexo oposto. Quando o item for usado, então: Verifique se o(a) jogador(a) é do sexo feminino Se sim, então: Troque o sexo para masculino Remova o item Se não, então: Troque o sexo para feminino Remova o item Terminada a verificação do sexo do(a) jogador(a) Terminada a execução do item Um algoritmo como esse acima, também pode ser montado na forma de um gráfico, veja abaixo: Algoritmos são uma grande ajuda para os scripters. Eu, por exemplo, sempre monto uma imagem parecida com essa quando o script que vou fazer é um tanto mais elaborado. Agora, com a apresentação dos conceitos abaixo, você irá transformar esse algoritmo em um script funcional. Operadores aritméticos e relacionais. Nessa parte da aula, você irá aprender um pouco mais sobre os operadores aritméticos, aqueles bem conhecidos das suas aulas de Matemática. Os operadores relacionais que comparam coisas (hm...). Os operadores aritméticos, como você deve bem conhecer, fazem operações de cálculo simples. Creio que você os conhece. Adição (+) Subtração (-) Multiplicação (*) Divisão (/) Você pode testar o funcionamento dos operadores com um comando print() e alguns números, veja abaixo: print(4+7) -- Retorna 11 print(7-4) -- Retorna 3 print(5*4) -- Retorna 20 print(4/4) -- Retorna 1 Os operadores relacionais são muito usados também no âmbito da matemática. Na programação, eles comparam dois tipos de objetos e retornam apenas valores true e false. Os operadores relacionais são listados abaixo: == ~= > < >= <= O operador de igualdade (==) compara o tipo dos argumentos envolvidos, caso o tipo seja diferente, será retornado false. Caso o tipo seja igual, ele compara o valor dos argumentos e novamente, se o valor é diferente, é retornado false, caso os dois valores sejam iguais, será retornado true. O operador de diferença (~=) é simplesmente a negação do operador de igualdade (==). Ou seja, ele retornará true para tipos ou valores diferentes e false para tipos/valores iguais. Os operadores de ordem (>, <, >=, <=) funcionam simples como na matemática. Se os dois operadores são números, então eles são comparados como tais. > - Maior < - Menor >= - Maior ou igual <= - Menor ou igual Eles só irão retornar true, caso a comparação seja realmente verdadeira e false caso não seja. Veja abaixo: 5 > 4 -- Retorna true pois realmente 5 maior que 4. 2 < 3 -- Retorna true pois realmente 2 menor que 3. 40 <= 10 -- Retorna false, 40 não é menor ou igual a 10. 200 >= 300 -- Retorna false, uma vez que 200 não é maior ou igual a 300. Abaixo você irá aprender sobre os operadores de controle, eles criam condições e só executam algo associado a eles caso a condição seja verdadeira. Estou falando de: if, elseif e else. Operadores de Controle A estrutura de um operador de controle pode retornar qualquer valor. Tanto os valores false e nil são considerados como falsos e todos os outros valores diferentes são considerados como verdadeiros. A estrutura de controle criada a partir de um operador, só executa o bloco de código associado se o valor retornado pela condição seja verdadeiro. Existem cinco operadores de controle: if, elseif, else, repeat e until. Os dois últimos não serão explicados nessa aula. O operador if significa 'se', remete a uma estrutura sintática e condicional, você já deve ter visto uma sintaxe do tipo: Se você estudar muito então será recompensado amanhã. Vou grifar em vermelho uma parte muito importante dessa frase e em azul seu bloco: Se você estudar muito então será recompensado amanhã. Veja que para a parte em azul ocorrer, então a condição tem que "retornar" verdadeiro, ou seja você tem que estudar muito. Na programação Lua não é diferente, não. O bloco azul é simplesmente todo o código que será executado se a condição relacionada ao if retornar verdadeiro: if true then bloco end Pois é, para algo retornar verdadeiro, você deve fazer uma comparação, usando nada mais que os operadores relacionais. Note que: O if precisa de um then, significa então. Ele fecha a estrutura sintática do if, nunca esqueça dele. E também o end que fecha a verificação do if. 1 == 1 2 == 2 3 >= 3 4 <= 4 getPlayerMoney(cid) >= 40 Mas para toda condição, existe uma chance de ocorrer algo contrário, certo? Por exemplo, se o camarada não tivesse estudado, nada ocorreria? Na programação, nós tratamos dessa sintaxe com o else. O else é simplesmente a negação do if, se a construção do operador if retorna falso, então o que estiver atribuído ao else será executado. Vamos completar a frase: Se você estudar muito então será recompensado amanhã. Caso você não estude, coisas ruins podem acontecer. E no nosso código ele pode ficar assim: if false then bloco else bloco2 end Note que: O else não precisa de then. Como ele é a negação do if, ele "meio que" se aproveita do then e end do if. E por último, temos o controlador Elseif, ele é bem simples, é usado quando você tem muitos outros blocos para outras várias condições. Mas os blocos ligados ao elseif só irão ser executados quando o bloco do if retornar falso, parecido com o funcionamento do else. Se eu acordar na hora, irei tomar banho e ir para escola. Já se eu acordar mais cedo, irei dormir um pouco mais. Juntando tudo em um código de simples entendimento: if false then bloco elseif true then bloco2 end Note que: O elseif precisa de then igual ao if, mesmo que seja auxiliar ao if, ele é uma condição totalmente diferente. Ele só não precisa do end. Para finalizar a aula, quero apresentar dois operadores lógicos muito usados com operadores de controle, são eles: and e or. Os dois são usados quando você precisa fazer múltiplas verificações em uma estrutura condicional. A diferença é básica: O operador and exige que todas essas condições retornem verdade para executar o bloco, já o operador or exige que uma apenas seja verdade. Eu costumo usar muito o and quando vejo essa situação abaixo: if true then if true then bloco end end if true and true then bloco end E uso o operador or, quando vejo que um elseif foi empregado para executar um mesmo bloco que um if. if false then print(1+1) elseif true then print(1+1) end if false or true then print(1+1) end Finalizamos por aqui Será que vocês conseguem fazer a "pedra do sexo" com os conhecimentos aprendidos aqui? Vou deixar algumas instruções, boa sorte! O sexo feminino é representado por 0 e o sexo masculino é representado por 1 getPlayerSex(cid) retorna o sexo do jogador. doPlayerSetSex(cid, sex) muda o sexo do jogador conforme o valor colocado no parâmetro sex. function onUse(cid, item, fromPosition, itemEx, toPosition) é a função de usar um item, deve ser finalizada com end. Só clique na resposta, se você conseguiu fazer. function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerSex(cid) == 0 then doPlayerSetSex(cid, 1) else doPlayerSetSex(cid, 0) end doRemoveItem(item.uid, 1) return true end Um abraço, até a próxima aula. Editado Novembro 4, 2011 por Oneshot Link para o comentário Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Outubro 31, 2011 Share Postado Outubro 31, 2011 Nossa, eu achei que a outra aula estava boa, mas essa superou com certeza. Pelo visto você irá criar uma série destes tutoriais, certo? No aguardo, parabéns. Até. Link para o comentário Compartilhar em outros sites More sharing options...
SkyDangerous 395 Postado Outubro 31, 2011 Share Postado Outubro 31, 2011 Aee. Já estou lendo e treinando Vlw Você vai salvar vidas :> Link para o comentário Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Outubro 31, 2011 Autor Share Postado Outubro 31, 2011 Sim, irei criar uma série de tutoriais. Link para o comentário Compartilhar em outros sites More sharing options...
Fir3element 185 Postado Outubro 31, 2011 Share Postado Outubro 31, 2011 bacana o tutorial function onUse(cid) return doPlayerSetSex(cid, {[0]=1, [1]=0}[getPlayerSex(cid)]) end n sei se isso funciona kk Link para o comentário Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Novembro 1, 2011 Share Postado Novembro 1, 2011 Cara, você poderia fazer um tópico linkando todos os tutoriais já prontos, ai fixam ele e fica mais fácil. Espero que continue com os tutoriais Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Couto 293 Postado Novembro 1, 2011 Share Postado Novembro 1, 2011 Aprovado, Parabéns, Continue Assim! Movido para a Seção Correta! Link para o comentário Compartilhar em outros sites More sharing options...
Mulizeu 86 Postado Novembro 1, 2011 Share Postado Novembro 1, 2011 (editado) que legal veii! aki o meu! function onUse(cid,item,position,itemEx,fromPosition) local remove = true if getPlayerSex(cid) == 0 then doPlayerSetSex(cid,1) else doPlayerSetSex(cid,0) return TRUE end if remove == true then doPlayerRemoveItem(cid.item.uid,1) end end Editado Abril 10, 2012 por mulizeu Link para o comentário Compartilhar em outros sites More sharing options...
Eskylo 175 Postado Novembro 5, 2011 Share Postado Novembro 5, 2011 que legal veii! aki o meu! function onUse(cid, item, position, ItemEx, toposition) if getPlayerSex(cid) == 0 then doPlayerSetSex(cid,1) doRemoveItem(item.uid) else doPlayerSetSex(cid,0) doRemoveItem(item.uid) end end o seu está certo, vai funcionar, mas só uma dica, como todos os casos vai remover o item entao fica melhor se vc colocar p remover depois do end do if, ai vai precisar colocar uma vez só Link para o comentário Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Novembro 5, 2011 Autor Share Postado Novembro 5, 2011 Muito boa a sua observação, Eskylo. Link para o comentário Compartilhar em outros sites More sharing options...
Mulizeu 86 Postado Novembro 5, 2011 Share Postado Novembro 5, 2011 (editado) Eu sempre fasso alguns equivocos em meus scripts...oakasao mais e bom sempre ter alguem para observar e nos ajudar a concertar nossas falhas, obg pela DICA..na proxima vou prestar mais atenção! Editado Novembro 5, 2011 por mulizeu Link para o comentário Compartilhar em outros sites More sharing options...
PostadorHunter 99 Postado Dezembro 23, 2011 Share Postado Dezembro 23, 2011 Eu n consigui fazer. Link para o comentário Compartilhar em outros sites More sharing options...
Avuenja 253 Postado Dezembro 28, 2011 Share Postado Dezembro 28, 2011 tbm naum consegui fazer =(! Link para o comentário Compartilhar em outros sites More sharing options...
Erimyth 73 Postado Dezembro 28, 2011 Share Postado Dezembro 28, 2011 Poww eu continuo aprendendo algumas coisas na aula do Oneshot.. parabens pelo trabalho eu Consegui fazer xD Vlw por compartilhar a sabedoriiaa .. levando Rep + meu Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados