Addevent(Sem Bugs)

Skymagnum
em Tutoriais de Scripting

Skymagnum

Hamburguer
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 02/08/12Posts: 1025Char no Tibia: Maurolkit

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.

jeoz.png

xxxcrimsxxx

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 19/09/08Posts: 39Char no Tibia: nohave

manow add no msn la preciso d ajuda

caotic

Afinal de contas,sou um mordomo e tanto
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 04/03/11Posts: 1599Char no Tibia: No Have

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

Vodkart

Sumus Validus
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 21/05/10Posts: 3406Gênero: Masculino

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)

bossisg.png

Demonbholder

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 13/10/08Posts: 1551Char no Tibia: Demonbholder

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)

Oie :D

SoulProst

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 26/10/07Posts: 25Char no Tibia: Hayden Almeida

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

Hayden Almeida



Scripter

Meu Email

 

Vídeo Card: Radeon HD 6850

HD: 1 TERA SATA 2 + 80 GB DATA

Processador: Phenom X6 1100T 3.3Ghz

Memória: Kingston 8 GB DDR3 1333 Mhz

Monitor: Samsung SA300 Slim '21,5 LED

SirJuninho

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/05/09Posts: 52

cara, isso me ajudou muito!²

 

obrigado! :D

dalvorsn

õ/
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 21/12/11Posts: 750Gênero: Masculino

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

"A covardia coloca a questão: É seguro? O comodismo coloca a questão: É popular? A etiqueta coloca a questão: é elegante? Mas a consciência coloca a questão, É correto? E chega uma altura em que temos de tomar uma posição que não é segura, não é elegante, não é popular, mas o temos de fazer porque a nossa consciência nos diz que é essa a atitude correta."

(Martin Luther King)