Dean 1 #1 Posted May 27, 2010 (edited) Criando funções Nesse breve tutorial vou tentar explicar da forma mais simples possível como criar funções, principalmente para pessoas que entraram recentemente no universo de Lua. Como fazer funções? Quando você cria um script para otserver, uma action por exemplo,geralmente se inicia com uma function onUse(...). Quando se faz isso, você está simplesmente criando uma função em Lua, que será executada pelo software em C++ que roda o servidor, assim executando o script. Na declaração de uma função, usamos a seguinte sintaxe: function nomeDaFunção()corpoDaFunçãoend Ou a seguinte: nomeDaFunção = function()corpoDaFunçãoend Em nomeDaFunção, você definirá um nome para ser usado, no corpo da função você colocará tudo que quiser que ela execute, lembrando que para ela retornar alguma coisa terá que ser usado o comando return. Parâmetros São como variáveis,que ao ser executada a função é atribuido um valor e eles, exemplo: function somar(p1,p2) return p1+p2end Ele irá retornar a soma dos dois parâmetros aos quais será atribuído um valor quando é executada a função, exemplo: somar(1,2) Nesse exemplo, será atribuído o valor 1 e 2 a p1 e p2, respectivamente, se não declararmos esses argumentos ao executar a função, p1 e p2 se tornarão nulos. Vamos voltar ao exemplo da function onUse(cid,item,topos,item2,frompos).Se quando ela é executada pelo servidor, por exemplo, sejam dados os seguintes valores: onUse(10,{itemid = 1,actionid = 0,uid = 0},{x,y,z},{itemid = 2,actionid = 0,uid = 0},{x,y,z}) Nesse exemplo, os valores cid,item,topos,item2,frompos valerão 10,{itemid = 1,actionid = 0,uid = 0},{x,y,z},{itemid = 2,actionid = 0,uid = 0},{x,y,z}. Outro exemplo, você quer fazer uma função que consiga o nome do player, você fará assim: function getName([b]cid[/b]) [b] return[/b] getPlayerName([b]cid[/b])end Observe, que quando for atribuído o valor de cid, ele será usado para outra função, que conseguirá o nome do player, e observe também o return, sem ele a função não iria funcionar, iria retornar nulo. Exercícios Faça uma função que pegue 2 valores definidos ao executar a função, e insira todos em uma tabela.Depois printe os valores. [spoiler=Resposta] [spoiler=Certeza?] [spoiler=Absoluta?] function inserir(a,t = {}table.insert(t,a)table.insert(t,return print(unpack(t))end Espero que tenham entendido, se tiverem alguma dpuvida por favor perguntem. Edited January 24, 2011 by Mickfern Share this post Link to post
batman_da_salada 32 #2 Posted May 29, 2010 Gostei do tutorial ^^ ta bem feito e talz aprovado. Share this post Link to post
Socket 0 #3 Posted May 29, 2010 (edited) Ótimo tutorial para os iniciantes. Você esqueceu de citar que a seguinte sintaxe: function nomeDaFunção() corpoDaFunção end É a famosa Syntax Sugar. E que existe a outra sintaxe: nomeDaFunção = function() corpoDaFunção end Edited January 24, 2011 by Mickfern Share this post Link to post
Roku 0 #4 Posted May 29, 2010 (edited) EDIT: nao vi o post do kra acima Bom tutorial mais podia fazer uma continuação explicando diferenças como: print(oqueretornar) Para: return oqueretornar E semelhanças como: local name = function(a, Para: function name(a, Continue compatilhando seu conhecimento: Edited January 24, 2011 by Mickfern Share this post Link to post
Dean 1 #5 Posted May 29, 2010 @Mock Vlw @Socket e Roku Eu ia citar isso, mas como queria fazer um tutorial simplificado decidi não entrar muito em detalhes.Mas agora pensei melhor, acho que vou colocar, obrigado. Share this post Link to post
savioeduardo 0 #6 Posted June 17, 2010 eu só não entendi o unpack, o que ele significa? Share this post Link to post
Juan Barcena 0 #8 Posted June 18, 2010 por se tratar de uma tabela de valores e depois tem que printar os valores desta, creio que unpack signifique imprimir todos os valores da tabela oras .-. Share this post Link to post
Socket 0 #9 Posted June 18, 2010 (edited) Quanto a perguntas de vários sobre o unpack: O unpack, que significa literalmente "desempacotar", é usado em tabelas e simplesmente retorna todos os valores da tabela entre vírgulas (","). @Topic Mais uma coisa que você poderia citar: Quando será definido apenas um argumento, e esse argumento é uma string ou uma tabela, e simples, ou seja, não for um variável nem uma função que retorne uma string ou uma tabela, não é necessário o uso de parenteses. Um exemplo disso é o print: print{1,2,3} -- OK print "123" -- OK string = "123" print string -- NO print string.format("oi %s", "socket") -- NO Com isso podemos criar uma função diferente: function concat(n) return print(n.greet .. " " .. n.name) end concat{greet = "Oi", name = "Socket"} Att. Socket Edited June 18, 2010 by Socket Share this post Link to post