Ir para conteúdo
  • 0

[Dúvida] Stop Event


Newtonnotwen

Pergunta

Como eu faço para usar a função stop event após certo tempo depois de ativar o script?

 

Ex:

 

 

Ativei o script, depois de 10 segundos ativa a função stop event:

 

stopEvent (função)

 

Após 10 segundos, valeu.

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

function stopThat()
stopEvent(abc)
return true
end

abc = addEvent(doPlayerAddItem, 1000, cid, 2160, 100)
addEvent(stopThat, 10000)

 

Try this.

 

OBS: Dependendo de como você tá usando a função, não vai funcionar mesmo. Qualquer coisa, posta o script aqui.

Editado por LuckOake
Link para o comentário
Compartilhar em outros sites

  • 0

Não funcionou, eu quero fazer isso:

 

Tem uma talkaction que utilizo que faz varias funções:

 

Player fala this, então ativa o script e no script tem uma função assim:

 

addEvent(doCreatureExecuteTalkAction, 1000, cid, 'this', true)

 

Ou seja ela vai ficar ativando o script infinitamente, só que desejo parar essa função após certo tempo, assim o script iria parar de repetir.

 

Desejo então usar a função stop event nessa função após 10 segundos:

 

addEvent(doCreatureExecuteTalkAction, 1000, cid, 'this', true)

 

Parando então de repetir o script.

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz uma engenhoca aqui. Tô achando que não vai funfar, mas caso algum milagre aconteça, comemore.

 

 

function onSay(cid, words)

local atime = 10 -- Tempo até o evento parar em segundos

 

function this()

addEvent(doCreatureExecuteTalkAction, 1000, cid, 'this', true)

addEvent(this, 1000)

end

function stopThis()

stopEvent(this)

end

this()

addEvent(stopThis, atime*1000)

return true

end

 

 

Qualquer coisa eu altero o script depois. Eu ainda tô aprendendo a mexer nesses scripts de repetição infinita, entãããão, né.

Editado por LuckOake
Link para o comentário
Compartilhar em outros sites

  • 0

Não está funcionando, acho que você está mandando realizar essa função novamente, porque toda vez que uso meu computador trava, creio que fique adicionando mesmo script 2 vezes por isso trava, ou seja não está encerrando a função mas sim adicionando a mesma.

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Rapaz, depois tenho que ver com o Mestre sobre como resolvo isso. Ou então ele aparece aqui no tópico e resolve seu problema.

 

Mas enquanto a vida não te dá limões, faça uma laranjada. Ou um suco de abacaxi.

 

Substitua:

 

addEvent(this, 1000)

Por isso:

 

thisa = addEvent(this, 1000)

E isso:

 

stopEvent(this)

Por isso:

 

stopEvent(thisa)
Editado por LuckOake
Link para o comentário
Compartilhar em outros sites

  • 0

Em fim cara, modifica ai no script, ele ta aqui:

function onSay(cid, words)

local ppos = getCreaturePosition(cid)

local arear1 = {x=ppos.x+7, y=ppos.y+5, z=ppos.z}

local arear2 = {x=ppos.x-7, y=ppos.y-5, z=ppos.z}

local arear3 = {x=ppos.x+7, y=ppos.y-5, z=ppos.z}

local arear4 = {x=ppos.x-7, y=ppos.y+5, z=ppos.z}

local arear5 = {x=ppos.x+7, y=ppos.y, z=ppos.z}

local arear6 = {x=ppos.x-7, y=ppos.y, z=ppos.z}

local arear7 = {x=ppos.x, y=ppos.y+5, z=ppos.z}

local arear8 = {x=ppos.x, y=ppos.y-5, z=ppos.z}

 

addEvent(magic, 2000, p1, p2, efeito)

doSendDistanceShoot(arear1, arear2, 3)

doSendDistanceShoot(arear2, arear1, 3)

doSendDistanceShoot(arear3, arear4, 3)

doSendDistanceShoot(arear4, arear3, 3)

doSendDistanceShoot(arear5, arear6, 3)

doSendDistanceShoot(arear6, arear5, 3)

doSendDistanceShoot(arear7, arear8, 3)

doSendDistanceShoot(arear8, arear7, 3)

doSendDistanceShoot(arear1, arear2, 4)

doSendDistanceShoot(arear2, arear1, 4)

doSendDistanceShoot(arear3, arear4, 4)

doSendDistanceShoot(arear4, arear3, 4)

doSendDistanceShoot(arear5, arear6, 4)

doSendDistanceShoot(arear6, arear5, 4)

doSendDistanceShoot(arear7, arear8, 4)

doSendDistanceShoot(arear8, arear7, 4)

doSendDistanceShoot(arear1, arear2, 28)

doSendDistanceShoot(arear2, arear1, 28)

doSendDistanceShoot(arear3, arear4, 28)

doSendDistanceShoot(arear4, arear3, 28)

doSendDistanceShoot(arear5, arear6, 28)

doSendDistanceShoot(arear6, arear5, 28)

doSendDistanceShoot(arear7, arear8, 28)

doSendDistanceShoot(arear8, arear7, 28)

addEvent(doCreatureExecuteTalkAction, 1000, cid, 'test4', true)

return true

end

Link para o comentário
Compartilhar em outros sites

  • 0

Assim:

 

 

local myEvent = {}
local function stopMyEvent(cid)
if not myEvent[cid] then return end
stopEvent(myEvent[cid])
myEvent[cid] = nil
end

function onSay(cid, words)
local ppos = getCreaturePosition(cid)
local arear1 = {x=ppos.x+7, y=ppos.y+5, z=ppos.z}
local arear2 = {x=ppos.x-7, y=ppos.y-5, z=ppos.z}
local arear3 = {x=ppos.x+7, y=ppos.y-5, z=ppos.z}
local arear4 = {x=ppos.x-7, y=ppos.y+5, z=ppos.z}
local arear5 = {x=ppos.x+7, y=ppos.y, z=ppos.z}
local arear6 = {x=ppos.x-7, y=ppos.y, z=ppos.z}
local arear7 = {x=ppos.x, y=ppos.y+5, z=ppos.z}
local arear8 = {x=ppos.x, y=ppos.y-5, z=ppos.z}

addEvent(magic, 2000, p1, p2, efeito)
doSendDistanceShoot(arear1, arear2, 3)
doSendDistanceShoot(arear2, arear1, 3)
doSendDistanceShoot(arear3, arear4, 3)
doSendDistanceShoot(arear4, arear3, 3)
doSendDistanceShoot(arear5, arear6, 3)
doSendDistanceShoot(arear6, arear5, 3)
doSendDistanceShoot(arear7, arear8, 3)
doSendDistanceShoot(arear8, arear7, 3)
doSendDistanceShoot(arear1, arear2, 4)
doSendDistanceShoot(arear2, arear1, 4)
doSendDistanceShoot(arear3, arear4, 4)
doSendDistanceShoot(arear4, arear3, 4)
doSendDistanceShoot(arear5, arear6, 4)
doSendDistanceShoot(arear6, arear5, 4)
doSendDistanceShoot(arear7, arear8, 4)
doSendDistanceShoot(arear8, arear7, 4)
doSendDistanceShoot(arear1, arear2, 28)
doSendDistanceShoot(arear2, arear1, 28)
doSendDistanceShoot(arear3, arear4, 28)
doSendDistanceShoot(arear4, arear3, 28)
doSendDistanceShoot(arear5, arear6, 28)
doSendDistanceShoot(arear6, arear5, 28)
doSendDistanceShoot(arear7, arear8, 28)
doSendDistanceShoot(arear8, arear7, 28)
if not myEvent[cid] then addEvent(stopMyEvent, 10 * 1000, cid) end
myEvent[cid] = addEvent(doCreatureExecuteTalkAction, 1000, cid, 'test4', true)
return true
end

 

 

Detalhe 1: sua script podia ser bem reduzida

'' 2: se o player loga antes de executar a próxima talkaction (atráves do comando doCreatureExecuteTalkAction), vai dar erros no console.

'' 3: se o player usar o comando continuadamente, irá acumular efeitos e apenas o efeito do primeiro irá ser finalizado, os outros vão continuar rodando infinitamente

'' 4: o player fica repetindo as palavras da talkaction durante 10 segundos

'' 5: tem uma função no meio com callback "magic" que não existe, vai dar erros no console

 

Um jeito de se fazer que vai evitar muitos problemas:

 

 

local function myCustomFunction(cid, turn)
if not isCreature(cid) or (turn and turn <= 0) then return true end
local t = turn or 10
local ppos = getCreaturePosition(cid)
local arear1 = {x=ppos.x+7, y=ppos.y+5, z=ppos.z}
local arear2 = {x=ppos.x-7, y=ppos.y-5, z=ppos.z}
local arear3 = {x=ppos.x+7, y=ppos.y-5, z=ppos.z}
local arear4 = {x=ppos.x-7, y=ppos.y+5, z=ppos.z}
local arear5 = {x=ppos.x+7, y=ppos.y, z=ppos.z}
local arear6 = {x=ppos.x-7, y=ppos.y, z=ppos.z}
local arear7 = {x=ppos.x, y=ppos.y+5, z=ppos.z}
local arear8 = {x=ppos.x, y=ppos.y-5, z=ppos.z}
addEvent(magic, 2000, p1, p2, efeito)
doSendDistanceShoot(arear1, arear2, 3)
doSendDistanceShoot(arear2, arear1, 3)
doSendDistanceShoot(arear3, arear4, 3)
doSendDistanceShoot(arear4, arear3, 3)
doSendDistanceShoot(arear5, arear6, 3)
doSendDistanceShoot(arear6, arear5, 3)
doSendDistanceShoot(arear7, arear8, 3)
doSendDistanceShoot(arear8, arear7, 3)
doSendDistanceShoot(arear1, arear2, 4)
doSendDistanceShoot(arear2, arear1, 4)
doSendDistanceShoot(arear3, arear4, 4)
doSendDistanceShoot(arear4, arear3, 4)
doSendDistanceShoot(arear5, arear6, 4)
doSendDistanceShoot(arear6, arear5, 4)
doSendDistanceShoot(arear7, arear8, 4)
doSendDistanceShoot(arear8, arear7, 4)
doSendDistanceShoot(arear1, arear2, 28)
doSendDistanceShoot(arear2, arear1, 28)
doSendDistanceShoot(arear3, arear4, 28)
doSendDistanceShoot(arear4, arear3, 28)
doSendDistanceShoot(arear5, arear6, 28)
doSendDistanceShoot(arear6, arear5, 28)
doSendDistanceShoot(arear7, arear8, 28)
doSendDistanceShoot(arear8, arear7, 28)
addEvent(myCustomFunction, 1000, cid, t - 1)
end

function onSay(cid, words)

myCustomFunction(cid, 10)

return true
end

 

Editado por brun123
Link para o comentário
Compartilhar em outros sites

  • 0

Valeu brun123, primeiramente obrigado pelas dicas e em segundo por aperfeiçoar e corrigir o script, REP+.

 

LuckOake, para essa semana que vem ti dou REP+, estou "devendo" 4, inclusive um deles é seu.

 

Obrigado pela compreensão.

 

Duvida Sanada por:

 

brun123.

 

Reportado para moverem.

Editado por Newtonnotwen
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...