Jump to content

Como usar addEvent


Killua

Recommended Posts

Usando addEvent

 

O uso do addEvent tem inúmeras utilidades e pode ser complicado para algumas pessoas, inclusive era para mim quando eu estava começando a aprender LUA.

 

Para que serve o addEvent?

Para "chamar" uma função após um periodo de tempo, ou seja, executar uma função após um tempo estipulado.

 

O addEvent tem como parâmetros: callback, delay e ...

addEvent(callback, delay, ...)

 

Onde callback é a função que será chamada, delay é o tempo (em milissegundos) até que se chame essa função e ... são os parâmetros que a função chamada utiliza. Exemplo:

addEvent(doBroadcastMessage, 1000, "Bom dia", 23) 

Aqui, após 1 segundo (1000 ms), a função doBroadcastMessage(message, type) será executada com os parâmetros message = "Bom dia" e type = 23.

O addEvent pode ser usado de duas maneiras:

Chamando uma função existente ou criando uma nova função.

 

Para chamar uma função existente, basta usar como acima, para usá-lo para criar uma nova função, usa-se assim, por exemplo:


   addEvent(function()
     if isCreature(cid) then
         doPlayerAddItem(cid, 2160, 10)
         doPlayerSendTextMessage(cid, 25, "Voce ganhou 10k.")
      end
   end, 1000)

Assim é basicamente a mesma coisa, mas pude colocar várias funções dentro de um único addEvent, e mantive o delay 1000 (1 segundo).

Obs: Precisei usar 2 ends, um para fechar function() e outro para fechar o if.

 

Atenção! Além disso, existe uma outra diferença entre as duas formas de uso, vou tentar explicar da melhor maneira possível:

Quando usamos o addEvent com uma função já existente (1o exemplo), as informações usadas serão as geradas no momento em que o evento foi chamado, por exemplo:

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getPlayerLevel(cid) > 10 then
        doPlayerSendTextMessage(cid, 25, "Uma pedra sera criada na sua posiçao dentro de 2 segundos.")
        addEvent(doCreateItem, 2000, 1308, 1, getThingPos(cid))
    end
    return true
end

Se usarmos assim, a pedra irá ser criada na posição onde o jogador se encontrava no momento em que "deu use" e não onde ele etará 2 segundos depois. Se você quiser que a pedra seja criada na nova posição do jogador (pos de 2 segundos depois), você deve fazer uma nova checagem, criando uma função:

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getPlayerLevel(cid) > 10 then
        doPlayerSendTextMessage(cid, 25, "Uma pedra sera criada na sua posiçao dentro de 2 segundos.")
        addEvent(function()
            if isCreature(cid) then
                doCreateItem(1308, 1, getThingPos(cid))
            end
        end, 2000)
    end
    return true
end

Atenção novamente: A checagem if isCreature(cid) que utilizei, é muito importante para um addEvent que envolva criaturas. Se você executasse o addEvent sem a checagem e o player logasse ou morresse antes desses 2 segundos se passarem, daria um erro na distro e interromperia o resto do script.

 

Espero ter sido claro, qualquer dúvida, podem postar.

Edited by Killua
Link to comment
Share on other sites

Assim vc está chamando uma função já existente, como doBroadcastMessage por exemplo :)

O armazenamento de dados dessa maneira funciona do mesmo modo que meu segundo exemplo, apesar de ser usado como o primeiro. É um modo bem úti.

Link to comment
Share on other sites

  • 2 years later...
×
×
  • Create New...