Ir para conteúdo
Entre para seguir isso  
Notorious

NPC de viagem diferente!

Recommended Posts

Notorious    1
Notorious

Nome: NPC de viagem diferente

Autor: Notorious

Versão Testada: 8.54 - TFS 0.3.6

Normalmente pra você viajar em um OTServer, você vai lá, conversa com o npc, ele te dá as cidades, voce escolhe, digita, digita 'yes', é tudo uma chatice né?

 

Esse NPC eu criei há um tempinho atrás pro Pandek a pedido dos antigos donos, mas eu resolvi postar, já que está parado aqui ...

 

Nesse NPC é só voce dizer, 'hi', 'destinations' e inesperadamente ele vai abrir uma janelinha de trade, com todos os destinos, é só voce clicar e ser feliz :pirate:

Infelizmente tem um contra, esses destinos são controlados por um ID de controle, que precisa ser um item e existir, portanto é bem provavel que apareça alguns itens non-sense na imagem do item, mas isso é o de menos

 

Antes de tudo vá em data/npcs/lib/npc.lua e adicione o seguinte no final:

function isFocused(cid, t)
   for i, v in pairs(t) do
       if(v == cid) then
           return true
       end
   end
   return false
end

function addFocus(cid, t)
   if(not isFocused(cid, t)) then
       table.insert(t, cid)
   end
end

function removeFocus(cid, t)
   for i, v in pairs(t) do
       if(v == cid) then
           table.remove(t, i)
           break
       end
   end
end

function lookAtFocus(t)
   for i, v in pairs(t) do
       if(isPlayer(v)) then
           doNpcSetCreatureFocus(v)
           return
       end
   end
   doNpcSetCreatureFocus(0)
end

function msgcontains(msg, ...)
   local function checkstring(msg, key)
     return (" " .. msg .. " "):find("%s+" .. key .. "[%s%p]+") and true or false
   end
   for _, key in ipairs(arg) do
       if checkstring(tostring(msg):lower(), tostring(key):lower()) then
         return true
       end
   end
 return false
end

Após isso vá em data/npc, crie um novo arquivo xml, cole o seguinte e configure seu NPC:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="NOMEDOSEUNPC" script="difftravel.lua" walkinterval="3000" floorchange="0">
   <health now="150" max="150"/>
   <look type="129" head="114" body="119" legs="114" feet="114" corpse="2212"/>
</npc>

Em seguida vá em data/npc/scripts crie um arquivo .lua chamado difftravel.lua e adicione o seguinte:

   -- Different Travel NPC by Notorious (OTBR)

local focuses, controlId = {}, 3586
local cities = {
{name = "Carlin", pos = {x=1024, y=1033, z=7}, price = 100, requirePremium = false},
{name = "Venore", pos = {x=1035, y=1021, z=3}, price = 120, requirePremium = false}
}

function onCreatureDisappear(cid)
   if isFocused(cid, focuses) then
    removeFocus(cid, focuses)
       if isPlayer(cid) then
        closeShopWindow(cid)
       end
   end
end

local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
local info = cities[item-controlId]
   if getPlayerMoney(cid) >= info.price then
    doTeleportThing(cid, info.pos, false)
    doPlayerRemoveMoney(cid, info.price)
    selfSay("Here we are!", cid)
    closeShopWindow(cid)
    removeFocus(cid, focuses)
    lookAtFocus(focuses)
   end
end

function onCreatureSay(cid, type, msg)
local travelWindow = {}
   if msgcontains(msg, "hi", "hello") and not isFocused(cid, focuses) and getDistanceToCreature(cid) < 4 then
    selfSay("Hiho " .. getCreatureName(cid) .. ", I can take you to many {destinations} for just a little fee.", cid)
    addFocus(cid, focuses)
    selfFocus(cid)
   elseif msgcontains(msg, "destinations") and isFocused(cid, focuses) then
    selfSay("Here are the places that I can take you.", cid)
       for index, info in pairs(cities) do
           if not info.requirePremium or isPremium(cid) and info.requirePremium then
            table.insert(travelWindow, {id=controlId+index, subType=0, buy=info.price, sell=0, name=info.name})
           end
       end
       openShopWindow(cid, travelWindow, onBuy, onSell)
   elseif msgcontains(msg, "bye", "goodbye") and isFocused(cid, focuses) then
    selfSay("Goodbye!", cid)
    closeShopWindow(cid)
    removeFocus(cid, focuses)
    lookAtFocus(focuses)
   end
end

function onThink()
   for _, focus in pairs(focuses) do
       if not isCreature(focus) then
        removeFocus(focus, focuses)
       else
        local distance = getDistanceTo(focus) or 5
           if distance > 4 then
               selfSay("Hmpf!", focus)
               closeShopWindow(focus)
               removeFocus(focus, focuses)
           end
       end
   end
   lookAtFocus(focuses)
end

Pronto, seu npc está criado ...

Para configurar, apenas edite a tabela cities e vá adicionando mais campos nesse formato:

{name = "Nome da Cidade", pos = {x=Posição X, y=Posição Y, z=Posição Z}, price = Preço, requirePremium = Bool}

  • name: Nome da cidade que apareça na janela de trade
  • pos: Posição x, y, z para aonde o player será teleportado ao escolher essa cidade
  • price: Preço em GPs
  • requirePremium: Se a cidade requere premium ou não (true para sim ou false para não)

Só mude outras configurações se você souber o que está fazendo!

 

Gostou?

Matenha os créditos e agradeça (:

Editado por Mickfern

Compartilhar este post


Link para o post
Antharaz    4
Antharaz

Acho que nem precisa falar muito...

 

Ótimo script. :P

 

Aprovadíssimo

Compartilhar este post


Link para o post
Jack Frost    0
Jack Frost

caraca que legal Oo

 

mas pra ser mais rápido o uso dele, teria como fazer assim:

 

assim que dissesse 'hi', já abrisse o menu de trade

e colocar o nome das cities para Go to 'city'?

 

ficando assim (só modelo)

 

local cities: Go to carlin, Go to venore

hi

openshopwindow

info = cities

Compartilhar este post


Link para o post
josejunior23    2
josejunior23

Parabéns, otima ideia!

Compartilhar este post


Link para o post
Saymon14    0
Saymon14

Representa mais um dos grandes avanços em ot serv, mais seria bom muudar aqueles items que aparece la no trade, um item bom pra colocar seria o Model Ship.

 

model_ship.gif

ID 2113

Compartilhar este post


Link para o post
Notorious    1
Notorious
Representa mais um dos grandes avanços em ot serv, mais seria bom muudar aqueles items que aparece la no trade, um item bom pra colocar seria o Model Ship.

 

model_ship.gif

ID 2113

É que precisa ser uma série de itens ...

Tipo, 2113, 2114, 2115, em diante, daí eu achei melhor colocar os pedaços de bote hehe

Editado por Notorious

Compartilhar este post


Link para o post
TaiChiMaster    0
TaiChiMaster

Muito bom cara ^^!

 

ótimo script! e ótima ideia também!

O modo "tradicional" de viagem é muito chato mesmo uhAuhau.... vou usar com certeza...

Compartilhar este post


Link para o post
Elwyn    106
Elwyn

Muito bem bolado, um dia tentarei fazer uma coisa mais inovadora que isso! *-*

Compartilhar este post


Link para o post
Roku    0
Roku

cara, vc troco 6 por meia duzia,

nao sei qual a emoção a mais em ter a opção de clicar agora

Compartilhar este post


Link para o post
Elwyn    106
Elwyn
cara, vc troco 6 por meia duzia,

nao sei qual a emoção a mais em ter a opção de clicar agora

 

Isso tudo é inveja?

 

Tente trocar esses 6 por meia-dúzia. :}

 

Te falta humildade.

Compartilhar este post


Link para o post
Antharaz    4
Antharaz
cara, vc troco 6 por meia duzia,

nao sei qual a emoção a mais em ter a opção de clicar agora

 

Faz o seguinte... ao invés de ficar postando inutilidades, faz um melhor e posta aí.

 

Este npc possui uma forma nova de escolher o destino para viajar e ao invés dele guardar o script com ele(o que a maioria faz), o Notorious resolveu compartillhar.

 

Se você achou inútil ou não gostou, simplesmente não poste... ah é, esqueci que você tem que postar este tipo de coisa para ganhar seus V$ ¬¬ :palm:

 

 

 

Mais uma vez, obrigado por postar para a gente Notorious!! OiaeuMae

Editado por Antharaz

Compartilhar este post


Link para o post
Criticoo    4
Criticoo

@tópico

ótima ideia,acho que desse jeito fica mais interressante também,foje das mesmisse dos servidores

ta aprovado,em breve o script poderá ser mais sofisticado,podendo ser melhor desenvolvido.

Parabéns Notorious,

abraços

Editado por Pedro

Compartilhar este post


Link para o post
ADM MaX DE    0
ADM MaX DE

Boa, muito legal o script, realmente é mais inovador para viajar! ^^'

Tem/teria como escolher um Item para cada cidade ?

Não cheguei á ler o script inteiro ainda, se tiver tenho umas idéias legais aqui... -.^

 

Abraços! Att~ MaX

Compartilhar este post


Link para o post
Saymon14    0
Saymon14
Boa, muito legal o script, realmente é mais inovador para viajar! ^^'

Tem/teria como escolher um Item para cada cidade ?

Não cheguei á ler o script inteiro ainda, se tiver tenho umas idéias legais aqui... -.^

 

Abraços! Att~ MaX

 

Nem tem cara como ele propio me respondeu, a partir de um certo id, vai aparecer os itens

 

Ex. ID 2212

2213

2214

2215

 

Mais acredito que esse script vai ser aperfeiçoado por outro scripter :whistle:

Compartilhar este post


Link para o post
Notorious    1
Notorious
Nem tem cara como ele propio me respondeu, a partir de um certo id, vai aparecer os itens

 

Ex. ID 2212

2213

2214

2215

 

Mais acredito que esse script vai ser aperfeiçoado por outro scripter :whistle:

Se eu fizesse de outra maneira, teria sim, mas ai voce teria que determinar um item pra cada cidade, e nao poderia repetir, ia ser bem inconveniente, acho que assim fica mais prático

 

E não tem outro jeito de fazer, eu tentei inumeras coisas antes de chegar nisso, sem mudar NADA no seu OTServer não há outro jeito

Compartilhar este post


Link para o post
Saymon14    0
Saymon14

@Roku

a imagem que voce ta passando nao é essa, e voce nem conhece o criticoo, como pode falar assim dele, te garanto que ele entende mais sobre open tibia do que voce e com extrema certeza é bem mais maduro do que voce.

 

se voce quer respeito, der respeito aos outros.

Compartilhar este post


Link para o post
Conde2    0
Conde2
Se eu fizesse de outra maneira, teria sim, mas ai voce teria que determinar um item pra cada cidade, e nao poderia repetir, ia ser bem inconveniente, acho que assim fica mais prático

 

E não tem outro jeito de fazer, eu tentei inumeras coisas antes de chegar nisso, sem mudar NADA no seu OTServer não há outro jeito

 

 

Correção:

 

existem sim outro jeito de se fazer isso usando apenas 1 item.

eu mesmo criei um sistema parecido só que para teleports e usei apenas 1 item.

 

De qualquer forma isso não desmerece seu script bom trabalho Notorius

Compartilhar este post


Link para o post
Vítor Amaral    1
Vítor Amaral

criar itens com diferentes id tb não é nada difícil. já que ninguém postou uma solução para isso é bem fácil de resolver. além do mais que não precisa de um novo dat e spr para isso, já que pode ser utilizado um item que já existe, como um mapa ou barquinho.

 

gostei pra caramba da idéia! :) parabéns ae!

Compartilhar este post


Link para o post
Pedro    1
Pedro

A briguinha acaba por aqui, se não quiserem levar (mais) alertas. Uma dica para você Roku, quem decide se vai ou não alertar os dois, se vai ou não deletar os posts, são aqueles que tem poder para isso. O botão "denunciar" serve para pedir uma avaliação das pessoas que tem entendimento das regras. Espero que tenha compreendido.

 

Se não gostar das decisões dos moderadores, ainda existe a Ouvidoria :)

Editado por Pedro

Compartilhar este post


Link para o post
Notorious    1
Notorious
Correção:

 

existem sim outro jeito de se fazer isso usando apenas 1 item.

eu mesmo criei um sistema parecido só que para teleports e usei apenas 1 item.

 

De qualquer forma isso não desmerece seu script bom trabalho Notorius

Desconheço

Então posta aí, vai ser uma ótima contribuição :]

Compartilhar este post


Link para o post
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×