Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Fala galera do TK.

Vim trazer um npc que me ajuda muito ja que eu sou preguiçoso pra karamba.

 

Esse npc funciona com o sistema de boat, só que duplo, tipo: você pode por ele em dois lugares e eles vão ficar fazendo viajem desse lugar para o outro.

 

Vejam as imagens:

 

Aqui ele está em um local qualquer e vai enviar o player para outro local já determinado.

npcdouble1.thumb.jpg.72b8bfa261fd6c84854

 

Aqui, no caso, ele foi enviado para esse local.

 

npcdouble2.thumb.jpg.3d6172b61b870e923a1

 

O npc que está nesse barco vai viajar de volta de onde o player veio.

 

npcdouble3.thumb.jpg.01665ae6eb4b6b877b6

 

E completa o ciclo de viajem, ida e volta.

npcdouble4.thumb.jpg.b485bde8a94c73ced1f

 

Bom, agora vamos adicionar o npc.

Primeiro você tem que ter as coordenadas já preparadas de ida e vinda.

 

Xml do npc:

Citar


<?xml version="1.0" encoding="UTF-8"?> 
<npc name="Pirate" script="data/npc/scripts/Boat_Double.lua" walkinterval="2000" floorchange="0"> 
    <health now="100" max="100"/> 
<look type="97" head="95" body="10" legs="56" feet="77" addons="0"/> 
   <voices> 
      <voice text="Onde estao os marujos do meu barco?!" interval2="180" randomspectato="1" /> 
      <voice text="Grrrrrrnnnn Aquela velho Jack roubou meu tesouro. Maldito Seja!" interval2="180" randomspectato="1" /> 
      <voice text="Traga-me uma garrafa de rum!" interval2="180" randomspectato="1" /> 
      <voice text="Eu ja viajei pelos sete mares e vi bestas horriveis!" interval2="180" randomspectato="1" /> 
   </voices> 
    <parameters> 
      <parameter key="module_keywords" value="1" /> 
        <parameter key="message_farewell" value="Mais um que me abandona!"/> 
    </parameters> 
</npc> 

 

 

Agora o script lua do npc:

Data/npc/scripts/

Citar

 

local sqmDistancePerValueToTravel = 4 --a cada 4 sqm custa 1 gp
local focuses = {} 
local function isFocused(cid) 
   for pid in pairs(focuses) do 
      if(pid == cid) then 
         return true 
      end 
   end 
   return false 
end 
local function addFocus(cid) 
   if(not isFocused(cid)) then 
      focuses[cid] = os.time() + 30 
   end 
end 
local function removeFocus(cid) 
local new = {} 
   for pid,tienpo in pairs(focuses) do 
      if(pid ~= cid) then 
         new[pid] = tienpo 
      end 
   end 
   focuses = new 
end 
local function lookAtFocus() 
   for pid in pairs(focuses) do 
      if(isPlayer(pid) == TRUE) then 
         doNpcSetCreatureFocus(pid) 
         return 
      end 
   end 
   doNpcSetCreatureFocus(0) 
end 
function onCreatureAppear(cid) end 
function onCreatureDisappear(cid) 
   if(isFocused(cid)) then 
      removeFocus(cid) 
   end 
end 
local C ={ 
   dest = { 
   --{{city=atual,pos=posicao do barco nessa city},{city=ida,pos=posicao do barco na city de ida}} 
      {{city='rookguard',pos={x=1021,y=1138,z=6}},{city='formaya',pos={x=996,y=999,z=6}}}, 
   }, 
   appe = {'hi','hey','hello','oi'}, 
   disa = {'bye','tchau','xau','good bye'} 

local function isProximo(pos,prox,range) 
return (pos.x >= prox.x-range and pos.x <= prox.x+range 
   and pos.y >= prox.y-range and pos.y <= prox.y+range 
   and pos.z == prox.z) and true or false 
end 
local function getDestino(cid) 
   for g,t in pairs(C.dest) do 
      for k,v in pairs(t) do 
      local dest = k > 1 and 1 or 2 
         if(isProximo(getCreaturePosition(cid),v.pos,5))then 
            local priceForX = (C.dest[g][dest].pos.x - C.dest[g][k].pos.x)/sqmDistancePerValueToTravel 
            local priceForY = (C.dest[g][dest].pos.y - C.dest[g][k].pos.y)/sqmDistancePerValueToTravel 
            priceForX,priceForY   = priceForX < 0 and -priceForX or priceForX, priceForY < 0 and -priceForY or priceForY 
            return C.dest[g][dest].city,C.dest[g][dest].pos,math.floor(priceForX+priceForY) 
         end 
      end 
   end 
end 
local dest,pos,price 
function onCreatureSay(cid, _, msg) 
local distance = getDistanceTo(cid) or LUA_ERROR 
local msg = msg:lower() 
if((distance > 3) or (distance == LUA_ERROR)) then   return false end 
if(isInArray(C.disa,msg))then 
   selfSay('Inté mais ver, volte sempre.') 
   removeFocus(cid) 
   return 
end 
   if(isInArray(C.appe,msg))then 
      dest,pos,price = getDestino(cid) 
      selfSay("Seja Bem Vindo, "..getCreatureName(cid).."  Eu estou viajando agora para {"..dest.."}, gostaria de ir por "..price.." Gps?") 
      addFocus(cid) 
      talkState = 1 
   elseif(isFocused(cid) and talkState == 1)then 
      if(msg:match('yes') or msg:match('sim'))then 
         if(doPlayerRemoveMoney(cid,price))then 
            doTeleportThing(cid,pos,true) 
            doSendMagicEffect(pos,10) 
            removeFocus(cid) 
         else 
            selfSay('Desculpe mas vos nao tem ouro suficiente para viajar.') 
         end 
      else 
         selfSay('Inté mais ver!') 
         removeFocus(cid) 
      end 
      talkState = 0 
   else 
      talkState = 0 
      if not(isFocused(cid))then return false else 
         selfSay('Desculpe mas eu nao entendi.') 
      end 
   end 
   return true 
end 

function onThink() 
   for focus,tienpo in pairs(focuses) do 
      if(tienpo < os.time()) then 
         selfSay("Desculpe mas tenho que viajar agora. tchau!") 
         removeFocus(focus) 
      else 
         local distance = getDistanceTo(focus) or -1 
         if((distance > 3) or (distance == -1)) then 
            selfSay("Tchau!") 
            removeFocus(focus) 
         end 
      end 
   end 
   lookAtFocus() 
end 
 

 

Explicando como mudar as posições e adicionar novas.

Na tabela "dest" existe tabelas como essa:

Citar

{{city='rookguard',pos={x=1021,y=1138,z=6}},{city='formaya',pos={x=996,y=999,z=6}}}, 

 

Você apenas precisar duplicar essa tabela e modificar os valores dela.

Espero que gostem e qualquer coisa relacionado ao npc me avisem.

Editado por dominus
Eu faltei a aula de português (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

51mutNo.png Parabéns, seu tópico de conteúdo foi aprovado!
 Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
 Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Bruno Carvalho / Ex-Administrador TibiaKing

[email protected]

 

Em 26/12/2016 em 03:47, Spraypaint disse:

A força da alienação vem dessa fragilidade dos indivíduos, quando apenas conseguem identificar o que os separa e não o que os une.

-miltinho

 

wMwSJFE.png?1

 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Henrique Gaudard
      Olá pessoal, primeiramente quero dizer que acho muito complicado mecher em monsters, poís qualquer erro, é fatal!! não sei porque quando fasso algumas modficações nos monsters/npcs que é quando eu modfico algumas coisas.., não entendo, só edito os nomes tipo assim;
      name "sfdsdfds" eu ponho "dhfudshgusopofkpsdakfgjid" (obs: não é no nome do arquivo lua mais sim o nome do monster mesmo já na edição) e dá erro. Se eu meche-se nas parada lá nos código todo doido de scripting tudo bem mais eu só quero editar e quando eu vou colocá-lo no mapa acontece o seguinte:
       
      Quando ligo aparece: "[Spawn : : addMonster] Cannot find "Ninja Star"" (ele está no presente no mapa e é um script obviamente). Falo!!
       
      Sistema Operacional: Windows 10

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo