DE

[Função] Doremovesummon

Por Demonbholder, 27 de fev. de 2011 em Mods, funções e outros

otserv
tibia
11
3.4k
27 de fevereiro de 2011 às 13:26

Faala pessoal do XTibia! Hoje venho aqui postar a primeira função que eu fiz, adicionei na lib e deu certo HAHA. Eu não encontrei nenhum erro, então vai lá a explicação:

 

Utilidade: A função summona um monstro (que não ataca o jogador) e remove o monstro depois de tantos segundos.

 

Foi bem fácil, em data/lib abre o arquivo functions e cola isto no final, ou em algum lugar dele:

 

function doRemoveSummon(cid, name, time)

if isMonster(getCreatureByName(name)) then
	if (type(time) == "number" and time) > 0 then
		doSummonMonster(cid, name)
			for _, monsters in ipairs(getCreatureSummons(cid)) do
				addEvent(doRemoveCreature, time*1000, monsters)
			end
			return TRUE
	end
        return error("Time must be a number higher than 0!")
end
return error("Creature not found!")
end

 

Então, bem fácil certo? Vamos aos exemplos de uso:

 

Talkaction:

 

function onSay(cid, words, param)

if param == '' then
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
	return TRUE
end
return doRemoveSummon(cid, param, 10)
end

 

Action:

 

function onUse(cid, item)

local sec = 30
local mon = 'demon'

if getPlayerStorageValue(cid, 15692) - os.time() <= 0 then
	doRemoveSummon(cid, mon, sec)
	doSendAnimatedText(getPlayerPosition(cid), "Your pet will die in "..sec.." seconds.", TEXTCOLOR_ORANGE)
	setPlayerStorageValue(cid, 15692, sec + os.time())
end
return TRUE
end

 

É isso, bem simples mesmo, espero que ainda não exista algo assim, e lembrando que vai remover todos os summons, porque a função que eu usei é getPlayerSummons. Valeu.

Editado Fevereiro 28 por Demonbholder

pintopintoP
27 de fevereiro de 2011 às 14:34

Tem um bug nessa função caso o summon esteja morto retorna um erro:

(luaDoRemoveCreature) Creature not found

por causa do addEvent.

27 de fevereiro de 2011 às 14:43

É, assim como em qualquer script que tu use addEvent e a criatura morrer, mas só vai dizer que não achou a criatura, não acontece nada de mais. Se souber como eu poderia remover esse erro sem adicionar outra função, por favor, se manifeste.

godshiryuG
27 de fevereiro de 2011 às 20:58

MEU DEUS!

VO USA! JA TO PUIS NOO MEU OT!!

 

 

MUITO BOM MESMO MAN RECOMENDO AI EM GALERA!

RULOU!

HudsinH
27 de fevereiro de 2011 às 21:03

Ótimo Script Testado e aprovado! Muito legal para eventos :hi:

MatheusGladM
28 de fevereiro de 2011 às 06:20

em vez de print usa error(), so botar error(msg)

28 de fevereiro de 2011 às 22:04

Valeu pelo toque mkalo, editei lá ja.

thaliaT
28 de fevereiro de 2011 às 22:30

Boa função :D

1 mês depois...
satan666S
19 de março de 2011 às 08:31

Faala pessoal do XTibia! Hoje venho aqui postar a primeira função que eu fiz, adicionei na lib e deu certo HAHA. Eu não encontrei nenhum erro, então vai lá a explicação:

 

Utilidade: A função summona um monstro (que não ataca o jogador) e remove o monstro depois de tantos segundos.

 

Foi bem fácil, em data/lib abre o arquivo functions e cola isto no final, ou em algum lugar dele:

 

function doRemoveSummon(cid, name, time)

if isMonster(getCreatureByName(name)) then
	if (type(time) == "number" and time) > 0 then
		doSummonMonster(cid, name)
			for _, monsters in ipairs(getCreatureSummons(cid)) do
				addEvent(doRemoveCreature, time*1000, monsters)
			end
			return TRUE
	end
        return error("Time must be a number higher than 0!")
end
return error("Creature not found!")
end

 

Então, bem fácil certo? Vamos aos exemplos de uso:

 

Talkaction:

 

function onSay(cid, words, param)

if param == '' then
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
	return TRUE
end
return doRemoveSummon(cid, param, 10)
end

 

Action:

 

function onUse(cid, item)

local sec = 30
local mon = 'demon'

if getPlayerStorageValue(cid, 15692) - os.time() <= 0 then
	doRemoveSummon(cid, mon, sec)
	doSendAnimatedText(getPlayerPosition(cid), "Your pet will die in "..sec.." seconds.", TEXTCOLOR_ORANGE)
	setPlayerStorageValue(cid, 15692, sec + os.time())
end
return TRUE
end

 

É isso, bem simples mesmo, espero que ainda não exista algo assim, e lembrando que vai remover todos os summons, porque a função que eu usei é getPlayerSummons. Valeu.

 

 

Caso queira retirar essa mensagen de error por não encontrar o monstro devido a morte dele, faz o seguinte:

 

retira isso da função(doremovesummon) "doSummonMonster(cid, name)" deixa isso na talkaction ou qualquer outro lugar que summone o monstro.

Agora na talkaction ou qualquer outro que summone o monstro faça com que seja direcionado a função addevent() para a sua função(doremovesummon) nela você remove a função addevent() e deixa a doremovecreature() use a estrutura de controle if pra verificar se ainda está summonado o monstro.

 

Além de que o nome da função é doremovesummon() e nela cria um summon pra depois remover o que não condiz com o nome da função.

19 de março de 2011 às 12:20

O nome da função realmente não importa, se desejar, troque. Segundo, não importa o lugar onde aparecerá o erro, se o erro existir, é claro. Obrigado pela sugestão, mas essa foi a minha idéia inicial e definitiva para esta função.

 

OBS: Acho que é possível fazer o que você falou pela própria função doRemoveSummon. Depois eu tento.

 

EDIT:

 

Precisa quotar todo o tópico?

Editado Março 19 por Demonbholder

23 de março de 2011 às 00:35

Maravilhoso, graças a Deus, estava procurando isso mesmo...

 

Nossa vai ser muito util...

 

ganhou meu REP+