Pivizz 1 #1 Posted July 14, 2009 (edited) 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. [spoiler=code] --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. [spoiler=code] --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. [spoiler=code] --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: [spoiler=code] 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. Observações Não fiz esse tutorial para questionar qualquer script ou usuário da OTNet. Se ofendi alguém, desculpe-me, com certeza não foi minha intensão. Edited January 24, 2011 by Mickfern 1 lukioloko reacted to this Share this post Link to post
Mock 32 #2 Posted July 16, 2009 Comentario:Quanto tempo nao vejo um tutorial sobre scripting. sempre é: meu monstro novo, minha magia nova, um tile que some o player, uma mana rune, as pessoas ocnfundem demais tutorial com donwload, isso e um tutorial! desculpe a demora por avaliar foi que essa seção passou 2 semanas inativa e de uma semana pra outra decidiram postar algo. Aprovado & Movido Share this post Link to post
Lwkass 1 #3 Posted July 16, 2009 Realmente, alguns scripts fica muito dificil de se entender por causa da falta de organização de alguns, se todos os scripts usassem essa ideia... ficaria mais fácil o entendimento. Share this post Link to post
Kydrai 0 #4 Posted July 16, 2009 O script revisado é bom pq não é tão limitado como o primeiro, e como vc disse facilita futuras edições. Assim não ficamos com um script exclusivo pra um único "objeto". Ja a organização tem que ser obrigatória em todos scripts, e quem não organiza assim é bom começar. Muito bom o tutorial Share this post Link to post
Mock 32 #5 Posted July 16, 2009 O script revisado é bom pq não é tão limitado como o primeiro, e como vc disse facilita futuras edições. Assim não ficamos com um script exclusivo pra um único "objeto". Ja a organização tem que ser obrigatória em todos scripts, e quem não organiza assim é bom começar. Muito bom o tutorial Ja a organização tem que ser obrigatória em todos scripts, e quem não organiza assim é bom começar. apoio Share this post Link to post
Pivizz 1 #6 Posted July 16, 2009 I agree Organização é tudo Obrigado pelos elogios Share this post Link to post
Jonny249 0 #7 Posted July 16, 2009 Pivizz Muito bom esse tutorial. Não ter organização as vezes atrapalha si próprio. Então tem que sempre fazer uma organização, E de preferência uma que voce sempre use e consiga compreender tudo com sua organização. Só uma coisa cara. Voce boto ali nos ends e nao sei em qual outros lugares. "Fechando a comparação..." Não seria muito uma comparação o nome, seria mesmo é CONDIÇÃO. Porque, SE fosse comparação, ENTÃO não teria o uso nesse sentido dessas palavras em negrito Falous By Jonny. Share this post Link to post
Morenoo 0 #8 Posted July 16, 2009 Tutorias nunca sao demais se bem desenvolvidos, com certeza este ajudou alguns. Share this post Link to post
Pivizz 1 #9 Posted July 16, 2009 Jonny249 Obrigado pela sugestão, mas você tem certeza disso? Eu não consegui entender direito o que você quis dizer. Desculpa... Mock Ah, quanto a tua mensagem ali, relaxa pela demora. Eu achei que nem ia ser aprovado esse tutorial, hehe. Eu também não sabia que tu podia aprovar nessa seção, se não tinha te comunicado. Obrigado Abraço Share this post Link to post
Jonny249 0 #10 Posted July 16, 2009 Sim sim, tenho certeza! ^^ O nome disso seria uma condição. Deixa eu dar um exemplo... "if = se" em ingles certo, e "then = então" não é? Exemplo: Se eu tiver dinheiro, então eu vou comprar uma pizza. Não é uma condição? Eu estou dependendo de ter dinheiro para comprar uma pizza, então não é exatamente uma comparação. Para eu comprar uma pizza existe uma condição de eu ter dinheiro. Espero ter ajudado. By jonny. Share this post Link to post
Pivizz 1 #11 Posted July 16, 2009 Hum... Tá, saquei Obrigado, vou arrumar Share this post Link to post
Undead Slayer 0 #12 Posted July 16, 2009 Ja a organização tem que ser obrigatória em todos scripts, e quem não organiza assim é bom começar.apoio Apoia mas n organiza neh malandro kkkkkk brinks Bom o tutorial, vai ajudar mtos. Esses pequenos errinhos resultam em grandes problemas. Gostei msm do tuto. Vlw por contribuir... Share this post Link to post
SirDeath 0 #13 Posted July 19, 2009 Organisação é fundamental....Pois como foi dito anteriormente não todos que possuem pleno dominio da programação em Lua. Isso ajuda muito a quem quer aprender. Cya Share this post Link to post
Mock 32 #14 Posted July 21, 2009 @undead nao organizava agora oranizo ._. Share this post Link to post
Conde2 0 #16 Posted July 23, 2009 Cara muito bom seu tutorial, ta de parabens. Mas cara uma coisa que eu não entendi foi essa parte: quebras de linhas desnecessárias. Você tirou quebra de linhas que ajudavam a organizar melhor o code. Eu gosto de colocar enters em alguns lugares para entender melhor o code. Para cada "assunto" eu separo com enter. De resto eu organizo igual vc =D Cada um tem seu jeito, mais o "melhor jeito" acho que é esse. Share this post Link to post
Pivizz 1 #17 Posted July 23, 2009 Concordo com cada um tem seu melhor jeito, mas nesse script há quebras de linhas desnecessárias. No seu, no meu ou em qualquer outro, pode haver quebra de linhas necessárias. E são essas, pra separar algumas partes do script. Share this post Link to post
Eventide 7 #18 Posted July 23, 2009 (edited) Poderia ter explicado melhor a identação, o povo mais iniciante não vai sacar o porque disso. no resto, está de parabéns, a tempos não que tem um tutorial legal de scripting! Edited July 23, 2009 by Eventide Share this post Link to post
gugu995 0 #19 Posted July 25, 2009 bom tuto conserteza vai ajuda muita gnt Muito bom mesmo Share this post Link to post
jeferson patrick 0 #20 Posted July 26, 2009 Show de bola eu ja ate entedi mais pq eu fazia script assim para os outro enteder um pouco mais vlw ai Share this post Link to post