SK

Addevent(Sem Bugs)

Por Skymagnum, 22 de out. de 2012 em Tutoriais de Scripting

script
8
2k
SkymagnumS
22 de outubro de 2012 às 00:05

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 Outubro 22 por Skymagnum

xxxcrimsxxxX
22 de outubro de 2012 às 18:16

manow add no msn la preciso d ajuda

caoticC
22 de outubro de 2012 às 19:44

Tutorial simples mais pego a parte legal.

Os argumentos da função do addEvent utiliza (....) por isso fica os parâmetros da função normal :p

 

Tutorial Aprovado

VodkartV
22 de outubro de 2012 às 21:26

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)

22 de outubro de 2012 às 23:37

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 Outubro 22 por Demonbholder

SoulProstS
29 de outubro de 2012 às 20:45

Aqui não funcionou não sei pq... wacko.png

9 meses depois...
SirJuninhoS
24 de julho de 2013 às 04:05

cara, isso me ajudou muito!²

 

obrigado! :D

dalvorsnD
28 de julho de 2013 às 12:27

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