Postado Novembro 5, 2012 12 anos Metodologia de um script O que será tratado Organização de um script. Compreensão de um script. Tornando o script fácil para edição. Meu objetivo com este tutorial. Tenho como objetivo facilitar a compreensão de muitos scripts. Sabemos, todos nós, que muita gente apenas copia os scripts para seu próprio servidor e não sabe nem ao menos editar os IDs, ou as posições, conforme sua necessidade e disponibilidade do script. Quero, também, propor que os scripters que nos disponibilizam scripts de sua autoria, organizassem melhor os scripts para que os iniciantes tivessem uma base para começar no mundo de lua scripting. Organizando para melhor compreensão Muitas vezes nos deparamos com scripts horríveis. Não apenas de qualidade ou conteúdo no resultado, mas também de organização do próprio script. Vou pegar um script de tamanho médio, já criado por um usuário da OTNet. Mostrar conteúdo oculto --Action 100% by Hancock-- local arvores = 2700 local arvmorta = 2719 function onUse(cid, item, frompos, item2, topos) if item2.itemid == arvores then chance = math.random(1,10) if chance == 1 then doPlayerAddItem(cid,9805,1) doSendMagicEffect(topos,12) doTransformItem(item2.uid, arvmorta) doPlayerSendTextMessage(cid,22,"Você cortou um pedaço de madeira!") elseif chence == 2 then doRemoveItem(item.uid,1) doCreatureAddHealth(cid, -20) doPlayerSendTextMessage(cid,22,"Seu machado quebrou e você se machucou.") elseif chance > 3 then doPlayerSendTextMessage(cid,22,"Nada aconteceu.") end end end Agora, pegaremos esse mesmo script e apenas adicionaremos uns espaços e removeremos quebras de linhas desnecessárias. Mostrar conteúdo oculto --Action 100% by Hancock-- local arvores = 2700 local arvmorta = 2719 function onUse(cid, item, frompos, item2, topos) if item2.itemid == arvores then chance = math.random(1,10) if chance == 1 then doPlayerAddItem(cid,9805,1) doSendMagicEffect(topos,12) doTransformItem(item2.uid, arvmorta) doPlayerSendTextMessage(cid,22,"Você cortou um pedaço de madeira!") elseif chence == 2 then doRemoveItem(item.uid,1) doCreatureAddHealth(cid, -20) doPlayerSendTextMessage(cid,22,"Seu machado quebrou e você se machucou.") elseif chance > 3 then doPlayerSendTextMessage(cid,22,"Nada aconteceu.") end end end Apenas com essa pequena organização, o script não ficou um pouco mais fácil de ser compreendido? Compreensão de todas as linhas do script Pegamos, então, o mesmo script como exemplo. Você consegue entender qual a função de cada linha do script? Consegue localizar um erro que impossibilitaria uma das features do script? Pois bem, é o que faremos agora. Mostrar conteúdo oculto --Action 100% by Hancock-- Tudo o que está na mesma linha após os dois hífens são comentários. local arvores = 2700 -- Foi definida a variável arvores como 2700 e posteriormente será comparada ao ID do item. local arvmorta = 2719 -- Foi definida a variável arvmorta como 2719 e posteriormente utilizada para transformar o item na definição dessa variável. function onUse(cid, item, frompos, item2, topos) -- Começa a função quando o player utilizar. O que está entre os parênteses, são as variáveis que a função lhe da. Sem elas, não haveria a possibilidade de tanta diversidade de scripts. if item2.itemid == arvores then -- Está sendo comparado o ID do item2 (o target do "use with...") com a variável arvores. chance = math.random(1,10) -- Foi criada a variável global (com a intensão de ser local) chance. O valor dela é um número aleatório entre 1 e 10. if chance == 1 then -- Aqui é a comparação da variável chance com o número 1. Se o resultado da aleatoriedade for igual a 1, acontecerá o que há abaixo. doPlayerAddItem(cid,9805,1) -- É utilizado uma função para adicionar um item ao cid (jogador), com ID 9805 e quantidade 1. doSendMagicEffect(topos,12) -- É enviado o efeito de número 12 para a posição topos, onde o item foi usado. doTransformItem(item2.uid, arvmorta) -- O item2 é transformado no ID resultado da variável arvmorta, 2719. doPlayerSendTextMessage(cid,22,"Você cortou um pedaço de madeira!") -- Uma mensagem de classe 22 é enviada ao jogador cid. elseif chence == 2 then -- Opa! Localizamos o erro. Explicarei mais pra frente. Aqui a variável chence é comparada ao número 2. doRemoveItem(item.uid,1) -- É removido o item (o que você clicou para dar "use with..."). doCreatureAddHealth(cid, -20) -- É "adicionado" -20 de vida ao jogador cid. doPlayerSendTextMessage(cid,22,"Seu machado quebrou e você se machucou.") -- Novamente a função de enviar mensagem. elseif chance > 3 then -- É verificado se a variável chance tem valor maior que 3. doPlayerSendTextMessage(cid,22,"Nada aconteceu.") -- Novamente, a mesma função de enviar mensagem. end -- Fechando a condição "if chance == 1 then". end -- Fechando a condição "if item2.itemid == arvores then". end -- Fechando a função onUse. Foi fácil de entender, não? Se não foi, deveria ter sido, por que esse é um script de fácil compreensão. Agora, vamos localizar os erros. Linha 6: chance = math.random(1,10) Essa variável não foi declarada como local. O correto seria: local chance = math.random(1,10). Linha 12: elseif chence == 2 then A variável chence não foi definida anteriormente, então, não há chance dessa opção acontecer. Certamente um erro de digitação. Linha 16: elseif chance > 3 then O erro é que, se a variável chance resultar 3, não encaixaria em nenhum dos casos do script. O correto seria: elseif chance >= 3 then; ou: elseif chance > 2 then.[*]Tornando o script fácil para futuras edições Esse script abaixo é como ficaria com maior organização, revisado e, feito para facilitar futuras edições: Mostrar conteúdo oculto local arvores = {2700, 2701} -- Possível adicionar mais IDs. local arvmorta = {2719, 2701} -- Possível adicionar mais IDs. local chance = math.random(1,10) local addID = {9805} -- Possível adicionar mais IDs. function onUse(cid, item, frompos, item2, topos) if isInArray(arvores, item2.itemid) then if chance == 1 then doPlayerAddItem(cid,addID[math.random(1,#addID)],1) doSendMagicEffect(topos,12) doTransformItem(item2.uid, arvmorta[math.random(1, #arvmorta)]) doPlayerSendTextMessage(cid,22,"Você cortou um pedaço de madeira!") elseif chance == 2 then doRemoveItem(item.uid,1) doCreatureAddHealth(cid, -20) doPlayerSendTextMessage(cid,22,"Seu machado quebrou e você se machucou.") else doPlayerSendTextMessage(cid,22,"Nada aconteceu.") end end return TRUE end O script estaria pronto para ser postado para outro fanático por OTServer compreender e editar. O resultado é o mesmo, mas o modo de compreensão é outro. Talvez um mais difícil por causa das tabelas. Caso você realmente ache isso, aconselho-lhe a ler um tutorial sobre tabelas. Conclui-se Se todos os scripts que fossem postados tivessem um padrão melhor de organização, o nível de scripting de muitos iniciantes seria maior, pois, desse modo, compreenderiam com uma maior facilidade e rapidez o que as vezes é indecifrável. Creditos : Pivizz Contato; god.marinii ryzor@tibiaking.com
Postado Novembro 5, 2012 12 anos Muito bacana essa aula, a estética do código é tão importante quanto o próprio. Em 05/11/2012 em 16:28, WarW0lf disse: Bem legal, poderá ajudar iniciantes em Scriptter. Script Citar Origem: Wikipédia, a enciclopédia livre. Linguagem de script (também conhecido como linguagem de scripting, ou linguagem de extensão) são linguagens de programação executadas do interior de programas e/ou de outras linguagens de programação, não se restringindo a esses ambientes. As linguagens de script servem para estender a funcionalidade de um programa e/ou controlá-lo, acessando suaAPI e, são frequentemente usadas como ferramentas de configuração e instalação em sistemas operacionais (Shell script), como por exemplo, em alguns sistemas operacionais da famíliaLinux, que usam a linguagem bash. São também frequentemente usadas em jogos, como por exemplo, o jogo Impossible Creatures, que usa a linguagem Lua para controlar as ações dos personagens e o ambiente de batalha. Todas as linguagens de script são linguagens interpretadas, porém, nem todas as linguagens interpretadas são linguagens de script. Os programas escritos em linguagens de script são, normalmente, referidos como scripts. Scripter Citar É a Pessoa que produz o script. -"Supra Omnes Lux Lucis" - Acima de todos brilha a Luz -
Postado Novembro 12, 2012 12 anos Para iniciantes ajuda bastante, boa sorte.. Em breve posto os pokemons de Hoenn para download !!
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.