NO

Tutorial Addevent E Stopevent

Por noobinhu, 28 de nov. de 2008 em Tutoriais de Scripting

script
5.0 (1)
15
8.1k
noobinhuN
28 de novembro de 2008 às 08:21

Bom, este tutorial ajudará muitas pessoas que têm dúvidas nessas functions, que são bem simples, basta prestar um pouco de atenção, enviar os parâmetros corretamente para a nova function a ser feita e usá-los.

 

Primeiramente:

 

addEvent(function, time, parameters)

 

Explicação:

function - function a ser executada

time - o tempo em millisegundos para executar a função (1000 = 1 segundo)

parameters - parâmetros a ser passados da function normal para a outra

 

Exemplo de uso:

 

function onStepIn(cid, item, pos)

parameters = {cid=cid, item=item, pos=pos} -- enviar todos parâmetros necessários dentro de um array

addEvent(talk, 1000, parameters)

end

 

 

function talk(parameters)

doSendAnimatedText(parameters.pos, 'Teste de addEvent', 180)

end

Note como usar a variável pos que foi passada dentro de um array, ainda é usada como se estivesse no array, parameters.pos, assim você deve acessar todos parâmetros que foram passados, estes parâmetros são como variáveis e guardam os mesmos valores que tinham na function onStepIn, para acessar cid e pos, seria parameters.cid e parameters.pos

 

Agora explicado o addEvent, explicarei o stopEvent, usado para parar a execução de uma function de addEvent.

 

stopEvent(eventID)

 

eventID - variável contendo o addEvent

 

Exemplo de uso:

 

function onStepIn(cid, item, pos)

parameters = {cid=cid, item=item, pos=pos} -- enviar todos parâmetros necessários dentro de um array

addEvent(talk, 1000, parameters)

end

 

 

function talk(parameters)

doSendAnimatedText(parameters.pos, 'Teste de addEvent', 180)

variavel_addEvent = addEvent(talk, 5000, parameters)

end

 

function onStepOut(cid, item, pos)

stopEvent(variavel_addEvent)

end

 

Note novamente como usar a variável pos que foi passada dentro de um array, ainda é usada como se estivesse no array, parameters.pos, assim você deve acessar todos parâmetros que foram passados, estes parâmetros são como variáveis e guardam os mesmos valores que tinham na function onStepIn, para acessar cid e pos, seria parameters.cid e parameters.pos

 

O mesmo script, porém neste script agora, primeiramente após pisar no tile e esperar 1 segundo exibirá uma mensagem e enquanto não sair de 5 em 5 segundos aparecerá a mesma mensagem. Após sair do tile, o addEvent será parado e então as mensagens não serão mais exibidas.

 

Ambas functions são muito úteis se usadas corretamentes em sistemas diferentes.

 

Exercício:

 

Descubra o erro nesta function:

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

parameters = {cid = cid, fromPosition = fromPosition}

addEvent(magicEffect, 1000, parameters)

end

 

function magicEffect(parameters)

doSendMagicEffect(fromPosition, 1)

end

 

Esta function seria ativada ao usar o item e um segundo depois apareceria o efeito de número 1 de onde o player estava, porém não funciona, o erro é muito bobo, apesar de ser um dos erros mais cometidas nestas functions.

 

Resposta no spoiler em negrito:

function onUse(cid, item, fromPosition, itemEx, toPosition)

parameters = {cid = cid, fromPosition = fromPosition}

addEvent(magicEffect, 1000, parameters)

end

 

function magicEffect(parameters)

doSendMagicEffect(parameters.fromPosition, 1)

end

 

Um erro muito bobo e comum, que no início poderá ocorrer diversas vezes.

 

Depois deste tutorial, espero que as dúvidas sobre estas functions tenham acabado. :)

 

Mais dúvidas? Postem!

Editado Novembro 28 por noobinhu

teslaT
28 de novembro de 2008 às 09:31

Muito bom, realmente vai ajudar

Aprovado

RedZLR
28 de novembro de 2008 às 13:31

Aprovado, parabéns!

1 mês depois...
alex008A
15 de dezembro de 2008 às 11:24

to querendo fazer uma talkaction com addEvent

como seria o msm script so q pra talk action

function onStepIn(cid, item, pos)

parameters = {cid=cid, item=item, pos=pos} -- enviar todos parâmetros necessários dentro de um array

addEvent(talk, 1000, parameters)

end

 

 

function talk(parameters)

doSendAnimatedText(parameters.pos, 'Teste de addEvent', 180)

end

 

 

PS: noobinhu, nao recebi nenhuma aceitação aki no MSN

alexsndf@homail.com

Editado Dezembro 15 por alex0007

noobinhuN
15 de dezembro de 2008 às 11:46

Adicionei novamente, não vi nada de errado no script, o que acontece? Qual erro?

alex008A
15 de dezembro de 2008 às 11:51

cara nao tem error, so q o script ta pra movements eu queria um pra talkaction

pra isso precisa mudar algumas coisas

 

exemplo:

function onStepIn

 

para:

function onSay

 

mais tentei mudar aki mais n deu certo e to pedindo sua ajuda

e novamente nao apareceu nenhuma soliçitação aki no msm

 

me passa o seu

noobinhuN
15 de dezembro de 2008 às 12:12

Dúvida resolvido, tem dúvidas? Poste aqui, não tenha medo :)

EventideE
15 de dezembro de 2008 às 12:37

achei um pequeno erro, você chamou a função antes dela ser declarada...

declare ela primeiro e depois chame, da mais certo.

ou melhor ainda, coloque a função como local. :-)

Editado Dezembro 15 por Eventide

Felp321F
20 de dezembro de 2008 às 09:44

Olá. Isto me ajudou bastante. Mas eu não entendi muito bem este negócio de parameters. Você podiaq me mandar uma mensagem me explicando um pouco melhor? Obrigado.

Atenciosamente,

Felipe.

noobinhuN
20 de dezembro de 2008 às 09:54

Eventide, isto não importa em LUA acho, eu também faço assim.

 

Felp~

Os parâmetros são as variáveis que estavam na function de destino (principal) e você quer usar na function que foi usado o addEvent, me fale melhor o que você não entendeu, mais tarde eu respondo melhor.

1 mês depois...
25731652
16 de janeiro de 2009 às 11:36

Parabens cara!

Eu realmente estava precisando dessa função e não tinha idéia de como usá-la!

Adorei!!

1 mês depois...
LwkassL
07 de fevereiro de 2009 às 10:06

Valeu, me ajudo com duvidas que tinha sobre essa função :smile_positivo:

SkybladeS
08 de fevereiro de 2009 às 04:29

Cara...to tendo um problemao....

 

eu tentei usa esses "addeevent" num script... soh q eu quero fazer funcionar 2 ao mesmo tempo...

 

ex: uma bomba... eu clico no item e ele começa...3..2..1..boom

 

soh q qndo eu ativo 2 juntos eles parecem que se unem...

nao sei o que fazer...

ZaforZ
08 de fevereiro de 2009 às 10:22

PARABÉNS!

Tutorial bem organizado mereceu ser Aprovado :D

1 mês depois...
robson10R
18 de março de 2009 às 16:21

Esse tutorial esta muito bom so que....

eu quero pedir um favor

pra vc ensinar como colocar ele num script exemplo!!!

aki esta o script da shovel se der pra termina ele pra mim eu agradeço.

 

local holes = {468, 481, 483, 489}

function onUse(cid, item, fromPosition, itemEx, toPosition)

parameters = {cid=cid, item=item, pos=pos}

if isInArray(holes, itemEx.itemid) == TRUE then

doTransformItem(itemEx.uid, itemEx.itemid + 1)

doDecayItem(itemEx.uid)

elseif itemEx.itemid == 231 then

local rand = math.random(1, 100)

if rand == 1 then

doCreateItem(2159, 1, toPosition)

elseif rand > 95 then

doSummonCreature("Scarab", toPosition)

end

doSendMagicEffect(toPosition, CONST_ME_POFF)

 

elseif itemEx.itemid == 4526 and itemEx.actionid == 3334 then -- AKI ESTA A PARTE QUE NAO FUNCIONA!!!

doTransformItem(itemEx.uid, 469)

doDecayItem(itemEx.uid)

addEvent(back,1*60*1000,parameters)

else

return FALSE

end

return TRUE

end

 

function back(parameters)

doTransformItem(itemEx.uid, 4526)

 

end