Ir para conteúdo
Entre para seguir isso  
Zathao

Sistema de Barco - CONFIG COM IMAGENS!

Recommended Posts

Zathao    0
Zathao

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.

Contato: [email protected]

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 OTBR    --
----------------------------------------




-------------------
-- 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 OTBR    --
----------------------------------------




-------------------
-- 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:

 

<?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"

[u][b][color=#ff0000]Nas Linhas: 496[/color]
[/b][/u]-- 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.

 

[spoiler=Imagem]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.

 

[spoiler=Imagem]tuto2bf.png

 

 

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

 

[spoiler=Imagem]tuto3q.png

 

 

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

 

[spoiler=Imagem]tuto4s.png

 

 

- 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

[spoiler=Imagem]tuto5v.png

 

 

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

 

[spoiler=Imagem]tuto6w.png

 

 

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

 

[spoiler=Imagem]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

 

[spoiler=Imagem]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.

 

[spoiler=Imagem]tuto9n.png

 

 

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:

Editado por Zathao

Compartilhar este post


Link para o post
vHp    6
vHp

Perfeito, meu amigo, perfeito!

 

Esperamos que você continue com esta excelencia na contribuição de conteúdo gratuito para a comunidade brasileira de OTServ.

 

:)

Compartilhar este post


Link para o post
LoManoMano    7
LoManoMano

gzuis

fiz um script de tapete voador q tinha beeem menos linhas q esse, mas usou um sistema muuuuito parecido ao meu de criação dos itens

mas um bom script

se quiser uma dica, use storages e verifique qual a posiçao o jogador estava indo e utilize somente um sqm no final, nao um sqm pra oeste/leste/norte/sul

faça também algo que deixe o jogador ter seu próprio barco ;)

Compartilhar este post


Link para o post
iuniX    4
iuniX

woW, muito boa a ideia e o sistema em si, mas achei ele meio grande demais. Daria para dar uma boa diminuida nisso (tipo 2/3)

 

Mas parabens, tempos que não via algo diferente aqui na seção. Parabens mesmo

Compartilhar este post


Link para o post
Zathao    0
Zathao
woW, muito boa a ideia e o sistema em si, mas achei ele meio grande demais. Daria para dar uma boa diminuida nisso (tipo 2/3)

 

Mas parabens, tempos que não via algo diferente aqui na seção. Parabens mesmo

 

Sim sim :D! Tipo, eu ia fazer por tabelas de area... mas eu fiquei pensando... Vai ser muito chato pra pessoa que for querer usar o sistema configurar dessa forma, principalmente pra quem não mexe com código ter que ficar quebrando a cabeça... Fiz dessa forma para a principal configuração da rota ser pelo mapa editor, com o objetivo de facilitar o trabalho de quem for usar o sistema! Mas de qualquer forma, obrigado pelo comentário mano !

Compartilhar este post


Link para o post
BrunoNicoleit    0
BrunoNicoleit

Simplesmente incrível!

Testei e aprovei, parabéns.

Att,

$_$

Compartilhar este post


Link para o post
emetek    0
emetek

Mt bom hein, continue assim!

Sempre contribuindo com novos scripts

Compartilhar este post


Link para o post
iuniX    4
iuniX

Não entendo com um script bom e um tópico tão bem formatado não ganharam exclusivos...

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.

×