local event = addEvent(doPlayerAddItem, 1000, cid, 2160, 100) addEvent(stopEvent(event), 10000)
Provavelmente é assim.
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

local event = addEvent(doPlayerAddItem, 1000, cid, 2160, 100) addEvent(stopEvent(event), 10000)
Provavelmente é assim.
Editado Setembro 7 por LuckOake
info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80

Não funcionou.
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

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 Setembro 7 por LuckOake
info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80

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.
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

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 Setembro 7 por LuckOake
info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80

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.
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

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 Setembro 7 por LuckOake
info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80

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
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 Setembro 7 por brun123
info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80

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 Setembro 7 por Newtonnotwen
info
Grupo: Herói
Registrado: 05/11/07
Posts: 544
Reputação: +70

Dúvida sanada, tópico movido.
Atenciosamente, Critical.
info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80
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.