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
Group: Conde
Joined: 07/05/08
Posts: 612
Reputation: +12
Tibia Character: 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
Group: Infante
Joined: 13/10/08
Posts: 1.6k
Reputation: +420
Tibia Character: Demonbholder

Pois é brother, me ensina ai.
info
Group: Campones
Joined: 04/10/07
Posts: 60
Reputation: 0
Tibia Character: Elder Linkay

Mais facil usar coroutine ? Coroutine pra mim não muda porra nenhuma, e continua sendo um loop infinito do mesmo jeito.
info
Group: Infante
Joined: 13/10/08
Posts: 1.6k
Reputation: +420
Tibia Character: 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
Group: Campones
Joined: 04/10/07
Posts: 60
Reputation: 0
Tibia Character: 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
Edited Setembro 10 by linkay
info
Group: Infante
Joined: 13/10/08
Posts: 1.6k
Reputation: +420
Tibia Character: Demonbholder

Da no mesmo, a única diferença é que você usou variáveis.
Bom, é verdade que tende a travar menos sim. Valeu.
info
Group: Campones
Joined: 04/10/07
Posts: 60
Reputation: 0
Tibia Character: 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
Group: Infante
Joined: 13/10/08
Posts: 1.6k
Reputation: +420
Tibia Character: 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
Group: Campones
Joined: 30/10/10
Posts: 10
Reputation: +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
Group: Conde
Joined: 09/09/09
Posts: 528
Reputation: +424
Tibia Character: 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
Group: Barão
Joined: 18/10/10
Posts: 246
Reputation: +89
Tibia Character: Elite Pamcadaum

Owned.
-k
info
Group: Visconde
Joined: 23/02/08
Posts: 273
Reputation: +101
Tibia Character: 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 ![]()
Edited Janeiro 21 by Byerne
info
Group: Infante
Joined: 13/10/08
Posts: 1.6k
Reputation: +420
Tibia Character: 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 ![]()
Edited Janeiro 21 by Demonbholder
info
Group: Conde
Joined: 09/09/09
Posts: 528
Reputation: +424
Tibia Character: 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."})
Edited Janeiro 21 by MatheusMkalo
info
Group: Infante
Joined: 13/10/08
Posts: 1.6k
Reputation: +420
Tibia Character: 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.
Edited Julho 3 by Demonbholder