Ir para conteúdo
Entre para seguir isso  
Forger

[Função] Tapete Voador - 61 linhas

Recommended Posts

Forger    2
Forger

Olá.

Como eu acho completamente ridículo ser hipócrita, dizer que devemos compartilhar os códigos e eu mesmo não o fazer, estou aqui postando a função do Tapete Voador.

Você pode usá-lo em qualquer lugar.

IMPORTANTE: Onde quer que você o use, COLOQUE OS CRÉDITOS.

 

Não testei ainda, mas acho que deve funcionar.

Quem quiser mais desses scripts/funções, visite OpenLua(http://www.openlua.com), pois lá eu costumo postar minhas funções anteriormente.

Créditos: Forger (eu)

Sintaxe:

function moveCarpet(cid, spawnDelay, spawnPos, spawnLookDir, endPos)

spawnDelay: Em milisegundos. Se você quer que seu tapete se mova de 5 em 5 segundos, coloque 5000. (Segundos x 1000)

spawnPos: A primeira posição para qual o tapete irá.

spawnLookDir: Coloque a primeira direção que o tapete irá tomar.(0=norte, 1=leste,2=sul,3=oeste)

endPos: A última posição que o tapete irá. Quando ele chegar a essa posição, o player será teleportado para um andar abaixo.

 

Implementando:

 

Adicione isso ao final do seu global.lua -> 61linhas.

function moveCarpet(cid, spawnDelay, spawnPos, spawnLookDir, endPos)
local pPos = getCreaturePosition(cid)
local position = {nW, n, nE, w, sW, s, sE, e, center}
local ids = {nW={1794,{x=pPos.x-1, y=pPos.y-1, z=pPos.z, stackpos=1}},n={1795, {x=pPos.x, y=pPos.y-1, z=pPos.z, stackpos=1}},nE={1796,{x=pPos.x+1, y=pPos.y-1, z=pPos.z, stackpos=1}},w={1797, {x=pPos.x-1, y=pPos.y, z=pPos.z, stackpos=1}},center={1798,{x=pPos.x, y=pPos.y, z=pPos.z, stackpos=1}},e={1799, {x=pPos.x+1, y=pPos.y, z=pPos.z, stackpos=1}}, sW={1800,{x=pPos.x-1, y=pPos.y+1, z=pPos.z, stackpos=1}},s={1801,{x=pPos.x, y=pPos.y+1, z=pPos.z, stackpos=1}},sE={1802, {x=pPos.x+1, y=pPos.y+1, z=pPos.z, stackpos=1}}}
local Pos = {}
local nextPos, nextItem
   for i = 1, #position do
       Pos[position[i]] = getThingFromPos(ids[position[i]])
   end
   if (getPlayerLookDir(cid) == 0) then
       nextPos = {x=pPos.x, y=pPos.y-4, z=pPos.z}
   elseif (getPlayerLookDir(cid) == 1) then
       nextPos = {x=pPos.x+4, y=pPos.y, z=pPos.z}
   elseif (getPlayerLookDir(cid) == 2) then
       nextPos = {x=pPos.x, y=pPos.y+4, z=pPos.z}
   elseif (getPlayerLookDir(cid) == 3) then
       nextPos = {x=pPos.x-4, y=pPos.y, z=pPos.z}
   end
local nextItem = getThingFromPos(nextPos)
local function movePlayerToCarpet(p)
	doTeleportThing(cid, spawnPos)
	setPlayerLookDir(cid, spawnLookDir)
	mayNotMove(cid, 1)
	mayNotLogout(cid, 1)
end
local function createCarpet(p)
	for posCreate, _ in pairs(ids) do
		doCreateItem(ids[posCreate][1], 1, ids[posCreate][2])
	end
end
local function removeCarpet(p)
	for posRemove, _ in pairs(ids) do
		doRemoveItem(Pos[posRemove[2]].uid, 1)
	end
end
local function movePlayerToNext(p)
	doTeleportThing(cid, nextPos)
end 
local p = {cid=cid, Pos = Pos, ids=ids, nextPos=nextPos, pPos=pPos, nW=ids.nW, n=ids.n, nE=ids.nE, w=ids.w, sW=ids.sW, s=ids.s, sE=ids.sE, e=ids.e, center=ids.center, spawnPos=spawnPos, position=position, nextItem=nextItem}
local delay = 100
local ground = {x=pPos.x, y = pPos.y, z=pPos.z, stackpos=0}
if (isPlayer(cid)) then
	addEvent(movePlayerToCarpet, delay, p)
	repeat
		if (ground.actionid > 0) then
			setPlayerLookDir(cid, ground.actionid - 100)
		end    
		local spawnDelay2 = delay + 100
		addEvent(movePlayerToNext, delay, p)
		addEvent(createCarpet, delay, p)
		addEvent(removeCarpet, spawnDelay2, p)        
		delay = spawnDelay + delay
	until (nextPos == endPos)
	removeCarpet(p)
	doTeleportThing(cid, {x=endPos.x, y=endPos.y, z=endPos.z-1})
	mayNotMove(cid, 0)
	mayNotLogout(cid, 0)
	return true
end
return false
end

 

Tutorial: Como fazê-lo funcionar!

 

A posição spawnPos tem que ser em um andar livre para o caminho. Então, devemos colocar o ID do caminho, que será 460. Você tem que fazer um quadrado com esse item em seu mapa, pulando de 4 em 4 SQM.

 

Olhe para a seguinte imagem:

carpet1fn0.jpg

 

Se você quiser que mude de direção , no centro do quadrado, faça o seguinte:

carpet2qu1.jpg

Entenda: Coloque a direção que você quer somada a 100. Então, se você quer que ele vá para o sul, coloque 102 (100 + 2(sul)).

 

Exemplo de uso: (movement)

function onStepIn(cid, item, pos)
   if ((item.uid == XXXX) and (isPlayer(cid)))then
       moveCarpet(cid, 500, {x=xxx, y=yyy, z=z}, 2, {x=XXX, y=YYY, z=Z})
       return true
   end
   return false
end

Editado por Forger
Reduzi a função de 76 linhas para 61 linhas.

Compartilhar este post


Link para o post
HenneT    2
HenneT

Quando tiver tempo procuro adicionar aqui no meu OT :)

 

 

 

Abraços HeNNEt B)\\

Compartilhar este post


Link para o post
Nord    2
Nord

Caramba, muito bom e só em 76 linhas, aprovado e doado OT$.

Compartilhar este post


Link para o post
Forger    2
Forger

@up

Na verdade, agora está em 61 linhas. :)

Nem precisa dos OT$.

 

@todos

Agradecido, espero que ajude vocês.

Aos poucos, estou fazendo updates, a fim de diminuir o code e ficar de maior dinamização/eficiência/rapidez. :D

Compartilhar este post


Link para o post
Nietzsch    0
Nietzsch

Muito bom o Script....Pena que ñ jogo mais tibia!^^

Compartilhar este post


Link para o post
Raphael Carnaúba    1
Raphael Carnaúba

Muito bom Forger! Parabéns ;)

Continue assim.

Compartilhar este post


Link para o post
Nandonalt    0
Nandonalt

Tem como fazer um para Um Mirage 8.0?

No meu não funfou...

 

Da erro no console e n loada o global.lua e da MTTO bug nas spells actiosn e talz...

 

 

Tem como vc fazer um simplificado?

Compartilhar este post


Link para o post
Kaddor    0
Kaddor

Não está funcionando..

não sei se funcionava antes de vc diminuir o número de linhas ou algo assim, mas atualmente não tá..

já tentei mexer aqui pra ver se funciona, mas não tá dando..

Compartilhar este post


Link para o post
Forger    2
Forger

@Kaddor

Verdade. O fato é que antes estava funcionando, daí fui tentar diminuir o nº de linhas, e agora não está mais.

Estou desenvolvendo um novo via OOP e classes. :) Logo estarei editando o tópico.

Compartilhar este post


Link para o post
Caiobr    0
Caiobr

orra aqui não funciono..!

@Forger poderia me ajudar?

Aries XML 0.4.5

Compartilhar este post


Link para o post
Fadi    0
Fadi
Tem como fazer um para Um Mirage 8.0?

No meu não funfou...

 

Da erro no console e n loada o global.lua e da MTTO bug nas spells actiosn e talz...

 

 

Tem como vc fazer um simplificado?

 

Procure colocar em um arquivo lua, coloque em sua pasta data e acrescente um doFile no seu global.lua . Provavelmente assim vc conseguirá usar o script. ^^

Compartilhar este post


Link para o post
Mush    0
Mush

Pow velho ajudou mto ;)

Compartilhar este post


Link para o post
UrsO    0
UrsO

Estranho só você ter dito que não testou, já que um script deste tamanho, não há como ter certeza que iá funcionar sem testa-lo.

Mas você, foi o único que deu instruções de como usar, isso é muito legal de sua parte.

 

Aguardo você reformular o script, como dito que faria.

Compartilhar este post


Link para o post
Forger    2
Forger

Agora, acredito já estar funcionando corretamente, não dá mais erro no global.lua, como antes. :P

 

Obrigado aí pelo elogio, testem aí o script. :P

Compartilhar este post


Link para o post
maniaco93    0
maniaco93

adorei u script mas eu queria sabe como eu faço pra botar 6x6 e com as bordas

se de pra ajudar Grato.

dai posta aki ou manda PM

 

Obrigado desde ja. :bye:

 

 

 

B=borda

 

B B B B B B

B n n n n B

B n n n n B

B n n n n B

B n n n n B

B B B B B B

Compartilhar este post


Link para o post
Roger    0
Roger

Bem Rox

Adicionei no meu OT e Gostei

 

Parabens

Nota 10

Compartilhar este post


Link para o post
vvv    0
vvv

N consegui,como faz pra ativar o comando?

Coloca action id no mei do tapete? Dai executa stepin nele,dai qndo pisa ele sobe?

E ali no comando de ativar ali,ta XXXX,seria o actionid? Mas pq ta itemid ?

Nossa to boiando,por enqto eu adicionei e n deu nenhum erro,só q n funciono tbm,talvez pelo fato de eu n tar sabendo ativar o comando.

Aguardo resposta,e parabéns pelo script de qlqr forma.

Até mais.,

 

 

-EDITED-

Consegui executar a função colocando uniqueid no chão xP,num tinha visto o "unid". xD

Agora executa a função mas da o seguinte erro:

Lua Script Error: [MoveEvents Interface]

data/movements/scripts/tapete.lua:onStepIn

 

data/global.lua:801: attempt to call global 'geThingFromPos' <a nil value>

 

Oq sera q eh? Consegue axar esse erro?

Editado por vvv

Compartilhar este post


Link para o post
MotoBoy    0
MotoBoy

@Forger

ótimo cara

parabéns

ficou impecável =P

e pequeno!!

 

mais ele só anda em 1 direção?

e outra.. eu preciso colocar 4 tapetes? num posso colcoar 1 soh? =]

 

flws!! vlw!~~

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×