Ir para conteúdo

Como usar addEvent


Killua

Posts Recomendados

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.

Editado por Killua
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

  • 2 years later...
×
×
  • Criar Novo...