Ir para conteúdo
  • Cadastre-se

Automatização e Simplificação de Scripts


Posts Recomendados

Automatização e Simplificação de Scripts

Bem, este é minha segunda "aula", a primeira foi sobre o comando addEvent, esta é um pouco mais complexa, vou demonstrar algumas possibilidades de automatização e simplificação de scripts, algo muito importante pra tornar um script mais simples e prático. Vamos a algumas definições:

Automação: é um sistema automático de controle pelo qual os mecanismos verificam seu próprio funcionamento, efetuando medições e introduzindo correções, sem a necessidade da interferência do homem.

Simplificar: tornar menos complicado (fiquei com preguiça de procurar mais).

Situação 1: Fazendo um cardápio

Temos um talkaction de fast food e queremos informar ao player quando ele disser !food cardápio todas as opções, elas estão disponiveis em uma tabela :


local comidas = {

["Meat"] = {50, 1291},

["Ham"] = {90, 1292},

["Fish"] = {150, 1293},

["Dragon Ham"] = {200, 1294}

}

Neste caso o valor literal é a comida, o primeiro valor numérico o preço e o segundo o id (não são reais). Bem, agora pense assim, cada comida que eu colocar eu vou ter que buscar o id dela thumbdown.gif? Chato demais isso, e se eu utilizar uma função que já existe? OMG, SÉRIO? Isso mesmo thumbup.gif, getItemIdByName(name), este é o primeiro exemplo de simplificação.

print("Atendente: Aqui no Fast Food Delivery, vendemos: Meat por 50 golds, Ham por 90 golds, Fish por 150 golds, Dragom Ham por 200 golds.")

OMG, tá pronto =D. Sim, mas e se você quiser mudar algo, vai ter que sempre lembrar de digitar isso? E se você tiver 200 scripts, vai lembrar dos detalhes de todos? Por que não utilizamos o comando for (note que agora, já que há apenas um valor não há a necessidade de uma tabela para os valores e ids separados, o que torna o script mais simples)

local comidas = {

["Meat"] = 50,

["Ham"] = 90,

["Fish"] = 150,

["Dragon Ham"] = 200

}

local cardapio = "Atendente: Aqui no Fast Food Delivery, vendemos:"

for k,v in pairs(comidas) do

cardapio = cardapio.." "..k.." ("..v..");"

end

print(cardapio)

Bem, assim fica mais fácil não? Já foi então um exemplo de automatização e um de simplificação. Situação 2: Automatizando um NPC Bem, nós temos um NPC que executa três funções, as falas das três funções são as mesmas, vamos simular intao três funções (para utilizar em apenas lua, sendo assim, será apenas teoria, não tente colocar em seu servidor). Vamos supor que a fala é param e o estado da fala é estado, as três funções são comprar uma casa, um carro ou uma vaca (fiz pouco texto pra cada porque é cansativo):

local param = "vaca"

local estado = 0

local casa = ""

local carro = ""

local vaca = ""


-- Simulação da casa

if estado == 0 and param == "casa" then

print("Qual casa deseja comprar?")

estado = 1

elseif estado == 1 and param == "da esquina" then

print("Tem certeza que deseja comprar a casa Da esquina?")

estado = 2

casa = "da esquina"

elseif estado == 1 and param == "do meio" then

print("Tem certeza que deseja comprar a casa Do meio?")

casa = "do meio"

estado = 2

elseif estado == 2 and param == "sim" then

print("Parabens pela aquisição da casa "..casa".") -- Note aqui uma pequena automação

estado = 0

end


-- Simulação do carro (copiei da casa e mudei o nome, já estava cansando disso)

if estado == 0 and param == "carro" then

print("Qual carro deseja comprar?")

estado = 3

elseif estado == 3 and param == "ford" then

print("Tem certeza que deseja comprar o carro Ford?")

estado = 4

carro = "Chevrolet"

elseif estado == 3 and param == "Chevrolet" then

print("Tem certeza que deseja comprar o carro Chevrolet") -- Não sei escrever Chevrolet O.o

carro = "Chevrolet"

estado = 4

elseif estado == 4 and param == "sim" then

print("Parabens pela aquisição da casa "..carro".") -- Note aqui uma pequena automação

estado = 0

end


-- Simulação da vaca (OMG, de novo, como é mais fácil automatizar :'()

if estado == 0 and param == "vaca" then

print("Qual vaca deseja comprar?")

estado = 5

elseif estado == 5 and param == "Doida" then

print("Tem certeza que deseja comprar a vaca Doida?")

estado = 6

carro = "Doida"

elseif estado == 5 and param == "Louca" then

print("Tem certeza que deseja comprar a vaca Louca?") -- Não sei escrever Chevrolet O.o

carro = "Louca"

estado = 6

elseif estado == 6 and param == "sim" then

print("Parabens pela aquisição da casa "..carro".") -- Note aqui uma pequena automação

estado = 0

end

Bem, agora faça você mesmo um de arroz, veja como é cansativo. Note que as falas são quase as mesmas, porque não fazer então um padrão e apenas uma tabela com alguns valores para cada um? Existe o Jiddo's NPC System para simplificar isto, mas é apenas um tutorial.

function math.multiple(value, param)

--> Verification of value and param and return TRUE or FALSE

if type(value) == "number" and type(param) == "number" then

	 if value % param == 0 then

		 return TRUE

	 else return FALSE

	 end

else return nil

end

end


-- Inserir os objetos à venda seguidos pelos seus preços

local venda = {

{"Carro", "Chevrolet", 1000, "Ford", 1200},

{"Casa", "Da esquina", 3000, "Do meio", 2000},

{"Vaca", "Louca", 100, "Malhada", 200}

}


-- Valores padrões

local param = "sim"

local estado = 2

local objeto = 2

local desejo = 3

local custo = 1000


-- Padrão								

for all = 1, #venda do

if estado == 0 and param == venda[all][1] then

	 estado = 1

	 desejo = all

	 print("Qual "..param.." deseja comprar?")

	 break

elseif estado == 1 and param == venda[desejo][all] and math.multiple(all, 2) == TRUE then		

	 estado = 2										

	 objeto = all

	 custo = venda[desejo][objeto + 1]

	 print("Tem certeza que deseja comprar: "..venda[desejo][1].." "..param.." por "..custo.."?")

	 break

elseif estado == 2 and param == "sim" then

	 estado = 0

	 print("Você perdeu "..custo.." de dinheiro.\nParabens pela aquisição de "..venda[desejo][1].." "..venda[desejo][objeto]..".")

	 break

end				

end

Bem, ainda dá para implantar um "cardápio" hehe, tente, para praticar. Notem que o que fiz foi apenas avaliação de tabelas hehe, aconselho visitarem o setor de LIBs, sempre há funções legais criadas pos outros usuários. Situação 3: Melhor utilização de "ifs" Imaginem a seguinte situação, você precisa construir uma série de ifs, ond caso um não seja verificar o proximo. Vamos ver um modo:

local param = ""

if param == 1 then

print("yes")

end

if param == 2 then

print("no")

end

if param == 3 then

print("faz")

end

Meio grande não? Por que não utilizamos o elseif? Podemos economizar end e com isso simplificar o script. Olhem:

local param = ""

if param == 1 then

print("yes")

elseif param == 2 then

print("no")

elseif param == 3 then

print("faz")

end

Mais simples agora hehe. Agora vamos supor que temos uma função com dois parametros, param1 e param2, onde param2 é muito raro de ser diferente de nil. Podemos fazer assim:

local param = ""

local param2 = ""

if param == 1 and param2 ~= nil then

print("yes")

elseif param == 2 and param2 == 2 then

print("no")

elseif param == 3 and param2 ~= 6 then

print("faz")

end

Pronto UHUL. Pera aí, porque eu verifico primeiro o param1? Se eu verificar param2 primeiro, como é raro de ser diferente de nil, a opção será eliminada com apenas uma avaliação, logo, mais velocidade =D. Agora imagine a seguinte situação:

local param = ""

local param2 = ""

if param2 ~= nil and param == 1 then

print("yes")

elseif param2 ~= nil and param == 2 then

print("no")

elseif param2 ~= nil and param == 3 then

print("faz")

elseif param2 ~= nil and param == 4 then

print("faeez")

elseif param2 ~= nil and param == 5 then

print("faeeeeez")

end

Muito simples não é? Tente fazer de um jeito mais simples utilizando apenas if e elseif. Se você pensou como abaixo você acertou thumbup.gif, se não, fica pra próxima blushing.gif.

if param2 ~= nil then

if param == 1 then

	 print("yes")

elseif param == 2 then

	 print("no")

elseif param == 3 then

	 print("faz")

elseif param == 4 then

	 print("faeez")

elseif param == 5 then

	 print("faeeeeez")

end

end

Bom, acho que assim é mais fácil escrever e mais fácil modificar smile206.gif. Agora temos a seguinte ocasião, param é uma variável local e caso ela seja 1 deve-se dar print em "yes", caso contrário em "no". Podemos escrever assim:

local param = 2

if param == 1 then

print("yes")

else print("no")

end

Bacana né, já está bem curto, mas e se fizermos assim:

local param = 2

print(param == 1 and "yes" or "no")

OMG PeJuGe, 2 LINHAS o.O pirata.gif. Mais fácil né. Neste caso é possível economizar ifs e com isso simplificar.

Bom pessoal, é isso, espero que tenham gostado, claro que há muitas outras formas de aproveitas os comandos, mas já vão algumas happy.gif

Creditos :

Lwkass

Editado por GodMarini (veja o histórico de edições)

Contato;

6yonKDJ.png god.marinii

TaxNfhb.png

Link para o post
Compartilhar em outros sites

Amigo, por-favor poste os créditos do autor, essa não é a primeira vez que você foi informado a fazer isso ¬¬

@EDIT

Agora sim.

-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo