Ir para conteúdo

Teleportador - Salve Sua Posição E Teleport Para Ela


Yorun

Posts Recomendados

Esta action lhe permitirá salvar sua posição, ondi quer que você esteja, e ir caçar após terminar sua hunt você pode voltar para a cidade, por exemplo, com apenas um clique, isso se você estiver de vida e mana full, resumindo, se estiver no meio de um combat você provavelmente não vai conseguir teleportar de volta, pois sua mana e vida não estarão cheias...

 

Salve o script abaixo na sua patas scrips dentro de actions, encontrada em "data\actions\scripts"

Salve com o nome de "teleportador.lua"

Aqui vai o código com comentários da action

-- Item que teleporta um player para uma posição salva pelo próprio player --
-- Mais uma action feita por Yorun (Diego) --
-- Comentários por Yorun (Diego) --
-- Galera por favor não ligo se alguem for usar meu código, pelo contrário acho até legal, mas por favor deixem os meus créditos =) --
-- Obrigado! --

function onUse(cid, item, frompos, item2, topos)
-- início do bloco de inicialização de Variáveis --
level = getPlayerLevel(cid)
spos = nil
manamax = 0
manaatual = 0
vidamax = 0
vidaatual = 0
-- fim do bloco de inicialização de variáveis
-- início do bloco de if de escolha do item (4853/4854) --
if item.itemid == 4853 then
	-- bloco que testa se onde foi usado eh uma criatura viva --
	testplayer = isCreature(cid, item2.uid)
	-- fim do teste de criatura
	-- se for criatura viva então a posição é salva na varíavel (savpos) e depois salva no player --
	if testplayer ~= 0  then
		savpos = {x=getThingPos(item2.uid).x, y=getThingPos(item2.uid).y, z=getThingPos(item2.uid).z, stackpos=253}
		setPlayerStorageValue(cid, 111, savpos.x)
		setPlayerStorageValue(cid, 222, savpos.y)
		setPlayerStorageValue(cid, 333, savpos.z)
		doSendMagicEffect(topos, 26)
		doPlayerSendTextMessage(cid, 22, 'Posição: (X: ' .. savpos.x .. ' Y: ' .. savpos.y .. ' Z: ' .. savpos.z ..'). Foi salva com sucesso.')
		doTransformItem(item.uid,4854)
	-- se não for uma criatura viva, é eviada uma mensagem ao player --
	else
		doPlayerSendTextMessage(cid, 18, 'Você deve selecionar uma criatura viva.')
		doSendMagicEffect(frompos, 2)
	end
elseif item.itemid == 4854 then
	-- atribuição dos valores salvos anteriormente (savpos) --
	xpos = getPlayerStorageValue(cid, 111)
	ypos = getPlayerStorageValue(cid, 222)
	zpos = getPlayerStorageValue(cid, 333)
	spos = {x=xpos, y=ypos, z=zpos} 
	voc = getPlayerVocation(cid) -- obtendo a vocação do player --
	-- dependendo a vacação a formula de dano muda --
	if voc == 1 or voc == 5 then 
		manamax = ((level-8)*30)+35 -- fórmula de dano na mana, igualmente para as outras vocações, exceto pelos valores --
		manaatual = getPlayerMana(cid)
		vidamax = ((level-8)*5)+185 -- fórmula de dano na vida, igualmente para as outras vocações, exceto pelos valores --
		vidaatual = getPlayerHealth(cid)
		-- se a posição (X) salva anteriormente for igual a 0 então é envia uma mensagem --
		if xpos == 0 then 
			doPlayerSendTextMessage(cid, 18, 'Posição vazia, selecione uma posição para teleportar.')
			doSendMagicEffect(frompos, 2)
			doTransformItem(item.uid, 4853)
		-- se posição (X) for diferente de 0 e a mana estiver cheia, então vai teleportar o char para a posição salva, adicionar o dano na vida e mana. --
		elseif (manaatual >= manamax) and (vidaatual >= vidamax)then
			doTeleportThing(cid, spos)
			doTransformItem(item.uid, 4853)
			doSendMagicEffect(spos, 10)
			doPlayerSendTextMessage(cid, 22, 'Você foi teleportado para a posição: (X: ' .. xpos .. ' Y: ' .. ypos .. ' Z: ' .. zpos ..').')
			doPlayerAddMana(cid, -manamax/2)
			doPlayerAddHealth(cid, -vidamax/2)
			xpos = setPlayerStorageValue(cid, 111, nil)
		-- se a vida ou a mana não estiverem cheias, então vai ser enviada uma mensagem alertando que ambas precisam estar cheias. --
		elseif manaatual < manamax then
			if vidaatual < vidamax then
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida e de ' .. manamax ..' de mana para usar este recurso.')
			else
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. manamax ..' de mana para usar este recurso.')
			end
			doSendMagicEffect(frompos, 2)
		elseif vidaatual < vidamax then
			if manaatual < manamax then
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida e de ' .. manamax .. ' de mana para usar este recurso.')
			else
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida para usar este recurso.')
			end
			doSendMagicEffect(frompos, 2)
		end
	-- a partir deste ponto é exatamente igual, mudando apenas os valores, pois são vocações diferentes --
	elseif voc == 2 or voc == 6 then
		manamax = ((level-8)*30)+35
		manaatual = getPlayerMana(cid)
		vidamax = ((level-8)*5)+185
		vidaatual = getPlayerHealth(cid)
		if xpos == 0 then
			doPlayerSendTextMessage(cid, 18, 'Posição vazia, selecione uma posição para teleportar.')
			doSendMagicEffect(frompos, 2)
			doTransformItem(item.uid, 4853)
		elseif (manaatual >= manamax) and (vidaatual >= vidamax)then 
			doTeleportThing(cid, spos)
			doTransformItem(item.uid, 4853)
			doSendMagicEffect(spos, 10)
			doPlayerSendTextMessage(cid, 22, 'Você foi teleportado para a posição: (X: ' .. xpos .. ' Y: ' .. ypos .. ' Z: ' .. zpos ..').')
			doPlayerAddMana(cid, -manamax/2)
			doPlayerAddHealth(cid, -vidamax/2)
			xpos = setPlayerStorageValue(cid, 111, nil)
		elseif manaatual < manamax then
			if vidaatual < vidamax then
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida e de ' .. manamax ..' de mana para usar este recurso.')
			else
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. manamax ..' de mana para usar este recurso.')
			end
			doSendMagicEffect(frompos, 2)
		elseif vidaatual < vidamax then
			if manaatual < manamax then
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida e de ' .. manamax .. ' de mana para usar este recurso.')
			else
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida para usar este recurso.')
			end
			doSendMagicEffect(frompos, 2)
		end			
	elseif voc == 3 or voc == 7 then
		manamax = ((level-8)*15)+35
		manaatual = getPlayerMana(cid)
		vidamax = ((level-8)*10)+185
		vidaatual = getPlayerHealth(cid)
		if xpos == 0 then
			doPlayerSendTextMessage(cid, 18, 'Posição vazia, selecione uma posição para teleportar.')
			doSendMagicEffect(frompos, 2)
			doTransformItem(item.uid, 4853)
		elseif (manaatual >= manamax) and (vidaatual >= vidamax)then
			doTeleportThing(cid, spos)
			doTransformItem(item.uid, 4853)
			doSendMagicEffect(spos, 10)
			doPlayerSendTextMessage(cid, 22, 'Você foi teleportado para a posição: (X: ' .. xpos .. ' Y: ' .. ypos .. ' Z: ' .. zpos ..').')
			doPlayerAddMana(cid, -manamax/2)
			doPlayerAddHealth(cid, -vidamax/2)
			xpos = setPlayerStorageValue(cid, 111, nil)
		elseif manaatual < manamax then
			if vidaatual < vidamax then
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida e de ' .. manamax ..' de mana para usar este recurso.')
			else
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. manamax ..' de mana para usar este recurso.')
			end
			doSendMagicEffect(frompos, 2)
		elseif vidaatual < vidamax then
			if manaatual < manamax then
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida e de ' .. manamax .. ' de mana para usar este recurso.')
			else
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida para usar este recurso.')
			end
			doSendMagicEffect(frompos, 2)
		end
	elseif voc == 4 or voc == 8 then
		manamax = ((level-8)*5)+35
		manaatual = getPlayerMana(cid)
		vidamax = ((level-8)*15)+185
		vidaatual = getPlayerHealth(cid)
		if xpos == 0 then
			doPlayerSendTextMessage(cid, 18, 'Posição vazia, selecione uma posição para teleportar.')
			doSendMagicEffect(frompos, 2)
			doTransformItem(item.uid, 4853)
		elseif (manaatual >= manamax) and (vidaatual >= vidamax)then
			doTeleportThing(cid, spos)
			doTransformItem(item.uid, 4853)
			doSendMagicEffect(spos, 10)
			doPlayerSendTextMessage(cid, 22, 'Você foi teleportado para a posição: (X: ' .. xpos .. ' Y: ' .. ypos .. ' Z: ' .. zpos ..').')
			doPlayerAddMana(cid, -manamax/2)
			doPlayerAddHealth(cid, -vidamax/2)
			xpos = setPlayerStorageValue(cid, 111, nil)
		elseif manaatual < manamax then
			if vidaatual < vidamax then
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida e de ' .. manamax ..' de mana para usar este recurso.')
			else
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. manamax ..' de mana para usar este recurso.')
			end
			doSendMagicEffect(frompos, 2)
		elseif vidaatual < vidamax then
			if manaatual < manamax then
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida e de ' .. manamax .. ' de mana para usar este recurso.')
			else
				doPlayerSendTextMessage(cid, 18, 'Você precisa de ' .. vidamax ..' de vida para usar este recurso.')
			end
			doSendMagicEffect(frompos, 2)
		end
	-- se a voção do player for diferente das conhecidas, ou se o player não tiver vocação, então será enviada uma mensagem avisando que a vocação não pode usar este recurso. --
	else
		doPlayerSendTextMessage(cid, 18, 'Sua vocaçãoo não suporta este recurso evolua até o level 8 e adiquira uma vocação. Se você está acima do level 8 e ja possui uma vocação, contate seu GOD ou GM')
		doSendMagicEffect(frompos, 2)
	end
-- se o item não foi configurado corretamente será enviada uma mensagem avisando, no caso se os itens forem diferentes de (4853 ou 4854). --
else
	doPlayerSendCancel(cid, 'Erro! Item incorreto.')
	doPlayerSendTextMessage(cid, 18, 'Erro! Item incorreto. Altere seu arquivo "actions.xml" corretamente! Se você for um player alerte seu GOD ou GM.')
	doPlayerSendTextMessage(cid, 22, 'Desenvolvedor do Script: Diego (Yorun), Versão do Script: 1.4, Teste: ( OK ). Obrigado por usar meu script!')
	doSendMagicEffect(frompos, 2)
end
-- return 0, como é uma função então retorna um valor, no caso 0, pois não vamos precisar deste retorno futuramente. --
return 0
end
-- Fim =) By Yorun (Diego) --

 

Agora vai ser necessário alterar o "items.xml"

Antes é necessário você saber que os itens que utilizaremos aqui são:

>> Blank Paper ID:4853

>> Paper ID:4854

Abra seu arquivo "items.xml" que está localizado em "data\items" (Abra com bloco de notas), após abrir pressione as teclas "Ctrl+F" juntas... então digite 4853 e pressione a tecla "Enter".

Você vai encontrar o item da seguinte maneira:

<item id="4853" name="blank paper">
<attribute key="writeable" value="1"/>
<attribute key="weight" value="100"/>
<attribute key="maxTextLen" value="512"/>
<attribute key="writeOnceItemId" value="4854"/>
</item>

 

Então você apaga e esse trcho acima e substitui por esse:

<item id="4853" name="Yorun Teleporter">
<attribute key="weight" value="100"/>
</item>

 

Repita o processo de "Ctrl+F", mas desta vez digite o número 4854

Você vai encontrar o outro item que vai estar assim:

<item id="4854" name="paper">
<attribute key="writeable" value="1"/>
<attribute key="weight" value="100"/>
<attribute key="maxTextLen" value="512"/>
</item>

 

Você também deve apagar o trecho acima e colocar esse:

<item id="4854" name="Yorun Teleporter">
<attribute key="weight" value="100"/>
</item>

 

Pronto... estamos quese la só falta mais uma parte...

Mas antes quer explicar porque foi necessária a substituição acima...

Se não houver está substituição quando você clicar nestes itens eles abrirão uma janela para escrever textos na sua tela, igual aquela que abre quando você vai escrever no label das parcels...

 

Agora sim... a última parte... bem facil :)

Vá para sua pasta actions e abra(sempre em bloco de notas) seu arquivo "actions.xml", localizada em "data\actions"

e ADICIONE o seguinte trecho:

<action itemid="4853" script="teleportador.lua" /> -- Item que teleporta um player para uma posicao salva pelo mesmo --
<action itemid="4854" script="teleportador.lua" /> -- Item que teleporta um player para uma posicao salva pelo mesmo --

 

Pronto!! \o/ após ter feito isso é só usar... Lembrando que o ID dos itens são 4854 e 4853...

Abraços!! Espero que gostem!!

Link para o comentário
Compartilhar em outros sites

			setPlayerStorageValue(cid, 111, savpos.x)
		setPlayerStorageValue(cid, 222, savpos.y)
		setPlayerStorageValue(cid, 333, savpos.z)

Adorei esta parte.

Coise de GENIO.

AhuHeaUahE

 

-- Galera por favor não ligo se alguem for usar meu código, pelo contrário acho até legal, mas por favor deixem os meus créditos =) --

Eu também pensava assim.

Mas fui mal recebido no outro forum...

Não quero meus tutoriais lá.

 

SUPER APROVADO

 

 

XTibia_smile.gif

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

Concordo com o Conde..

Está ótimo rapaz..

Testei, e funcionou direitinho..

 

Você tem uma grande criatividade..

Nunca tinha visto algo parecido, ou que se igualasse ao seu Script..

 

Gostei, porque se não tiver com Mana e Vida cheios, não dá pra se teleportar..

Realmente muito bom!

 

Não se preocupa que deixei teus créditos aki no Script :)

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Valeu Gente é bom saber que alguem gostou do meus script... afinal num foi muito facil faze esse ai não... levou um pokinho de tempo uaHUAHAUhaUh...

mais uma vez Obrigado!!

Abraço a Todos!!

Link para o comentário
Compartilhar em outros sites

@Eigenlieb (nao consigo chamar voce de outro jeito *o*)

provavelmente os itens continuaram salvos, pois ele usou a funçao: setPlayerStorageValue().

o que faz com que salve a posiçao escolhida no proprio StorageValue do player.

só irá perder o ponto salvo se o player tiver a opçao de nao salvar (como nos ots enforceds)

 

@topic

poderia dar uma simplificada no script ;p

 

cya ^^

Link para o comentário
Compartilhar em outros sites

@André

Sim mesmo depois do player sair do jogo a posição salva vai continuar la... o único meio de não ter uma posição salva é:

1 - se ele nunca salvou uma posição (obvio xD);

2 - se ele possui 2 itens... salvou com 2 (os 2 se transformam) então ele usou um... este se transforma... e ele ainda tem um outro item pra poder usar... este segundo, se ele usar vai lhe enviar uma mensagem que uma posição precisa ser salva antes de teleportar... resumindo, não ha necessidade de ter 2 itens "engatilhados" apenas um por ves vai funcionar... fiz isso para não haver apelações de teleport...

 

@soulblaster

e... tipo... não num da pra simplificar o script... ele é grande por que eu fiz várias vezes testes de mesa para chegar a perfeição de não haver BUGs no meu script... então ao invés de exixtir bugs exixtem mensagens de erro auxiliando o player e evitando erros no servidor...

 

>>> os item usados são: blank paper... e paper... ta ali em cima no tuto...

Link para o comentário
Compartilhar em outros sites

  • 3 months later...
×
×
  • Criar Novo...