DICAS
Para encurtar/embelezar seus scripts.
INTRODUÇÃO
Fala aê, beleza, galera do TibiaKing? Estava aqui eu sem fazer nada, quando pensei em criar uma coletânea de dicas para os scripters iniciantes, avançados e etcétera.
Eu já naveguei muito nessas águas e já vi muitos scripts que podiam ser "escritos" de uma maneira melhor, fazendo a mesma função e estando mais bonitos e, então, tenho algumas dicas para vocês nesse assunto.
Não vou enrolar muito não, logo ali abaixo, você já começa a ler essas dicas
DICA NÚMERO 1 - USO DE MATH.MAX() E MATH.MIN()
Essa é uma dica bem simples e básica, sabe quando você quer comparar uma variável local com um número e se essa variável ter valor maior (ou menor) que o número, você declarar que a tal variável terá o valor do número?
Vamos para um exemplo:
local k = 2
if k < 3 then
k = 3
end
Em vez de usar três linhas no seu script, porque não usar uma função integrada que faz isso e dá aquele aspecto limpo no script, essa função é a math.max().
O exemplo acima ficaria assim:
local k = 2
math.max(k, 3)
Há também uma função parecida com a math.max() e que serve para o caso da variável ter um valor maior que o proposto. Ou seja:
local k = 2
if k > 1 then
k = 1
end
Essa função é a math.min()
local k = 2
math.min(k, 1)
Fácil, não é? Uma explicação básica para as duas funções abaixo:
math.max() - retorna o maior valor entre os dois argumentos
math.min() - retorna o menor valor entre os dois argumentos
DICA NÚMERO 2 - USANDO LOOPS
Sabe aquele momento que você está programando seu script de quest mais incrível e nesse script você vai precisar colocar para "summonar" vários tipos de criaturas e repetidas vezes? Olhe esse exemplo:
doSummonCreature("Troll", position)
doSummonCreature("Troll", position)
doSummonCreature("Troll", position)
doSummonCreature("Troll", position)
doSummonCreature("Orc", position)
doSummonCreature("Orc", position)
doSummonCreature("Orc", position)
doSummonCreature("Wolf", position)
doSummonCreature("Wolf", position)
Veja, você acabou de usar 9 linhas do seu script, ocupando o espaço com uma mesma função repetidas vezes, alguém que bate os olhos num script com esse bloco, vai ficar até com medo Com a criação de uma simples tabela e o uso de uma grande ferramenta dos vários scripters, o comando For e o Pairs, você pode fazer um milagre, veja abaixo:
local summon = {["Troll"] = 4, ["Orc"] = 3, ["Wolf] = 2}
for monster, times in pairs(summon) do
for i = 1, times do
doSummonCreature(monster, position)
end
end
Compare os dois scripts. Dá para acreditar que eles fazem a mesma coisa?
DICA 3 - USANDO O BOM SENSO
Essa é a mais abstrata das dicas, pois depende muito da experiência do scripter. Ela usa do próprio bom senso e da capacidade de criação do programador.
Eu vou pegar um script simples, sem nenhum uso em OTServ, para que você dê uma olhada:
local x = 1
local y, z, soma = 0
if x == 1 then
y = 3
z = 10
soma = x + y + z + 10
elseif x == 2 then
y = 3
z = 10
soma = x + y + z + 20
else
y = 4
z = 10
soma = x + y + z + 30
end
Isso aí acima, parece um script inofensivo, mas não é. É uma grande repetição de informações desnecessárias.
O uso dessa ferramenta que é o bom senso, consiste em verificar os "erros" do script, as repetições de coisas desnecessárias, procurando assim uma maneira de contornar a situação.
Estudando o script acima, podemos encontrar alguns desses "erros":
1. O valor da variável 'y' se repete em duas partes do código.
2. O valor da variável 'z' é sempre o mesmo.
3. A variável 'soma' possui um número que varia três vezes em sua composição.
4. A variável 'soma' se repete três vezes no código.
Desse jeito, podemos encontrar soluções plausíveis:
1. Vamos colocar o valor-padrão de 'y' será 3.
2. Vamos colocar o valor-padrão de 'z' em 10.
3. Vamos criar uma nova variável para esse número.
4. Vamos isolar 'soma' de todo o script.
E assim, teremos um código limpo e um pouco mais curto, como segue abaixo:
local x = 1
local y = 3
local z = 10
local k, soma = 0
if x == 1 then
k = 10
elseif x == 2 then
k = 20
else
y = 4
k = 30
end
soma = x + y + z + k
Pois é, né? Como eu disse no começo dessa dica, ela é muito abstrata, e dependendo do scripter, vários resultados podem ser obtidos:
local x = 1
local tabela = {
[1] = {3, 10, 10},
[2] = {3, 10, 20},
[3] = {4, 10 , 30},
p = {0, 0, 0}
}
ret = tabela[x] or tabela.p
soma = x + ret[1] + ret[2] + ret[3]
CONCLUSÃO
Bom, pessoal, a coletânea de dicas doidas fica por aqui. Eu não considero isso um tutorial, mas sim uma base para que vocês possam melhorar seus vários scripts.
Para os scripters que ainda estão entrando nesse grande barco, verão termos desconhecidos, estruturas desconhecidas e etcétera, então não deixe de tirar suas dúvidas aqui no tópico ou no suporte do fórum.
O objetivo desse tutorial não é explicar o comando For, o pairs() e o ipairs() ou o uso de tabelas, pois isso será feito em tutoriais mais detalhados.
Um abraço, galera. \o/