Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Informações do Script

Nome: Sistema de Barco

Autor: zathao

Testado em: The Forgotten Server Version 0.3.6 / Tibia 8.54

Descrição: Este script foi desenvolvido por mim exclusivamente para esse fórum.

Nele o jogador poderá viajar por uma rota pré-definida através de um barco.

Video Demonstrativo

Códigos e Instalação

O sistema irá apenas utilizar apenas 2 Npcs, facilitando ainda mais a instalação.

- Crie um arquivo chamado barco.lua em data/npc/scripts e adicione isso no arquivo:

 ----- ### Sistema de Navegação ### -----

----------------------------------------

-- Feito por: mfbcampgraf			 --

-- Msn: [email protected] --

-- Criado exclusivamente para Tibia King --

----------------------------------------





-------------------

-- Configurações --

-------------------





-- Velocidade de movimentação do barco

local velocidade = 2





-- Nome da rota

local rota = "caverna"



-- Valor da viagem em gold

local custo = 30



-----------------------

-- Codigo do Sistema --

-----------------------


function deletarBarco(barcoId, barcoPos)





for i=1,3 do

	 local item = getTileThingByPos(barcoPos[i])

	 doRemoveItem(item.uid)

end





end





function criarBarcoSul(barcoId, barcoPos)


for i=1,3 do

	 barcoPos[i].y = barcoPos[i].y+1

	 doCreateItem(barcoId[i], 1, barcoPos[i])

end


end





function criarBarcoNorte(barcoId, barcoPos)


for i=1,3 do

	 barcoPos[i].y = barcoPos[i].y-1

	 doCreateItem(barcoId[i], 1, barcoPos[i])

end


end





function criarBarcoLeste(barcoId, barcoPos)


for i=1,3 do

	 barcoPos[i].x = barcoPos[i].x+1

	 doCreateItem(barcoId[i], 1, barcoPos[i])

end


end





function criarBarcoOeste(barcoId, barcoPos)


for i=1,3 do

	 barcoPos[i].x = barcoPos[i].x-1

	 doCreateItem(barcoId[i], 1, barcoPos[i])

end


end


function navegarSul(cid, barcoId, barcoPos)

deletarBarco(barcoId, barcoPos)	

criarBarcoSul(barcoId, barcoPos)


local cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


doTeleportThing(cid, cancelAnimationPos)

doTeleportThing(cid, barcoPos[2])


local marPos = {x=barcoPos[2].x,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=0}

local mar = getTileThingByPos(marPos).actionid


if(mar==7001)then

	 deletarBarco(barcoId, barcoPos)


	 -- Virar peças de vertical para horizontal

	 barcoPos = {

		 {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3592,

		 3593,

		 3596

	 }	


	 criarBarcoLeste(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x+2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 1)


	 addEvent(navegarLeste, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7002)then

	 deletarBarco(barcoId, barcoPos)


	 -- Virar peças de vertical para horizontal

	 barcoPos = {

		 {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3592,

		 3593,

		 3596

	 }


	 criarBarcoOeste(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 3)


	 addEvent(navegarOeste, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7005)then	

	 deletarBarco(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)

elseif(mar==7006)then	

	 deletarBarco(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)	

else

	 addEvent(navegarSul, 500/velocidade, cid, barcoId, barcoPos)

end

end





function navegarNorte(cid, barcoId, barcoPos)


deletarBarco(barcoId, barcoPos)

criarBarcoNorte(barcoId, barcoPos)


local cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


doTeleportThing(cid, cancelAnimationPos)

doTeleportThing(cid, barcoPos[2])	


local marPos = {x=barcoPos[2].x,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=0}

local mar = getTileThingByPos(marPos).actionid


if(mar==7001)then

	 deletarBarco(barcoId, barcoPos)


	 -- Virar peças de vertical para horizontal

	 barcoPos = {

		 {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3592,

		 3593,

		 3596

	 }


	 criarBarcoLeste(barcoId, barcoPos)





	 cancelAnimationPos = {x=barcoPos[2].x+2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])		


	 doCreatureSetLookDirection(cid, 1)


	 addEvent(navegarLeste, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7002)then

	 deletarBarco(barcoId, barcoPos)


	 -- Virar peças de vertical para horizontal

	 barcoPos = {

		 {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3592,

		 3593,

		 3596

	 }


	 criarBarcoOeste(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 3)


	 addEvent(navegarOeste, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7005)then	

	 deletarBarco(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)

elseif(mar==7006)then	

	 deletarBarco(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)	

else

	 addEvent(navegarNorte, 500/velocidade, cid, barcoId, barcoPos)

end

end





function navegarLeste(cid, barcoId, barcoPos)


deletarBarco(barcoId, barcoPos)

criarBarcoLeste(barcoId, barcoPos)


local cancelAnimationPos = {x=barcoPos[2].x+2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


doTeleportThing(cid, cancelAnimationPos)

doTeleportThing(cid, barcoPos[2])


local marPos = {x=barcoPos[2].x,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=0}

local mar = getTileThingByPos(marPos).actionid


if(mar==7003)then

	 deletarBarco(barcoId, barcoPos)


	 -- Virar peças de horizontal para vertical

	 barcoPos = {

		 {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3587,

		 3588,

		 3591

	 }


	 criarBarcoNorte(barcoId, barcoPos)





	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 0)


	 addEvent(navegarNorte, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7004)then

	 deletarBarco(barcoId, barcoPos)


	 -- Virar peças de horizontal para vertical

	 barcoPos = {

		 {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3587,

		 3588,

		 3591

	 }


	 criarBarcoSul(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 2)				


	 addEvent(navegarSul, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7007)then	

	 deletarBarco(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)

elseif(mar==7008)then	

	 deletarBarco(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)	

else

	 addEvent(navegarLeste, 500/velocidade, cid, barcoId, barcoPos)

end

end





function navegarOeste(cid, barcoId, barcoPos)


deletarBarco(barcoId, barcoPos)

criarBarcoOeste(barcoId, barcoPos)


cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


doTeleportThing(cid, cancelAnimationPos)

doTeleportThing(cid, barcoPos[2])


marPos = {x=barcoPos[2].x,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=0}

mar = getTileThingByPos(marPos).actionid


if(mar==7003)then

	 deletarBarco(barcoId, barcoPos)


	 -- Virar peças de horizontal para vertical

	 barcoPos = {

		 {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3587,

		 3588,

		 3591

	 }


	 criarBarcoNorte(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 0)





	 addEvent(navegarNorte, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7004)then

	 deletarBarco(barcoId, barcoPos)


	 -- Virar peças de horizontal para vertical

	 barcoPos = {

		 {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3587,

		 3588,

		 3591

	 }


	 criarBarcoSul(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 2)


	 addEvent(navegarSul, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7007)then	

	 deletarBarco(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)

elseif(mar==7008)then	

	 deletarBarco(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)		

else

	 addEvent(navegarOeste, 500/velocidade, cid, barcoId, barcoPos)

end

end









---------------------

--- Código do Npc ---

---------------------





local focuses = {}

local function isFocused(cid)

for i, v in pairs(focuses) do

	 if(v == cid) then

		 return true

	 end

end

return false

end





local function addFocus(cid)

if(not isFocused(cid)) then

	 table.insert(focuses, cid)

end

end

local function removeFocus(cid)

for i, v in pairs(focuses) do

	 if(v == cid) then

		 table.remove(focuses, i)

		 break

	 end

end

end

local function lookAtFocus()

for i, v in pairs(focuses) do

	 if(isPlayer(v)) then

		 doNpcSetCreatureFocus(v)

		 return

	 end

end

doNpcSetCreatureFocus(0)

end





function onCreatureAppear(cid)

end





function onCreatureDisappear(cid)

if(isFocused(cid)) then

	 selfSay("Adeus!")

	 removeFocus(cid)

end

end





function onCreatureSay(cid, type, msg)

if(isFocused(cid))then

	 if(msg == "barco")then

		 selfSay("Que ótimo! Atualmente estou alugando para a rota {"..rota.."}. Você deseja ir?",cid)

	 end	

	 if(msg == rota or msg == "sim")then

		 if(doPlayerRemoveMoney(cid, custo))then

			 selfSay("Adeus! Boa viagem",cid)			


			 -- Id's Peças do barco na vertical

			 local barcoId = {

					 3587,

					 3588,

					 3591

				 }


			 -- Posição inicial das Peças na vertical

			 local barcoPos = {

					 {x=80,y=138,z=7,stackpos=1},

					 {x=80,y=139,z=7,stackpos=1},

					 {x=80,y=140,z=7,stackpos=1}

				 }







			 -- Criar Barco Vertical

			 criarBarcoSul(barcoId, barcoPos)


			 doTeleportThing(cid, barcoPos[2])

			 doCreatureSetLookDirection(cid, 2)


			 -- Sair por baixo

			 addEvent(navegarSul, 1000, cid, barcoId, barcoPos)

			 doSendMagicEffect(barcoPos[2], 10)


			 removeFocus(cid)

		 else

			 selfSay("Desculpe, mas você não tem dinheiro suficiente.",cid)

		 end

	 end

	 if(msg == "bye" or msg == "tchau " or msg == "adeus ")then

		 selfSay("Adeus.",cid)

		 removeFocus(cid)

	 end		

else

	 if(msg == "hi" or msg == "oi") then

		 selfSay("Ola ".. getCreatureName(cid) .."! Posso te alugar um {barco} por apenas "..custo.." gold coins.", cid)

		 addFocus(cid)

	 end





end

end





function onPlayerCloseChannel(cid)

if(isFocused(cid)) then

	 selfSay("Adeus!")

	 closeShopWindow(cid)

	 removeFocus(cid)

end

end





function onThink()

for i, focus in pairs(focuses) do

	 if(not isCreature(focus)) then

		 removeFocus(focus)

	 else

		 local distance = getDistanceTo(focus) or -1

		 if((distance > 4) or (distance == -1)) then

			 selfSay("Como preferir...")

			 closeShopWindow(focus)

			 removeFocus(focus)

		 end

	 end

end

lookAtFocus()

end
- Agora, crie outro arquivo, chamado barco2.lua com o código abaixo e adicione na mesma pasta:
----- ### Sistema de Navegação ### -----

----------------------------------------

-- Feito por: mfbcampgraf			 --

-- Msn: [email protected] --

-- Criado exclusivamente para Tibia King --

----------------------------------------





-------------------

-- Configurações --

-------------------





-- Velocidade de movimentação do barco

local velocidade = 2





-- Nome da rota

local rota = "porto"



-- Valor da viagem em gold

local custo = 30



-----------------------

-- Codigo do Sistema --

-----------------------


function deletarBarco2(barcoId, barcoPos)





for i=1,3 do

	 local item = getTileThingByPos(barcoPos[i])

	 doRemoveItem(item.uid)

end





end





function criarBarcoSul2(barcoId, barcoPos)


for i=1,3 do

	 barcoPos[i].y = barcoPos[i].y+1

	 doCreateItem(barcoId[i], 1, barcoPos[i])

end


end





function criarBarcoNorte2(barcoId, barcoPos)


for i=1,3 do

	 barcoPos[i].y = barcoPos[i].y-1

	 doCreateItem(barcoId[i], 1, barcoPos[i])

end


end





function criarBarcoLeste2(barcoId, barcoPos)


for i=1,3 do

	 barcoPos[i].x = barcoPos[i].x+1

	 doCreateItem(barcoId[i], 1, barcoPos[i])

end


end





function criarBarcoOeste2(barcoId, barcoPos)


for i=1,3 do

	 barcoPos[i].x = barcoPos[i].x-1

	 doCreateItem(barcoId[i], 1, barcoPos[i])

end


end


function navegarSul2(cid, barcoId, barcoPos)

deletarBarco2(barcoId, barcoPos)	

criarBarcoSul2(barcoId, barcoPos)


local cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


doTeleportThing(cid, cancelAnimationPos)

doTeleportThing(cid, barcoPos[2])


local marPos = {x=barcoPos[2].x,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=0}

local mar = getTileThingByPos(marPos).actionid


if(mar==7009)then

	 deletarBarco2(barcoId, barcoPos)


	 -- Virar peças de vertical para horizontal

	 barcoPos = {

		 {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3592,

		 3593,

		 3596

	 }	


	 criarBarcoLeste2(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x+2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 1)


	 addEvent(navegarLeste2, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7010)then

	 deletarBarco2(barcoId, barcoPos)


	 -- Virar peças de vertical para horizontal

	 barcoPos = {

		 {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3592,

		 3593,

		 3596

	 }


	 criarBarcoOeste2(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 3)


	 addEvent(navegarOeste2, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7013)then	

	 deletarBarco2(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)

elseif(mar==7014)then	

	 deletarBarco2(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)	

else

	 addEvent(navegarSul2, 500/velocidade, cid, barcoId, barcoPos)

end

end





function navegarNorte2(cid, barcoId, barcoPos)


deletarBarco2(barcoId, barcoPos)

criarBarcoNorte2(barcoId, barcoPos)


local cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


doTeleportThing(cid, cancelAnimationPos)

doTeleportThing(cid, barcoPos[2])	


local marPos = {x=barcoPos[2].x,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=0}

local mar = getTileThingByPos(marPos).actionid


if(mar==7009)then

	 deletarBarco2(barcoId, barcoPos)


	 -- Virar peças de vertical para horizontal

	 barcoPos = {

		 {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3592,

		 3593,

		 3596

	 }


	 criarBarcoLeste2(barcoId, barcoPos)





	 cancelAnimationPos = {x=barcoPos[2].x+2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])		


	 doCreatureSetLookDirection(cid, 1)


	 addEvent(navegarLeste2, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7010)then

	 deletarBarco2(barcoId, barcoPos)


	 -- Virar peças de vertical para horizontal

	 barcoPos = {

		 {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3592,

		 3593,

		 3596

	 }


	 criarBarcoOeste2(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 3)


	 addEvent(navegarOeste2, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7013)then	

	 deletarBarco2(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x+1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)

elseif(mar==7014)then	

	 deletarBarco2(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x-1,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)	

else

	 addEvent(navegarNorte2, 500/velocidade, cid, barcoId, barcoPos)

end

end





function navegarLeste2(cid, barcoId, barcoPos)


deletarBarco2(barcoId, barcoPos)

criarBarcoLeste2(barcoId, barcoPos)


local cancelAnimationPos = {x=barcoPos[2].x+2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


doTeleportThing(cid, cancelAnimationPos)

doTeleportThing(cid, barcoPos[2])


local marPos = {x=barcoPos[2].x,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=0}

local mar = getTileThingByPos(marPos).actionid


if(mar==7011)then

	 deletarBarco2(barcoId, barcoPos)


	 -- Virar peças de horizontal para vertical

	 barcoPos = {

		 {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3587,

		 3588,

		 3591

	 }


	 criarBarcoNorte2(barcoId, barcoPos)





	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 0)


	 addEvent(navegarNorte2, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7012)then

	 deletarBarco2(barcoId, barcoPos)


	 -- Virar peças de horizontal para vertical

	 barcoPos = {

		 {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3587,

		 3588,

		 3591

	 }


	 criarBarcoSul2(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 2)				


	 addEvent(navegarSul2, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7015)then	

	 deletarBarco2(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)

elseif(mar==7016)then	

	 deletarBarco2(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)	

else

	 addEvent(navegarLeste2, 500/velocidade, cid, barcoId, barcoPos)

end

end





function navegarOeste2(cid, barcoId, barcoPos)


deletarBarco2(barcoId, barcoPos)

criarBarcoOeste2(barcoId, barcoPos)


cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


doTeleportThing(cid, cancelAnimationPos)

doTeleportThing(cid, barcoPos[2])


marPos = {x=barcoPos[2].x,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=0}

mar = getTileThingByPos(marPos).actionid


if(mar==7011)then

	 deletarBarco2(barcoId, barcoPos)


	 -- Virar peças de horizontal para vertical

	 barcoPos = {

		 {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3587,

		 3588,

		 3591

	 }


	 criarBarcoNorte2(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 0)





	 addEvent(navegarNorte2, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7012)then

	 deletarBarco2(barcoId, barcoPos)


	 -- Virar peças de horizontal para vertical

	 barcoPos = {

		 {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1},

		 barcoPos[2],

		 {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}

	 }


	 barcoId = {

		 3587,

		 3588,

		 3591

	 }


	 criarBarcoSul2(barcoId, barcoPos)


	 cancelAnimationPos = {x=barcoPos[2].x-2,y=barcoPos[2].y,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, cancelAnimationPos)

	 doTeleportThing(cid, barcoPos[2])


	 doCreatureSetLookDirection(cid, 2)


	 addEvent(navegarSul2, 500/velocidade, cid, barcoId, barcoPos)

elseif(mar==7015)then	

	 deletarBarco2(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x,y=barcoPos[2].y-1,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)

elseif(mar==7016)then	

	 deletarBarco2(barcoId, barcoPos)


	 desembarquePos = {x=barcoPos[2].x,y=barcoPos[2].y+1,z=barcoPos[2].z,stackpos=1}


	 doTeleportThing(cid, desembarquePos)


	 doSendMagicEffect(barcoPos[2], 2)

	 doSendMagicEffect(desembarquePos, 10)		

else

	 addEvent(navegarOeste2, 500/velocidade, cid, barcoId, barcoPos)

end

end









---------------------

--- Código do Npc ---

---------------------





local focuses = {}

local function isFocused(cid)

for i, v in pairs(focuses) do

	 if(v == cid) then

		 return true

	 end

end

return false

end





local function addFocus(cid)

if(not isFocused(cid)) then

	 table.insert(focuses, cid)

end

end

local function removeFocus(cid)

for i, v in pairs(focuses) do

	 if(v == cid) then

		 table.remove(focuses, i)

		 break

	 end

end

end

local function lookAtFocus()

for i, v in pairs(focuses) do

	 if(isPlayer(v)) then

		 doNpcSetCreatureFocus(v)

		 return

	 end

end

doNpcSetCreatureFocus(0)

end





function onCreatureAppear(cid)

end





function onCreatureDisappear(cid)

if(isFocused(cid)) then

	 selfSay("Adeus!")

	 removeFocus(cid)

end

end





function onCreatureSay(cid, type, msg)

if(isFocused(cid))then

	 if(msg == "barco")then

		 selfSay("Que ótimo! Atualmente estou alugando para a rota {"..rota.."}. Você deseja ir?",cid)

	 end	

	 if(msg == rota or msg == "sim")then

		 selfSay("Adeus! Boa viagem",cid)			


-- Id's Peças do barco na horizontal

		 if(doPlayerRemoveMoney(cid, custo))then

			 local barcoId = {

				 3592,

				 3593,

				 3596

			 }


			 -- Posição inicial das Peças na horizontal

			 local barcoPos = {

				 {x=74,y=65,z=7,stackpos=1},

				 {x=75,y=65,z=7,stackpos=1},

				 {x=76,y=65,z=7,stackpos=1}

			 }





			 -- Criar Barco Horizontal

			 criarBarcoLeste2(barcoId, barcoPos)


			 doTeleportThing(cid, barcoPos[2])

			 doCreatureSetLookDirection(cid, 1)


			 -- Sair pela direita

			 addEvent(navegarLeste2, 1000, cid, barcoId, barcoPos)

			 doSendMagicEffect(barcoPos[2], 10)


			 removeFocus(cid)

		 else

			 selfSay("Desculpe, mas você não tem dinheiro suficiente.",cid)

		 end

	 end

	 if(msg == "bye" or msg == "tchau " or msg == "adeus ")then

		 selfSay("Adeus.",cid)

		 removeFocus(cid)

	 end		

else

	 if(msg == "hi" or msg == "oi") then

		 selfSay("Ola ".. getCreatureName(cid) .."! Posso te alugar um {barco} por apenas "..custo.." gold coins.", cid)

		 addFocus(cid)

	 end





end

end





function onPlayerCloseChannel(cid)

if(isFocused(cid)) then

	 selfSay("Adeus!")

	 closeShopWindow(cid)

	 removeFocus(cid)

end

end





function onThink()

for i, focus in pairs(focuses) do

	 if(not isCreature(focus)) then

		 removeFocus(focus)

	 else

		 local distance = getDistanceTo(focus) or -1

		 if((distance > 4) or (distance == -1)) then

			 selfSay("Como preferir...")

			 closeShopWindow(focus)

			 removeFocus(focus)

		 end

	 end

end

lookAtFocus()

end
Feito isso o próximo passo é criar os npcs. - Crie um arquivo npc1.xml em data/npc e cole isto dentro:
<?xml version="1.0" encoding="UTF-8"?>


<npc name="Npc1" script="barco.lua" walkinterval="2000" floorchange="0">

<health now="100" max="100"/>

<look type="132" head="20" body="39" legs="45" feet="7" addons="0"/>

<parameters>

</parameters>

</npc>
- Em seguida crie um arquivo npc2.xml em data/npc e cole isto dentro: Código HTML:
<?xml version="1.0" encoding="UTF-8"?>


<npc name="Npc2" script="barco2.lua" walkinterval="2000" floorchange="0">

<health now="100" max="100"/>

<look type="132" head="20" body="39" legs="45" feet="7" addons="0"/>

<parameters>

</parameters>

</npc>
Configurações No cabeçalho de cada script do npc, e juntamente a conversa do npc, estão uma sequencia de configurações básicas.
-- Velocidade de movimentação do barco

local velocidade = 2



-- Nome da rota

local rota = "caverna"


Nas Linhas: 496

-- Id's Peças do barco na vertical

local barcoId = {

	 3587,

	 3588,

	 3591

}


-- Posição inicial das Peças na vertical

local barcoPos = {

	 {x=80,y=138,z=7,stackpos=1},

	 {x=80,y=139,z=7,stackpos=1},

	 {x=80,y=140,z=7,stackpos=1}

- Nome da rota: Esse será o nome que o npc irá reconhecer

e apresentar para o jogador como escolha de viagem.

- Id's: O barco possui 3 partes. Cada parte tem um id diferente.

Quando esta na posição vertical a sequencia é uma, e na horizontal

a sequencia é outra. Por padrão, o primeiro npc começa com o barco na

sequencia vertical, e o outro na sequencia horizontal

ATENÇÃO! - MUITO IMPORTANTE

- Posição: Se trata da posição inicial de cada peça do barco. O script irá

utilizar elas como referência para as próximas posições, portanto cuidado.

Vale lembra que ele considera que o barco irá ter apenas 3 partes, e o player irá ficar

na posição do meio, no caso barcoPos[2] .

- Padrão: Por padrão, o barco na vertical ira partir para o sul e o barco

na horizontal irá partir para leste. Aproveite isso na hora

de usar a criatividade no mapa, claro que também é possível fazer alterações, mas

o teste do script foi feito usando os próprios padrões.

Criando a rota

Com tudo configurado, posições iniciais e nomes, você já esta pronto para criar as 2 rotas.

Claro que nada impede que seu server tenha muitas rotas, considerando

um npc para cada rota é claro.

- Esta é a área inicial do NPC1, onde irei começar a fazer a primeira rota.

tuto1vh.png

- Selecione a ferramenta “ NO LOGOUT ZONE “ Padrão do seu MAP EDITOR para marcar a rota. Assim você facilita a visualização para colocar os Actions corretamente e tambem evita que alguem tente logar durante a viagem.

tuto2bf.png

- Tenha em mente, de que cada NPC apenas uma rota. Marque toda sua rota com a ferramenta “NO LOGOUT”.

tuto3q.png

- O final de sua rota deve possuir um sqm livre para o jogador poder desembarcar corretamente.

- Até agora, o barco apenas irá seguir uma unica direção, o sentido inicial da primeira rota (por padrão SUL). Como solução, para não irmos sempre pela mesma direção, iremos colocar sqms especiais, que irão fazer o barco mudar de direção

- Para isso, selecione ultimo sqm da direção atual e adicione um action id conforme a tabela abaixo.

7001 = Vira o barco para leste

7002 = Vira o barco para oeste

7003 = Vira o barco para norte

7004 = Vira o barco para sul

obs: Só é possível mudar de uma direção vertical para uma horizontal e vice-versa. Ex: Norte/Sul para Leste/Oeste

tuto5v.png

- Na imagem abaixo é possível visualizar uma série de sqm configurados corretamente.

tuto6w.png

- Para finalizar a primeira rota, iremos colocar uma action id especial no ultimo sqm.

tuto7p.png

- De acordo com sua rota, utilize a action mais indicada para seu desembarque conforme a tabela abaixo.

Desembarques:

7005 = Desembarca personagem para direita

7006 = Desembarca personagem para esquerda

7007 = Desembarca personagem para cima

7008 = Desembarca personagem para baixo

obs: Só é possível desembarcar para um sentido paralelo a sua atual direção. Ex: Norte/Sul para direita/esquerda

- Com a primeira rota ja pronta, iremos agora configurar a viagem do segundo NPC! Tenha cuidado para não se confundir com as marcações da “NO LOGOUT ZONE”. Não se preocupe com conflitos entre as rotas, pois as actions ids irão ser diferentes para cada NPC . Abaixo segue as tabelas que configuram a segunda rota.

Direções:

7009 = Vira o barco para leste

7010 = Vira o barco para oeste

7011 = Vira o barco para norte

7012 = Vira o barco para sul

Desembarques:

7013 = Desembarca personagem para direita

7014 = Desembarca personagem para esquerda

7015 = Desembarca personagem para cima

7016 = Desembarca personagem para baixo

tuto8j.png

- Como ja dito antes, não há problema nenhum entre conflito de rotas, pois elas utilizam actions diferentes. Porém mantive cautela em marcar a rota, para não se confundir, e ter mais clareza na hora da marcação.

tuto9n.png

comente! meliga.gif

Editado por Augusto (veja o histórico de edições)

Contato;

6yonKDJ.png god.marinii

TaxNfhb.png

  • Respostas 5
  • Visualizações 3k
  • Created
  • Última resposta

Top Posters In This Topic

Postado
Pronto, é isso!

Espero que tenham gostado, esse foi meu primeiro

script postado aqui no OTBR, obrigado pela visualização! E qualquer dúvida,

crítica, bug, mande uma PM, me adicione no msn, ou simplismente

comente! meliga.gif

kkkkkkkkkkkkkkkkkkkkkk'

E esse tanto de link da otserv.com.br!?

Ctrl c + Ctrl v

Reputado por trazer, mais tem que melhorar um poquim ainda, :)

Postado
Nome: Sistema de Barco

Autor: zathao

Testado em: The Forgotten Server Version 0.3.6 / Tibia 8.54

Descrição: Este script foi desenvolvido por mim exclusivamente para esse fórum.

Nele o jogador poderá viajar por uma rota pré-definida através de um barco.

Contato: [email protected]

Só retire isso porque ele não te deu permissão de divulgar o msn dele e voce nao fez exclusivamente para o fórum. uashuashuas

O resto ta bom :)

Editado por WarW0lf (veja o histórico de edições)

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo