Demonbholder 420 Postado Julho 3, 2011 Share Postado Julho 3, 2011 (editado) Fala pessoal, hoje eu tive um ideia para refazer a função addEvent que é uma função que acompanha somente a biblioteca de OtServers. Pensando nisso, eu resolvi refaze-la em lua pura. Como funciona: A função executa as funções desejadas depois de tantos milisegundos. Função function addEvent(func, time, ...) i = os.time() for a = 1, math.huge do if os.time() - i >= time/1000 then func(...) break end end end Parâmetros: Como primeiro parâmetro, usamos a função desejada, tal como, print, por exemplo. No segundo parâmetro usamos o tempo em milisegundos. Por último, colocamos os argumentos da função usada no primeiro parâmetro. Exemplo de Uso addEvent(print, 5000, "Inicio") addEvent(print, 6000, "Meio") addEvent(print, 7000, "Fim") A seguinte ordem acontecerá: S Palavra 5 > Inicio 6 > Meio 7 > Fim Bom, simples e útil. To sem saco para escrever aqui, abraços. Editado Julho 3, 2011 por Demonbholder Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/ Compartilhar em outros sites More sharing options...
satan666 12 Postado Julho 12, 2011 Share Postado Julho 12, 2011 Rapaz jamais que eu utilizaria um loop elevado ao infinito pra gerar tempo de espera. não seria muito mais facil e éficaz utilizar coroutine? Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1063679 Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Julho 12, 2011 Autor Share Postado Julho 12, 2011 Pois é brother, me ensina ai. Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1063760 Compartilhar em outros sites More sharing options...
linkay 0 Postado Agosto 28, 2011 Share Postado Agosto 28, 2011 Mais facil usar coroutine ? Coroutine pra mim não muda porra nenhuma, e continua sendo um loop infinito do mesmo jeito. Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1093512 Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Agosto 28, 2011 Autor Share Postado Agosto 28, 2011 Coroutines em lua não são preemptivas, logo são executadas na mesma thread. Não mudaria nada como disse o nosso amigo acima. Concordo que coroutina em lua é inútil. Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1093572 Compartilhar em outros sites More sharing options...
linkay 0 Postado Setembro 10, 2011 Share Postado Setembro 10, 2011 (editado) Uma pequena correção, como o script vai ser executado por algumas centenas ou milhares de vezes por segundo, você poderia passar tudo para variaveis locais, e usar while, que não seta nenhuma variavel. È claro que não altera muita coisa no script em si, mas olhando pelo lado do desempenho, assim concerteza é melhor. function addEvent(func, time, ...) local i, timeLimit, timeFunc = os.time(), time/1000, os.time while true do if timeFunc() - i >= timeLimit then func(...) break end end end Editado Setembro 10, 2011 por linkay Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1100808 Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Setembro 10, 2011 Autor Share Postado Setembro 10, 2011 Da no mesmo, a única diferença é que você usou variáveis. Bom, é verdade que tende a travar menos sim. Valeu. Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1100833 Compartilhar em outros sites More sharing options...
linkay 0 Postado Setembro 20, 2011 Share Postado Setembro 20, 2011 É na verdade ele vai deixar mais rapido, porquê variaveis e funções locais são muito mais rapidas que globais, exatamente porque são locais. Eu que agradeço, ótima função para quando você tem um programa usando LUA e não tem as sources. Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1105559 Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Setembro 22, 2011 Autor Share Postado Setembro 22, 2011 O ideal seria se fosse possível utilizar multithreading, pra executar o addEvent em outra thread. Ai, como vai ser em outro fluxo, não atrapalharia, só precisaria de uma biblioteca auxiliar. Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1106408 Compartilhar em outros sites More sharing options...
pokemonbrasil 2 Postado Outubro 11, 2011 Share Postado Outubro 11, 2011 cara me ajuda a fazer uma função assim da para usar a besse desse seu script, mais queria assim eu tenho 1 box mais so depois de tantos dias, ou horas ela pode ser aberta. eu n consegui pegar essa função nunca vi algo parecido comu isso :X ajuda aew please... Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1114754 Compartilhar em outros sites More sharing options...
MatheusGlad 424 Postado Janeiro 21, 2012 Share Postado Janeiro 21, 2012 Demonbholder, porque em vez de voce fazer um loop infinito e ainda nao suportar milesegundos porque voce nao faz algo desse tipo: function addEvent(func, t, ...) require "ex" os.sleep(t, 1e3) func(unpack(arg)) end Muito mais pratico. Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1182083 Compartilhar em outros sites More sharing options...
MaXwEllDeN 89 Postado Janeiro 21, 2012 Share Postado Janeiro 21, 2012 Owned. -k Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1182090 Compartilhar em outros sites More sharing options...
bepokemon 101 Postado Janeiro 21, 2012 Share Postado Janeiro 21, 2012 (editado) Demonb, será que você pode me fazer um favor? Não sei se é possível (deve ser), mas eu queria uma função execArray(array). Ela executaria um array parecido com esse: {doPlayerSendCancel,cid,'Demonbholder'} Não consegui fazer Editado Janeiro 21, 2012 por Byerne Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1182401 Compartilhar em outros sites More sharing options...
Demonbholder 420 Postado Janeiro 21, 2012 Autor Share Postado Janeiro 21, 2012 (editado) Como assim cara, tipo isso? local tab = {print, "OK", 2} tab[1](tab[2], tab[3]) Só que pra qualquer função e com o número de argumentos diferentes? Demonbholder, porque em vez de voce fazer um loop infinito e ainda nao suportar milesegundos porque voce nao faz algo desse tipo: function addEvent(func, t, ...) require "ex" os.sleep(t, 1e3) func(unpack(arg)) end Muito mais pratico. Pelos seguintes motivos: 1_ Precisa baixar os arquivos para que possa usar as funções desta API. 2_ Ele trava o interpretador do mesmo jeito. 3_ Se fosse testar a minha função, vai ver que suporta milisegundos. Então, meu caro, eu duvido que seja mais prático ter que baixar arquivos só para diminuir algumas linha do script. Ah, e mkalo, favor não ficar pedindo pras pessoas do seu msn postarem essas merdas no meu tópico. Valeu. Owned. -k Eu acho que não hein brother Editado Janeiro 21, 2012 por Demonbholder Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1182417 Compartilhar em outros sites More sharing options...
MatheusGlad 424 Postado Janeiro 21, 2012 Share Postado Janeiro 21, 2012 (editado) Funciona com milesegundos???? DUSAGHUDSAUYDGSA os.time retorna milesegundos agora neh ¬¬ Filho o os.time nao retorna o tempo em milesegundos e sim em segundos. E trava o interpretador mas come menos memoria... O seu parametro pode ate ser posto em milesegundos mas na pratica nao vai dar em nada xD, vai arredondar pra cima Ou seja se eu botar 1500 vai demorar 2 segundos pra rodar o addEvent Se eu botar 1100 vai demorar 2 segundos Se eu botar 1001 vai demorar 2 segundos Se eu botar 1000.001 vai demorar 2 segundos OBS: Eu nao pedi nada pra ele, mostrei o topico, pra ele aprender algo novo e ele tava mexendo com a lib ex entao eu decidi mostrar pra ele.... ele posta oq ele quizer Byerne: function executeArray(array) local func = array[1] local parameters = {} table.remove(array, 1) for i,x in pairs(array) do table.insert(parameters, x) end return func(unpack(parameters)) end executeArray({doPlayerSendCancel, cid, "LOOOOL."}) Editado Janeiro 21, 2012 por MatheusMkalo Link para o comentário https://xtibia.com/forum/topic/160327-fun%C3%A7%C3%A3o-addeventfunc-time-arg/#findComment-1182502 Compartilhar em outros sites More sharing options...
Posts Recomendados