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?
Por Demonbholder, 03 de jul. de 2011 em Mods, funções e outros
info
Grupo: Conde
Registrado: 07/05/08
Posts: 612
Reputação: +12
Char no Tibia: leviana luciferiana

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?
info
Grupo: Infante
Registrado: 13/10/08
Posts: 1.6k
Reputação: +420
Char no Tibia: Demonbholder

Pois é brother, me ensina ai.
info
Grupo: Campones
Registrado: 04/10/07
Posts: 60
Reputação: 0
Char no Tibia: Elder Linkay

Mais facil usar coroutine ? Coroutine pra mim não muda porra nenhuma, e continua sendo um loop infinito do mesmo jeito.
info
Grupo: Infante
Registrado: 13/10/08
Posts: 1.6k
Reputação: +420
Char no Tibia: Demonbholder

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.
info
Grupo: Campones
Registrado: 04/10/07
Posts: 60
Reputação: 0
Char no Tibia: Elder Linkay

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 por linkay
info
Grupo: Infante
Registrado: 13/10/08
Posts: 1.6k
Reputação: +420
Char no Tibia: Demonbholder

Da no mesmo, a única diferença é que você usou variáveis.
Bom, é verdade que tende a travar menos sim. Valeu.
info
Grupo: Campones
Registrado: 04/10/07
Posts: 60
Reputação: 0
Char no Tibia: Elder Linkay

É 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.
info
Grupo: Infante
Registrado: 13/10/08
Posts: 1.6k
Reputação: +420
Char no Tibia: Demonbholder

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.
info
Grupo: Campones
Registrado: 30/10/10
Posts: 10
Reputação: +2

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...
info
Grupo: Conde
Registrado: 09/09/09
Posts: 528
Reputação: +424
Char no Tibia: Emekalo Makalo

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.
info
Grupo: Barão
Registrado: 18/10/10
Posts: 246
Reputação: +89
Char no Tibia: Elite Pamcadaum

Owned.
-k
info
Grupo: Visconde
Registrado: 23/02/08
Posts: 273
Reputação: +101
Char no Tibia: Foxx Rookslayer

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 por Byerne
info
Grupo: Infante
Registrado: 13/10/08
Posts: 1.6k
Reputação: +420
Char no Tibia: Demonbholder

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 por Demonbholder
info
Grupo: Conde
Registrado: 09/09/09
Posts: 528
Reputação: +424
Char no Tibia: Emekalo Makalo

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 por MatheusMkalo
info
Grupo: Infante
Registrado: 13/10/08
Posts: 1.6k
Reputação: +420
Char no Tibia: Demonbholder
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
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
A seguinte ordem acontecerá:
Bom, simples e útil. To sem saco para escrever aqui, abraços.
Editado Julho 3 por Demonbholder