Ir para conteúdo
  • Cadastre-se

(Resolvido)[AJUDA] Erro com script de npc de troca/venda


Ir para solução Resolvido por Wend,

Posts Recomendados

Olá ,

Gostaria de uma ajuda para entender melhor como funciona está script e como fazê-la funcionar.





O objetivo é o seguinte :


Fazer o NPC vender o item X por Y quantidade de diamantes.


Eu procurei alguns outros tópicos de scripts que fazem o Npc trocar o item X pelo item Y da quantidade que foi determinada na script , porém , tive problemas.


A script que eu utilizei como base foi esta do tópico abaixo :

http://www.tibiaking.com/forum/topic/35955-pedido-npc-trocando-items/


PS : Não sei se o caso de ter alterado o nome do npc fez que ela não funcionasse.  [Alterei tanto no XML como no LUA dos respectivos arquivos.]


O problema :

O Npc não responde quando eu digo Hi/Oi/Olá



Segue abaixo as scripts depois de editadas por mim :


XML

<?xml version="1.0"?>


<npc name="Diamond Trader" script="data/npc/scripts/diamondtrader.lua" access="5" lookdir="2" walkinterval="0">
<health now="200" max="200" />
<look type="139" head="95" body="95" legs="95" feet="95" addons="3" />
<parameters>
<parameter key="message_greet" value="Ola |PLAYERNAME|. Deseja trocar diamonds por itens ?  Diga {items}." />
</parameters>
</npc>




LUA

local keywordHandler = KeywordHandler:new()


local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)            npcHandler:onCreatureAppear(cid)        end
function onCreatureDisappear(cid)        npcHandler:onCreatureDisappear(cid)        end
function onCreatureSay(cid, type, msg)        npcHandler:onCreatureSay(cid, type, msg)    end
function onThink()                npcHandler:onThink()                end

-- STRIKE START --
function jestervip(cid, message, keywords, parameters, node)
    if(not npcHandler:isFocused(cid)) then
        return false
    end
    
        if getPlayerItemCount(cid,2145) >= 50  then
        if doPlayerRemoveItem(cid,2145,50) then
            npcHandler:say('Aqui esta seu item!', cid)
            doPlayerAddItem(cid,12153,1)
        end
        else
            npcHandler:say('Voce nao tem diamond suficiente!', cid)
        end
end
-- STRIKE END --

keywordHandler:addKeyword({'items'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "Eu troco {bag of pollem} por diamonds."})

local node1 = keywordHandler:addKeyword({'bag of pollem'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer trocar 50 diamonds por 1 bag of pollem?? Yes or no??'})
    node1:addChildKeyword({'yes'}, jestervip, {npcHandler = npcHandler, onlyFocus = true, reset = true})
node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, volte quando quiser negociar!', reset = true})


.



 

post-73672-0-44971500-1409008907_thumb.p

post-73672-0-69689800-1409008912_thumb.p

Editado por Born Retarded (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

O problema :

O Npc não responde quando eu digo Hi/Oi/Olá

XML

<?xml version="1.0"?>

<npc name="Diamond Trader" script="data/npc/scripts/diamondtrader.lua" access="5" lookdir="2" walkinterval="0">

<parameter key="message_greet" value="Ola |PLAYERNAME|. Deseja trocar diamonds por itens ?  Diga {items}." />

LUA

keywordHandler:addKeyword({'items'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "Eu troco {bag of pollem} por diamonds."})

local node1 = keywordHandler:addKeyword({'bag of pollem'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer trocar 50 diamonds por 1 bag of pollem?? Yes or no??'})

    node1:addChildKeyword({'yes'}, jestervip, {npcHandler = npcHandler, onlyFocus = true, reset = true})

node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, volte quando quiser negociar!', reset = true})

.

 

no lugar de

XML

<?xml version="1.0"?>

<npc name="Diamond Trader" script="data/npc/scripts/diamondtrader.lua" access="5" lookdir="2" walkinterval="0">

<parameter key="message_greet" value="Ola |PLAYERNAME|. Deseja trocar diamonds por itens ?  Diga {items}." />

tente por

XML

<?xml version="1.0"?>

<npc name="Diamond Trader" script="data/npc/scripts/diamondtrader.lua" access="1" lookdir="2" walkinterval="0">

<parameter key="message_greet" value="Ola |PLAYERNAME|. Deseja trocar diamonds por itens ?  Diga {items}." />

 

no lugar de

LUA

keywordHandler:addKeyword({'items'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "Eu troco {bag of pollem} por diamonds."})

local node1 = keywordHandler:addKeyword({'bag of pollem'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer trocar 50 diamonds por 1 bag of pollem?? Yes or no??'})

    node1:addChildKeyword({'yes'}, jestervip, {npcHandler = npcHandler, onlyFocus = true, reset = true})

node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, volte quando quiser negociar!', reset = true})

tente

LUA

keywordHandler:addKeyword({'items'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = "Eu troco {bag of pollem} por {diamonds."})

local node1 = keywordHandler:addKeyword({'bag of pollem'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer trocar 50 diamonds por 1 bag of pollem?? {Yes} or {no} ??'})

    node1:addChildKeyword({'yes'}, jestervip, {npcHandler = npcHandler, onlyFocus = true, reset = true})

node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, volte quando quiser negociar!', reset = true})

Gente, não dou suporte via mp, caso queira ajuda crie um tópico no fórum!!!
youtube.png  10869_64x64.png
Ajudei? Clicar em gostar não vai te matar

Link para o post
Compartilhar em outros sites

Os seguintes erros apareceram ao utilizar o comando /n dentro do jogo :

 

[28/08/2014 03:00:05] [Warning - Npc::loadFromXml] Cannot load npc file (data/npc/Diamond Trader.xml).
[28/08/2014 03:00:05] Info: failed to load external entity "data/npc/Diamond Trader.xml"


[28/08/2014 03:00:14] [Warning - Npc::loadFromXml] Cannot load npc file (data/npc/diamondtrader.xml).
[28/08/2014 03:00:14] Line: 3, Info: Premature end of data in tag npc line 2

[28/08/2014 03:05:07] [Error - Npc interface]
[28/08/2014 03:05:07] data/npc/scripts/default.lua:onThink
[28/08/2014 03:05:07] Description:
[28/08/2014 03:05:07] Stack size changed!
[28/08/2014 03:05:19] [Warning - Npc::loadFromXml] Cannot load npc file (data/npc/diamondtrader.xml).
[28/08/2014 03:05:19] Line: 3, Info: Premature end of data in tag npc line 2

Editado por Born Retarded (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução

use esse;

Diamond.lua

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
 
function onCreatureAppear(cid)    npcHandler:onCreatureAppear(cid)   end
function onCreatureDisappear(cid)   npcHandler:onCreatureDisappear(cid)   end
function onCreatureSay(cid, type, msg)   npcHandler:onCreatureSay(cid, type, msg)  end
function onThink()     npcHandler:onThink()     end
 
local items = {
          item1 = {2145, 11454}, -- item1 item que será pedido e que será dado na primeira troca
}
local counts = {
          count1 = {5, 1}, -- count1 quantidade que será pedido e que será dado na primeira troca
}
 
function creatureSayCallback(cid, type, msg)
          if(not npcHandler:isFocused(cid)) then
                    return false
          end
          local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
          if (msgcontains(msg, 'Diamond') or msgcontains(msg, 'diamond')) then  
                    if getPlayerItemCount(cid, items.item1[1]) >= counts.count1[1] then
                              doPlayerRemoveItem(cid, items.item1[1], counts.count1[1])
                              doPlayerAddItem(cid, items.item1[2], counts.count1[2])
                              selfSay('voce trocou '.. counts.count1[1] ..' '.. getItemNameById(items.item1[1]) ..' por '.. counts.count1[2] ..' '.. getItemNameById(items.item1[2]) ..'.', cid)
                    else
                              selfSay('voce nao tem '.. counts.count1[1] ..' '.. getItemNameById(items.item1[1]) ..'.', cid)
                    end
          end
          return TRUE
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Diamond.xml

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Diamond Trader" script="Diamond.lua" walkinterval="350000" floorchange="0" speed="0">
<health now="150" max="150"/>
<look type="134" head="69" body="32" legs="32" feet="0"/>
<parameters>
<parameter key="message_greet" value="Ola voce que compra Diamond? vamos la, fale Diamond!"/>
<parameter key="message_farewell" value="Good bye!"/>
<parameter key="message_idletimeout" value="Good bye!"/>
<parameter key="message_walkaway" value="Good bye!"/>
</parameters>
</npc>

Link para o post
Compartilhar em outros sites

Posso trocar o nome do npc ?? Se não me engano a base do servidor que estou utilizando pra testar já possui esse npc.

EDIT : Deixa quieto oque foi dito acima

Editado por Born Retarded (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

acho q é na xml nessa parte

<npc name="Diamond Trader"

Gente, não dou suporte via mp, caso queira ajuda crie um tópico no fórum!!!
youtube.png  10869_64x64.png
Ajudei? Clicar em gostar não vai te matar

Link para o post
Compartilhar em outros sites

acho q é na xml nessa parte

<npc name="Diamond Trader"

Eu achei que ele tivesse colocado o nome do npc de diamond somente , depois de abrir o spoiler eu vi que já está com o nome certo , e eu sei a parte onde muda , obrigado mesmo assim. ;D

Link para o post
Compartilhar em outros sites

isto é de poketibia ?

Gente, não dou suporte via mp, caso queira ajuda crie um tópico no fórum!!!
youtube.png  10869_64x64.png
Ajudei? Clicar em gostar não vai te matar

Link para o post
Compartilhar em outros sites

isto é de poketibia ?

Exatamente , um amigo perguntou se eu poderia arrumar e cá estou , o importante era achar uma script pra eu poder olhar ela e tentar entender.

 

 

 

 

use esse;

Diamond.lua

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

local talkState = {}

 

function onCreatureAppear(cid)    npcHandler:onCreatureAppear(cid)   end

function onCreatureDisappear(cid)   npcHandler:onCreatureDisappear(cid)   end

function onCreatureSay(cid, type, msg)   npcHandler:onCreatureSay(cid, type, msg)  end

function onThink()     npcHandler:onThink()     end

 

local items = {

          item1 = {2145, 11454}, -- item1 item que será pedido e que será dado na primeira troca

}

local counts = {

          count1 = {5, 1}, -- count1 quantidade que será pedido e que será dado na primeira troca

}

 

function creatureSayCallback(cid, type, msg)

          if(not npcHandler:isFocused(cid)) then

                    return false

          end

          local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

 

          if (msgcontains(msg, 'Diamond') or msgcontains(msg, 'diamond')) then  

                    if getPlayerItemCount(cid, items.item1[1]) >= counts.count1[1] then

                              doPlayerRemoveItem(cid, items.item1[1], counts.count1[1])

                              doPlayerAddItem(cid, items.item1[2], counts.count1[2])

                              selfSay('voce trocou '.. counts.count1[1] ..' '.. getItemNameById(items.item1[1]) ..' por '.. counts.count1[2] ..' '.. getItemNameById(items.item1[2]) ..'.', cid)

                    else

                              selfSay('voce nao tem '.. counts.count1[1] ..' '.. getItemNameById(items.item1[1]) ..'.', cid)

                    end

          end

          return TRUE

end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

Diamond.xml

<?xml version="1.0" encoding="UTF-8"?>

<npc name="Diamond Trader" script="Diamond.lua" walkinterval="350000" floorchange="0" speed="0">

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

<look type="134" head="69" body="32" legs="32" feet="0"/>

<parameters>

<parameter key="message_greet" value="Ola voce que compra Diamond? vamos la, fale Diamond!"/>

<parameter key="message_farewell" value="Good bye!"/>

<parameter key="message_idletimeout" value="Good bye!"/>

<parameter key="message_walkaway" value="Good bye!"/>

</parameters>

</npc>

 

Funcionou , porém terei que modificá-la  , itens , valores , etc..Ele é faz as trocas por diálogo certo ? Uma aba trade não é aberta correto ?

 

Editado por Born Retarded (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

podes me passar o npc ? -><-

Gente, não dou suporte via mp, caso queira ajuda crie um tópico no fórum!!!
youtube.png  10869_64x64.png
Ajudei? Clicar em gostar não vai te matar

Link para o post
Compartilhar em outros sites

podes me passar o npc ? -><-

As scripts estão ai na conversa do tópico logo acima. ;D

Editado por Born Retarded (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Funcionou , porém terei que modificá-la  , itens , valores , etc..Ele é faz as trocas por diálogo certo ? Uma aba trade não é aberta correto ?
 

Sim ele irar fazer as trocas por Conversas e não por janela ^^

Link para o post
Compartilhar em outros sites

 

Sim ele irar fazer as trocas por Conversas e não por janela ^^

 

Existe alguma maneira com que faça ele fazer as trocas por janela ? você conhece alguma ?

Link para o post
Compartilhar em outros sites

Não tem como fazer por janela eu acho, apenas com gold coins.

Então não existe nenhuma maneira de trocar o "tipo de moeda" que os "Npcs de janela"  pedem quando um jogador vai  comprar algo neles ?

Editado por Born Retarded (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Então não existe nenhuma maneira de trocar o "tipo de moeda" que os "Npcs de janela"  pedem quando um jogador vai fazer comprar algo neles ?

Já tentei porem não tive sucesso, é possivel  e mais Difícil ^^

Link para o post
Compartilhar em outros sites

Já tentei porem não tive sucesso, é possivel  e mais Difícil ^^

Eu estou tentando achar onde está o arquivo que define o tipo de dinheiro que o npc faz as trocas/vendas , porém não encontro nem pelo ID do dinheiro , nem pelo nome do item no jogo.

Editado por Born Retarded (veja o histórico de edições)
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 BonasxD
      Bom galera primeiramente não sei se estou na area correta ou se nao estou, se nao por favor mover para area certa, grato!
      Estou com esse erro ao tenta instalar o gesior usando a tfs 0.4 não passa dessa parte ja tentei de tudo e nao sei oque fazer ;(
       
      Testei o mesmo procedimento no meu Windows e Funcionou corretamente agora no meu VM(Ubuntu22) não passa desse erro. 
       
      Ja pesquisei por tudo e não sei oque fazer

    • Por ambrozii0
      Gostaria de fazer um pedido de um NPC de Task progressiva,

      Ele iniciaria dando missões para level 8 para caçar Troll, Rotworm e Ghoul.
       
      No level 30 liberaria: Cyclops, Dragon e Wyrm... e assim em diante se puder deixar comentado eu faço as criaturas na sequencia dos leveis seguintes.
       
      O jogador pode fazer as tasks dos leveis anteriores mesmo que já tenha ultrapassado o level do próximo nível de task.
       
      E o jogador ao terminar a missão poderia escolher a recompensa em gold ou experiência. As tasks podem se repetir sem problema, mas apenas pode pegar uma de cada vez.
       
      Ao finalizar todas as tasks o jogador ganha uma montaria.
       
      Minha versão de cliente é 12.91
      Versão da Canary 2.6.1
      Não sei qual o TFS do meu servidor.
    • Por Kill of sumoners
      Boa noite, estou com um erro ao atacar um player em meu sv eu nao pego pk, nem sai magia, aparece a mensagem "voce so pode usar isso em criaturas"
      obs: magia em area acerta e pega pk, apenas as targets ou hits de arma nao vao 
    • Por Maniaco
      Salve TibiaKing!!! TFS 0.4 . 8.60
       
      Estou implementando o Sistema do @WooX de Cave Exlusiva

      Link:
       
      Porem estou com um problema seguindo o tutorial completo dele acabo tendo um retorno de erro na Distro! E ja que o mesmo nao entra no forum deis de 14/01! Venho solicitar ajuda de vocês!
      Caso alguem tenha o Discord Dele Favor me Passe  
      Vamos lá!
      Erro:
       
      Script :
       
      Lib
       
       
      Print Rme:
       
       
      Lembrando que nao esta funcionando em geral, Acrédito que eu tenha pulado algo ou deixado passar despercebido!
      Espero que alguem consiga me ajudar vlw!
    • Por Maniaco
      Boa Tarde TibiaKing!!!
       
      Bom estou precisando arrumar um script, não deve ser muito difícil !! (pra quem sabe  !)
      Quem poder ajudar já agradeço.
       
      Resumindo apartir do momento que falo Travel, Yes para o npc ele me teleporta para posicao inicial me transformando(LookType) e precisa me levar até o destino final. (posFinal)
      até ai tudo bem problema que ele comeca a funcionar e me leva para lugar aleatorio e fica parado lá imovel. ( não da erro na Distro ) Apenas fico parado na LookType de barco.
       
      Uso tfs 0.4 8.60
       
      local posis = {
      --[pos do npc] = {pos inicial, pos final},
      [{x = 115, y = 143, z = 10}] = {posIni = {x = 114, y = 134, z = 10}, posFinal = {x = 76, y = 134, z = 10}},
      [{x = 74, y = 132, z = 10}] = {posIni = {x = 76, y = 134, z = 10}, posFinal = {x = 95, y = 147, z = 10}},
      }
       
       é um NPC
       
       
      .LUA DO NPC
       
      LIB - TRAVEL.LUA
       
       
       
      ,XML
       
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo