Ir para conteúdo
Entre para seguir isso  
Pivizz

Metodologia de scripting

Recommended Posts

Pivizz    1
Pivizz

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.

Editado por Mickfern

Compartilhar este post


Link para o post
Mock    32
Mock

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.

 

Aprovadoico_aprovado.png & Movidoicon_movido.giffechado22xnux7.gif

 

mock.png

Compartilhar este post


Link para o post
Lwkass    1
Lwkass

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.

Compartilhar este post


Link para o post
Kydrai    0
Kydrai

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 ;)

Compartilhar este post


Link para o post
Mock    32
Mock
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 :D

Compartilhar este post


Link para o post
Pivizz    1
Pivizz

I agree

Organização é tudo :P

Obrigado pelos elogios

Compartilhar este post


Link para o post
Jonny249    0
Jonny249

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.

Compartilhar este post


Link para o post
Morenoo    0
Morenoo

Tutorias nunca sao demais se bem desenvolvidos, com certeza este ajudou alguns.

Compartilhar este post


Link para o post
Pivizz    1
Pivizz

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

Compartilhar este post


Link para o post
Jonny249    0
Jonny249

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.

Compartilhar este post


Link para o post
Pivizz    1
Pivizz

Hum... Tá, saquei

Obrigado, vou arrumar :)

Compartilhar este post


Link para o post
Undead Slayer    0
Undead Slayer
Ja a organização tem que ser obrigatória em todos scripts, e quem não organiza assim é bom começar.

apoio :D

 

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...

Compartilhar este post


Link para o post
SirDeath    0
SirDeath

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

Compartilhar este post


Link para o post
Mock    32
Mock

@undead

nao organizava agora oranizo ._.

Compartilhar este post


Link para o post
fezao    0
fezao

Bom Tuto Ajudo Ty

Compartilhar este post


Link para o post
Conde2    0
Conde2

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.

Compartilhar este post


Link para o post
Pivizz    1
Pivizz

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.

Compartilhar este post


Link para o post
Eventide    7
Eventide

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!

Editado por Eventide

Compartilhar este post


Link para o post
gugu995    0
gugu995

bom tuto conserteza vai ajuda muita gnt :D

 

Muito bom mesmo

Compartilhar este post


Link para o post
jeferson patrick    0
jeferson patrick

Show de bola eu ja ate entedi mais pq eu fazia script assim para os outro enteder um pouco mais vlw ai

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×