TO
dúvida

Como adicionar delay nesse código? REP+

Por totonho18, 12 de jan. de 2016 em Scripts

talkaction
9
1.8k
totonho18T
12 de janeiro de 2016 às 03:52

É o seguinte, eu consegui sem problemas criar um código que teletransporta o player pro templo de sua cidade se ele não tiver com batlle, porém o tp é instantâneo, como eu faria pra add uma pausa nesse código? ou seja, pra ele levar x segundos antes de teleportar. Desde já agradeço, REP+

Eis o código

function onSay(cid, words, param, channel)
	
local pos = getPlayerTown(cid)
local fight = hasCondition(cid, CONDITION_INFIGHT)
local townpos = getTownTemplePosition(pos)

if fight == false then
	doPlayerSendTextMessage(cid, 29, "Voce foi teleportado com sucesso!")
	doTeleportThing(cid, townpos)
	doSendMagicEffect(getPlayerPosition(cid), 10)
	else	
		doPlayerSendTextMessage(cid, 29, "Espere o battle sair")	
		doSendMagicEffect(getPlayerPosition(cid), 2)		
end

	return true
end

É isso ai, me ajudem ai, sou programador clássico, mas to aprendendo a programar em lua agora, as vezes me perco um pouco! Abração...

Editado Janeiro 12 por Totonho18

SkullsS
12 de janeiro de 2016 às 08:45
Melhor resposta

Olá,

Editado, ops não vi que tinha um efeito, estou no celular.

 

Basta substituir:

doTeleportThing(cid, townpos)

doSendMagicEffect(getPlayerPosition(cid), 10)

Por

addEvent(function()

doTeleportThing(cid, townpos)

doSendMagicEffect(getPlayerPosition(cid), 10)

end, Tempo, cid, townpos)

 

Abraços,

Editado Janeiro 12 por Skulls

Night WolfN
12 de janeiro de 2016 às 12:17

O código acima irá funcionar e servir o propósito, porém uma boa prática quando trabalhamos com functions no addEvent é re-checar os parâmetros que iremos utilizar do callback. Em outras palavras, se vamos utilizar o cid na function, temos que checar se ele ainda existe quando o addEvent for chamado.

addEvent(function()
   if isCreature(cid) then
      doTeleportThing(cid, townpos)
      doSendMagicEffect(getPlayerPosition(cid), 10)
   end
end, 5 * 1000, cid, townpos) -- 5 * 1000 representa 5 segundos ate teleportar.
SkullsS
12 de janeiro de 2016 às 12:21

 

O código acima irá funcionar e servir o propósito, porém uma boa prática quando trabalhamos com functions no addEvent é re-checar os parâmetros que iremos utilizar do callback. Em outras palavras, se vamos utilizar o cid na function, temos que checar se ele ainda existe quando o addEvent for chamado.

addEvent(function()
   if isCreature(cid) then
      doTeleportThing(cid, townpos)
      doSendMagicEffect(getPlayerPosition(cid), 10)
   end
end, 5 * 1000, cid, townpos) -- 5 * 1000 representa 5 segundos ate teleportar.

Bem lembrado wolf, eu estava no celular ficou meio difícil fazer bonitinho.

Isso evita brechas que geram aqueles warnings chatos no console! ^^

Rep :)

totonho18T
12 de janeiro de 2016 às 16:04

Ta ótimo, REP+ pros dois, achei interessante a função addEvent, eu já tinha visto muitas vezes mas não sabia a real função dela, essa função serve pra fazer callbacks de outras? outra coisa, eu posso colocar mais callbacks nela? Ex

addEvent(function()
   if isCreature(cid) then
	  doPlayerSendTextMessage(cid, 29, "Voce foi teleportado com sucesso!")
      doTeleportThing(cid, townpos)
      doSendMagicEffect(getPlayerPosition(cid), 10)
   end
end, pausa * 1000, cid, townpos,call4,call5........,calln) -- é permitido essa sintaxe?

obs usei call como uma chamada de instrução, e pode ela er qualquer comando

SkullsS
12 de janeiro de 2016 às 16:47

Ta ótimo, REP+ pros dois, achei interessante a função addEvent, eu já tinha visto muitas vezes mas não sabia a real função dela, essa função serve pra fazer callbacks de outras? outra coisa, eu posso colocar mais callbacks nela? Ex

addEvent(function()
   if isCreature(cid) then
	  doPlayerSendTextMessage(cid, 29, "Voce foi teleportado com sucesso!")
      doTeleportThing(cid, townpos)
      doSendMagicEffect(getPlayerPosition(cid), 10)
   end
end, pausa * 1000, cid, townpos,call4,call5........,calln) -- é permitido essa sintaxe?

obs usei call como uma chamada de instrução, e pode ela er qualquer comando

Sim, isso mesmo, ela serve para fazer callbacks.

Você pode colocar a função que quiser nela. Ao invés de fazer como eu fiz, você pode criar uma função X e chamar ela pelo addEvent:

function X(a, b, c)

end

addEvent(X, tempo, a, b, c)

 

Você pode, ainda, chamar funções pre-definidas pelo addEvent:

addEvent(doSendMagicEffect, tempo, getPlayerPosition(cid), 10)

totonho18T
12 de janeiro de 2016 às 17:37

Muito Obrigado! :D

DanihcvD
12 de janeiro de 2016 às 17:40

@@totonho18, por favor, clique em Resolvido no post que melhor respondeu sua dúvida.

 

*esse botão se encontra no rodapé de cada post.

CaronteC
12 de janeiro de 2016 às 18:35

Tópico Movido
Este tópico foi movido de "OTServScriptingSuporte Scripting"
para "OTServScriptingSuporte ScriptingPedidos e dúvidas resolvidos - Scripting".