Ir para conteúdo

Addevent(Sem Bugs)


Skymagnum

Posts Recomendados

Tipo: Tutorial.

Autor: Skymagnum(Skyforever).

Encina: Como usar corretamente o addEvent sem bugs e erros no console.

 


 

Creio que todos vocês conheçam a função addEvent senão vou explicar, ela funciona da seguinte maneira

 

addEvent(function, seconds, ...).

 


 

Bom se você usar a função doSendMagicEffect(position, effect) ela vai soltar o efeito na hora correto?

 

 

com addEvent você pode fazer o efeito soltar depois se usar corretamente

 

exêmplo de uso incorreto:

 


 

addEvent(doSendMagicEffect, getThingPos(cid), 5 * 1000, 35)

 

 

agora veremos do jeito certo:

 


 

addEvent(doSendMagicEffect, 5 * 1000, getThingPos(cid), 35)

.

 

O addEvent se baseia em

 

addEvent(função, tempo, aqui você segue os parâmetros da função normalmente como se fosse sem o addEvent).

 


 

Como vocês já sabem se o addEvent envolver cid e a pessoa logar/morrer pode dar vários erros no console mais acalme-se para isso há uma solução você somente deve criar uma função e nela colocar:

 

if isCreature(cid) then

 


 

Exêmplo de um script que irá dar erro se a pessoa logar/morrer.

 

function onSay(cid, words, param)

local pos = {x = 1, y = 2, z = 3}

if getPlayerStorageValue(cid, 12345) > 0 then

addEvent(doTeleportThing, 10 * 1000, cid, pos)
setPlayerStorageValue(cid, 12345, 0)

end
return true
end

.

 


 

Se a pessoa logar/morrer nesse período estipulado no addEvent irá dar erro no console de creature not found.

 


 

Agora um jeito de arrumar seria criando uma função e colocando if isCreature(cid) then nela ficando assim:

 

function doTeleportThing2(cid, toPos, time)

if isCreature(cid) then

addEvent(doTeleportThing, time * 1000, cid, toPos)

end
return true
end

 

function onSay(cid, words, param)

local pos = {x = 1, y = 2, z = 3}

if getPlayerStorageValue(cid, 12345) > 0 then

doTeleportThing2(cid, pos, 10)
setPlayerStorageValue(cid, 12345, 0)

end
return true
end

 


 

Bom é meu primeiro tutorial então espero que gostem.

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

a única coisa do addEvent que muda é só um parâmetro que no caso é o delay times em primeiro lugar e depois segue a ordem normal

 

 

exemplos:

 

vou usar delay sendo como 1 segundo (1000)

 

doCreatureAddMana(cid, mana) --> parâmetros: cid e mana

addEvent(doCreatureAddMana, 1000, cid, mana)

 

doBroadcastMessage(message, type) --> parâmetros: message e type

addEvent(doBroadcastMessage, 1000, message, type)

 

doShowTextDialog(cid, itemid, text) --> parâmetros: cid, itemid, text

addEvent(doShowTextDialog, 1000, cid, itemid, text)

Link para o comentário
Compartilhar em outros sites

Lembrando que, quando você usa a seguinte estrutura:

 

addEvent(print, 10000, getPlayerPosition(cid).x)

 

vai ser printado a posição x que ele estava no momento em que o addEvent foi executado e não a posição de 10 segundos depois.

 

Para printar a posição x que o player vai estar em 10 segundos, deve-se usar a seguinte estrutura:

 

addEvent(function() print(getPlayerPosition(cid).x) end, 10000)

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

  • 8 months later...

Ta errado seu exemplo cara,

Tipo: Tutorial.

function doTeleportThing2(cid, toPos, time)

if isCreature(cid) then

addEvent(doTeleportThing, time * 1000, cid, toPos)

end
return true
end
function onSay(cid, words, param)

local pos = {x = 1, y = 2, z = 3}

if getPlayerStorageValue(cid, 12345) > 0 then

doTeleportThing2(cid, pos, 10)
setPlayerStorageValue(cid, 12345, 0)

end
return true
end

 

Isso também vai dar erro cara, tu ta usando addevent dentro da função auxiliar, voce ta verificando se é criatura e executando a função addevent

Voce tem que usar o addevent, com a função nele contida verificando e teleportando, ou fazendo a ação que for imediatamente, ou seja sem usar addEvent dentro da função auxiliar

 

function doTeleportThing2(cid, toPos, time)

	if isCreature(cid) then
		doTeleportThing(cid, toPos)
	end
	
	return true
end

function onSay(cid, words, param)

	local pos = {x = 1, y = 2, z = 3}
	local time = 10
	
	if getPlayerStorageValue(cid, 12345) > 0 then
		addEvent(doTeleportThing2, time * 1000, cid, pos, 10)
		setPlayerStorageValue(cid, 12345, 0)
	end
	
	return true
end
Assim que deveria ser
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...