Ir para conteúdo
Entre para seguir isso  
Undead Slayer

[FUNCTION] doLoopCallback

Recommended Posts

Undead Slayer    0
Undead Slayer

Function

doLoopCallback(callback,parameters,delay,loops,id)

doStopCallbackLoop(id)

 

É uma função simples, ela simplesmente repete uma callback chamada por um addEvent quantas vezes você quiser, com tempo configuravel alem de ter a função doStopCallbackLoop(id) que para tal Loop de callback.

 

Para usar, abra uma LIB que você deseja (actions,movemets ou talkactions), e coloque isto:

 

 

 

function doLoopCallback(callback,parameters,delay,loops,id) 



[left]--- LOOP CALLBACK ---[/left]




[left]---       Autor: Undead Slayer

---       
[left]---       Versão 0.3 Beta
---       Features of the BETA version
---
---       *Repetição de funções chamadas por um addEvent
---       *Mudança de quantas vezes ira repetir o callback de um addEvent
---       *Mudança do tempo de cada vez que for repitir um calllback
---       *Script chamando normalmente o callback, sem bugs ou falhas
--- Vars ---
local continue = { callback = callback, parameters = parameters, delay = delay }
local delay_time = delay*1000
local loops_s = 50000+id
local loops_id = 60000+id
local loops_ss = getGlobalStorageValue(loops_s)
local loops_ids = getGlobalStorageValue(loops_id)
local number = 1
local nothing = 0
--- Function ---[/left]

[/left]






[left]if loops ~= nothing then

if loops_ss ~= loops then
[left]if loops_ss <= nothing then
addEvent(onLoopContinue,number,continue)
setGlobalStorageValue(loops_s,number)
elseif loops >= number then
addEvent(onLoopContinue,number,continue)
setGlobalStorageValue(loops_s,loops_ss+number)
end
elseif loops_ss == loops then
setGlobalStorageValue(loop_s,nothing)
end
elseif loops == nothing then
if loops_ids <= nothing then
addEvent(onLoopContinue,number,continue)
elseif loops_ids == number then
setGlobalStorageValue(loops_id,nothing)
end
end
end        [/left]

[/left]






[left]function doStopCallbackLoop(id)

--- Vars ---
[left]local loops_id = 60000+id
local number = 1
--- Function ---
setGlobalStorageValue(loops_id,number)
end     [/left]

[/left]






[left]function onLoopContinue(continue)

--- Vars ---
[left]local callback = continue.callback
local parameters = continue.parameters
local delay = continue.delay
--- Function ---
addEvent(callback,delay,parameters) [/left]

[/left]






[left]end [/left]


 

 

USANDO EM UM SCRIPT

 

 

 

Para usar é facil, basta no final das funções do callback, colocar a função ajustada, exemplo:

 

 

 

 

function onUse(cid, item, frompos, item2, topos)

 

 



[left]addEvent(onTest,3000,cid)[/left]




[left]end[/left]





[left]function onTest(cid)[/left]





[left]--- Vars ---

local new_position = {x=437, y=506, z=7}
[left]--- Function ---
doPlayerSendTextMessage(cid,22,"Onde você acha que vai???? VOLTE AQUI!")
doTeleportThing(cid,new_position)
doLoopCallback(onTest,cid,3000,2,1)[/left]

[/left]





end

 

 

 

 

EXPLICANDO COMO CONFIGURAR

 

 

 

 

 

 

Veja o exemplo de configuração acima.

 

 

 

 

 

 

 

doLoopCallback(callback,parameters,delay,loops,id)

 

 

 

 

 

 

doLoopCallback(onTest,cid,3000,2,1)

 

 

 

 

 

 

 

*onTest - Nome da Callbaack a ser repitida

 

 

 

 

 

 

*cid - Parametro usado originalmente pelo addEvent

 

 

 

 

 

 

*3000 - Delay, tempo para chamar cada repetição de callback 'onTest' em mili-segundos

 

 

 

 

 

 

*2 - Numero de vezes que vai repitir o callback 'onTest', e note, se vocÊ colokar 0, ele n ira fazer 0vezes a função, ira deixala eterna, sendo parada assim, somente com um doStopCallbackLoop

 

 

 

 

 

 

*1 - ID do loop (Para cada função de loop de callback, deve se usar uma id DIFERETE, pois é importante para o script, e para, no caso, usar a função doStopCallbackLoop(id)

 

 

 

 

 

 

 

--- doStopCallbackLoop(id)

 

 

 

 

 

 

 

Essa função é facil, basta colocar em qualqur script, esta função, e em id, você coloca a mesma id do Loop, exemplo:

 

 

 

 

 

 

 

Se a função foi usada da seguinte maneira:

 

 

 

 

 

 

doLoopCallback(onTest,cid,3000,2,1)

 

 

 

 

 

 

 

Para parar o Loop, deve se usar o doStopCallbackLoop da seguinte maneira:

 

 

 

 

 

 

 

doStopCallbackLoop(1)

 

 

 

 

 

 

 

É SO!!!!

 

 

 

 

 

Esperto ter ajudado, e que não tenha sido muito confuso.(Y)

 

 

 

 

 

:bye::bye::bye:

 

 

 

 

 

 

 

 

 

 

 

COMENTEM, MOSTREM CRITICAS E MELHORAMENTOS PARA A VERSÃO 1.8 ALFA

 

 

 

 

 

 

 

(Y)

:bye:(Y):bye:

Editado por Undead Slayer

Compartilhar este post


Link para o post
Mock    32
Mock

eu fiz um script parecido com esse e chamei de evento eterno e aquele scritp q faz sair magic efect das placas de tp XD

em fim o seu fico 500x melhor so q com a mesma função

boa ^^

Compartilhar este post


Link para o post
Undead Slayer    0
Undead Slayer

Mock: vi la, os tps eternos, axei legal, eu fiz esse aque, pq em muitos scripts meus eu precisava por um loop, o mesmo que muitas vezes bugava, e que fikava chato, pois n dava pra controlar o tempo ou quantas vezes ia repetir, xD

 

@topic: esqueci de dizer, como o script ainda esta em versão BETA, abrir varios loops de mesmo id, pode fazer um interferir no outro, porem, mesmo assim nao buga, mas interfere, ai o segundo ira acabar junto com o primeiro, e se no caso qualquer player pode ativar o loop, vai fikar um fuzue.... por isso, n usem abusivamente, ah n ser que vc ponha condições no script (Y)

 

E outra: se colocar 0 em loops, os loops ficam eternos....

Compartilhar este post


Link para o post
Mock    32
Mock

sim xD

e tambem o meu evento eterno eu expliquei muito mal ai niguem entendia

Compartilhar este post


Link para o post
Mephisto    0
Mephisto

Apesar de eu nao saber quase nada de LUA esse script vai ser bem util e está muito bem criado!

 

Voce é um ótimo scripter e terá um futuro brilhante!

Compartilhar este post


Link para o post
Elys Zarox    0
Elys Zarox

concordo mock, ninguem intendeu nada =p

Compartilhar este post


Link para o post
tuliorf13    0
tuliorf13

Copiei exatamente igual como está...

estou usando server tfs 8.4 sql

e dá erro...

 

ex:

weapon/lib

Can not load weapons lib/weapons.lua

ex2:

Script.lib

end expected <eof> Já tentei por end .. n deu

Compartilhar este post


Link para o post
Eventide    7
Eventide

coloca isso no global.lua feraz ou na pasta function, se não der pode matar o runando.. x]

Compartilhar este post


Link para o post
grandeyang    0
grandeyang

Vou tentar resumir o que entendi, se for realmente isto você mandou bem pra caramba.

 

É como se você botasse um addEvent dentro de outro chamando a mesma função porém com a possibilidade de configurar o tempo para a repetição e o número de vezes em que vai se repetir?

 

Realmente interessante ^^ parabéns!

Compartilhar este post


Link para o post
Raphael Carnaúba    1
Raphael Carnaúba

tuliorf13, você copiou como estava? ou mecheu em algo

Editado por Raphael Carnaúba

Compartilhar este post


Link para o post
Tonholoko    0
Tonholoko

era quase isso que eu tava procurando, quando eu chamo o addEvent num script qualquer, ele continua o script abaixo e o addEvent Juntos! :/

exemplo:

function Exemplo(param)
    DeletarItem(1000,1)
end
function Principal(param)
   addEvent(exemplo,1000,param)
   CriarItem(1000,1)
end

acontece que devia dar pau ao deletar o item, pois ela só foi criada depois que chamamos o addEvent, portanto nao existia, mas na verdade, acontece que ela é criada e o o evento consegue deleta-la, talvez por causa do delay, mas a função principal deveria "parar" até que a função secundaria se completasse, oq não acontece...

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×