Postado Outubro 23, 2012 12 anos 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. - 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. - Tenha em mente, de que cada NPC apenas uma rota. Marque toda sua rota com a ferramenta “NO LOGOUT”. - 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 - Na imagem abaixo é possível visualizar uma série de sqm configurados corretamente. - Para finalizar a primeira rota, iremos colocar uma action id especial no ultimo sqm. - 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 - 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. comente! Editado Outubro 23, 2012 12 anos por Augusto (veja o histórico de edições) Contato; god.marinii [email protected]
Postado Outubro 23, 2012 12 anos 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! 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 Outubro 23, 2012 12 anos 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 Outubro 23, 2012 12 anos por WarW0lf (veja o histórico de edições)
Postado Outubro 23, 2012 12 anos Autor Edson , arrumei descupa mesmo , e prometo que meu outro topico irei melhora WarW0lf arrumei também e obrigado por me alertar. Contato; god.marinii [email protected]
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.