Ir para conteúdo
  • Cadastre-se

NPC que troca um item por um item aleatório


Posts Recomendados

-O NPC funciona realmente só que apresenta 2 problemas que preciso resolver, espero que entendam..

É um NPC que troca um item "A, B ou C" por um item aleatório "X, Y ou Z".

 

PROBLEMA:

1º MENSAGEM DO NPC: Após falar o tipo de troféu (bronze/prata/ouro), o "NPC" não fala se deseja confirmar a troca do troféu pela gema, ou seja ele já faz a troca após escreve a opção de troféu.

 

2º FALA DO NPC: O "NPC" está repetindo algumas frases de outros NPC's, por exemplo tenho um npc chamado "Mary", e ela tem uma fala que é "Venda seus gold ingot aqui!" e esse "NPC" de troca, fala a mesma frase mesmo não sendo programado na script.

_________________________________________________________________________________________________________________________

 

SOLUÇÃO:

1º MENSAGEM DO NPC: Quero que mande uma mensagem de confirmação após escolher a opção de troféu (bronze/prata/ouro)

Exemplo:

 

#Player: Hi

#NPC: Ola |PLAYERNAME|. Seja Bem-Vindo a Sala de Trocas. Eu coleciono {trofeus} de ouro, prata e bronze. E para garantir que todos troquem comigo, eu retribuo dando gemas aleatorias.

#Player: troféu

#NPC: Acho que você pretende trocar algum troféu por gemas. Qual troféu você pretende trocar comigo: {ouro}, {prata} ou {bronze}

_________________________________________________________________________________________________________________________

 

#Player: bronze

#NPC: Você tem certeza que quer trocar 1 troféu de bronze por 1 gema aleatória?                         <<< A MENSAGEM DE CONFIRMAÇÃO

#Player: sim                                              

#NPC: Obrigado, aqui estão suas gemas.

 ________________________________________________________________________________                                                         

#Player: prata

#NPC: Você tem certeza que quer trocar 1 troféu de prata por 2 gema aleatória?                           <<< A MENSAGEM DE CONFIRMAÇÃO        

#Player: sim

#NPC: Obrigado, aqui estão suas gemas.  

 ________________________________________________________________________________                                                                     

#Player: ouro

#NPC: Você tem certeza que quer trocar 1 troféu de ouro por 3 gema aleatória?                           <<< A MENSAGEM DE CONFIRMAÇÃO

#Player: sim

#NPC: Obrigado, aqui estão suas gemas.

_________________________________________________________________________________________________________________________

 

2º FALA DO NPC: Quero que fale as frases que foi programado na script, ou seja não fale de outros NPC's.

Exemplo:

 

#Troque o seu troféu aqui.

#Só entendo português, diga oi.
#Oi! Troco gemas por troféus!
_________________________________________________________________________________________________________________________
 
 
Data/npc:
<npc name="Josue" script="data/npc/scripts/trofeu.lua" walkinterval="2000" floorchange="0">
	<health now="100" max="100"/>
	<look type="133" head="79" body="0" legs="128" feet="128" addons="1"/>
	<parameters>
		<parameter key="message_greet" value="Ola |PLAYERNAME|. Seja Bem-Vindo a Sala de Trocas. Eu coleciono {trofeus} de ouro, prata e bronze. E para garantir que todos troquem comigo, eu retribuo dando gemas aleatorias."/>
	</parameters>
</npc>

Data/npc/scripts:

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
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

function thinkCallback(cid)
local rand = math.random(1,100)
if rand == 10 then
selfSay('Troque o seu troféu aqui.') -- msg que vai sair do npc
end
if rand == 11 then
selfSay ('Só entendo português, diga oi.')
end
if rand == 12 then
selfSay ('Oi! Troco gemas por trofeús!')
end
return true
end
function greetCallback(cid)
return true
end
 
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
local trophy = {
    ["ouro"] = {3, 5805},    --{Quantidade de items aleatórios, ID do troféu}, 
    ["prata"] = {2, 5806},
    ["bronze"] = {1, 5807}, 
}
local items = {2154, 2156, 2158}
 
    if msgcontains(msg, "trophy") or msgcontains(msg, "trofeu") then
        selfSay("Acho que você pretende trocar algum troféu por gemas. Qual troféu você pretende trocar comigo: {ouro}, {prata} ou {bronze}?", cid)
        talkState[talkUser] = 1
        return true
    elseif talkState[talkUser] == 1 then
        if trophy[msg:lower()] then
            local trofeu = trophy[msg:lower()]
            local id = trofeu[2]
            if getPlayerItemCount(cid, id) > 0 then
                for i = 1, trofeu[1] do
                    doPlayerAddItem(cid, items[math.random(#items)], 1)
                end
                doPlayerRemoveItem(cid, id, 1)
                selfSay("Obrigado, aqui estão suas gemas.", cid)
                talkState[talkUser] = 0
                return true
            else
                selfSay("Você não possui este troféu.", cid)
                talkState[talkUser] = 0
                return true
            end
        else
            selfSay("Este troféu não existe.", cid)
            talkState[talkUser] = 0
            return true
        end
    end
    return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:setCallback(CALLBACK_ONTHINK, thinkCallback)
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:addModule(FocusModule:new())

Espero que alguém me ajude necessito muito desse NPC, agradeço quem puder ajudar!

 

Link para o post
Compartilhar em outros sites

Existem outros npc's perto desse npc? Pois essas falas de npc's diferentes podem ser falas dos outros npc's das proximidades.

Te ajudei?? REP + e ficamos quites... <ahttp://www.tibiaking.com/forum/uploads/emoticons/default_happyy.png' alt=';D'>

Atenciosamente,

Daniel.

Abraços!

Link para o post
Compartilhar em outros sites

Essas falas que não são do npc, são desses npc's. Pra resolver isso separe um pouco mais os npc's entre si.

Te ajudei?? REP + e ficamos quites... <ahttp://www.tibiaking.com/forum/uploads/emoticons/default_happyy.png' alt=';D'>

Atenciosamente,

Daniel.

Abraços!

Link para o post
Compartilhar em outros sites

Sim, já tentei e não funcionou...

se possível focar no problema 1º ajudaria muito é oque eu mais preciso!

Editado por williamcgv (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
local mensagem = ""
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
function creatureSayCallback(cid, type, msg)
    if(not npcHandler:isFocused(cid)) then
        return false
    end
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
    local trophy = {
        ["ouro"] = {3, 5805},    --{Quantidade de items aleatórios, ID do troféu}, 
        ["prata"] = {2, 5806},
        ["bronze"] = {1, 5807}, 
    }
    local items = {2154, 2156, 2158}
 
    if msgcontains(msg:lower(), "trophy") or msgcontains(msg:lower(), "trofeu") then
        selfSay("Acho que você pretende trocar algum troféu por gemas. Qual troféu você pretende trocar comigo: {ouro}, {prata} ou {bronze}?", cid)
        talkState[talkUser] = 1
        return true
    elseif talkState[talkUser] == 1 then
        if trophy[msg:lower()] then
            selfSay("Você tem certeza que quer trocar 1 troféu de "..msg:lower().." por "..trophy[msg:lower()][1].." gema"..(trophy[msg:lower()][1] > 1 and "s" or "").." aleatória"..(trophy[msg:lower()][1] > 1 and "s" or "").."?", cid)
            mensagem = msg:lower()
            talkState[talkUser] = 2
            return true
        else
            selfSay("Este troféu não existe.", cid)
            talkState[talkUser] = 0
            return true
        end  
    elseif msgcontains(msg:lower(), "yes") or msgcontains(msg:lower(), "sim") and talkState[talkUser] == 2 then
        local trofeu = trophy[mensagem]
        local id = trofeu[2]
        if getPlayerItemCount(cid, id) > 0 then
            for i = 1, trofeu[1] do
                doPlayerAddItem(cid, items[math.random(#items)], 1)
            end
            doPlayerRemoveItem(cid, id, 1)
            selfSay("Obrigado, aqui estão suas gemas.", cid)
            talkState[talkUser] = 0
            return true
        else
            selfSay("Você não possui este troféu.", cid)
            talkState[talkUser] = 0
            return true
        end
    end
    return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())            
Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

as mensagem está aparecendo, só que o NPC não está trocando o troféu pela gema... pf arruma ae!

está dando esse erro:

[12/01/2015 16:14:15] [Error - Npc interface]

[12/01/2015 16:14:15] data/npc/scripts/trofeu.lua:onCreatureSay

[12/01/2015 16:14:15] Description:

[12/01/2015 16:14:15] data/npc/scripts/trofeu.lua:39: attempt to index local 'trofeu' (a nil value)

[12/01/2015 16:14:15] stack traceback:

[12/01/2015 16:14:15] data/npc/scripts/trofeu.lua:39: in function 'callback'

[12/01/2015 16:14:16] data/lib/npchandler.lua:390: in function 'onCreatureSay'

[12/01/2015 16:14:16] data/npc/scripts/trofeu.lua:7: in function <data/npc/scripts/trofeu.lua:7>

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

porra muito obrigado lesk ajudo d+ se possível ajudar no 2 problema agradeceria mais ainda!

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

Sobre o segundo problema, provavelmente é algum onThink que esteja causando isso (dã). Se mesmo com o código que passei isso continua acontecendo, dá uma olhada no código desse NPC que você citou (Mary) e veja se há alguma coisa relacionada a essas mensagens (tanto no XML quanto no lua). Se tiver, poste os códigos. Se não, hm, vai ser um pouco mais complicado. 

Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

 

<npc name="Mary" script="data/npc/scripts/refinamento.lua" walkinterval="25" floorchange="0" access="5" level="1" maglevel="1">

<health now="150" max="150"/>
<look type="147" head="0" body="114" legs="91" feet="85" addons="3" corpse="2212"/>
<parameters>
<parameter key="module_shop" value="1" />
<parameter key="message_greet" value="Ola |PLAYERNAME|. Diga {negociar} para vender pedras de refinamento." />
<parameter key="shop_sellable" value="pedra refinadora nivel 1,8298,1000;pedra refinadora nivel 2,8299,2000;pedra refinadora nivel 3,8301,5000; pedra refinadora nivel 4,8302,20000; pedra refinadora niveis 5,8303,50000"/>
</parameters>
</npc>
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

function thinkCallback(cid)
local rand = math.random(1,100)
if rand == 2 then
selfSay('Olá! Venda suas pedras aqui!') -- msg que vai sair do npc
end
if rand == 1 then
selfSay ('Só entendo português, diga oi.')
end
if rand == 3 then
selfSay ('Posso te ajudar?')
end
return true
end
function greetCallback(cid)
return true
end


local shopModule = ShopModule:new()
npcHandler:addModule(shopModule)

shopModule:addBuyableItem({'Holy Pet'}, 8298, 0, 'pedra refinadora nivel 1')
shopModule:addBuyableItem({'Fire Pet'}, 8299, 0, 'pedra refinadora nivel 2')
shopModule:addBuyableItem({'Ice Pet'}, 8301, 0, 'pedra refinadora nivel 3')
shopModule:addBuyableItem({'Terra Pet'}, 8302, 0, 'pedra refinadora nivel 4')
shopModule:addBuyableItem({'Energy Pet'}, 8303, 0, 'pedra refinadora nivel 5')


npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:setCallback(CALLBACK_ONTHINK, thinkCallback)
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:addModule(FocusModule:new())

não sei que tem de errado!

E  voltando no primeiro problema. Para finalizar tem como ajeitar isso:

selfSay("Você tem certeza que quer receber "..trophy[msg:lower()][1].." gemas aleatória por um troféu de "..msg:lower().."?", cid)

 

Se eu trocar um troféu de bronze na gema no caso receberia só "1 gema" e a mensagem diz "gemas aleatória"

Obs: ou seja não faria sentido 1 está no plural entende?

 

Só quero que quando fale bronze a mensagem apareça assim:

Você tem certeza que quer receber 1 gema aleatória por um troféu de bronze.

Link para o post
Compartilhar em outros sites

Mudei essa parte da mensagem.

Sobre o segundo problema: o NPC que compra troféus continua dizendo mensagens de outros NPCs? Se sim, no momento não consigo pensar no que pode ser, exatamente. Mas é algum problema do seu servidor, não do NPC. :x

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

obrigado primeiro problema resolvido!

já o segundo cara ele ta repetindo as frases desse npc aqui :

<npc name="Donna" script="data/npc/scripts/info.lua" walkinterval="2000" floorchange="0">
	<health now="100" max="100"/>
	<look type="136" head="132" body="79" legs="97" feet="132" addons="3"/>
	<parameters>
		<parameter key="message_greet" value="Ola |PLAYERNAME|. Para comprar a promotion diga {!promotion}. Para ver as magias novas diga {!spells}. Para checar o ranking diga {!rank}. Para mudar de sexo diga {!sex}. Para sair dos trainers diga {!sair}. Para ver os status do seu personagem diga {!charinfo}."/>
	</parameters>
</npc>
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

function thinkCallback(cid)
local rand = math.random(1,100)
if rand == 1 then
selfSay('Olá Bem-Vindo ao One Finity Server.') -- msg que vai sair do npc
end
if rand == 2 then
selfSay ('Só entendo português, diga oi.')
end
if rand == 3 then
selfSay ('Para saber novos comandos, fale comigo!')
end
return true
end
function greetCallback(cid)
return true
end

npcHandler:setCallback(CALLBACK_ONTHINK, thinkCallback)
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:addModule(FocusModule:new())
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 Mathwsz
      Bom galera, estou trazendo um script de fusão que funciona assim:
      Explicação: É necessário de 7 itens, na qual você coloca em tal coordenada e aperte a alavanca, sendo assim formando um item na qual você deseja em tal lugar configurado.
      Exemplo: Você pode fazer 7 bosses na qual dropa tals itens "Parecidos" e formando um item raro de sua escolha, ou como preferir.. Vamos ao script!
       
      Em Data/Actions/Scripts crie um arquivo chamado fusaoitens.lua e adicione isto dentro:
       
       
      Agora, em Data/Actions.xml adicione o seguinte:
       
      <action uniqueid="9900" script="fusaoitens.lua" /> E no seu RemeresMapEditor , pegue sua alavanca, vai em Propriedades e adicione o UniqueID 9900 nele! 
      PRONTO! Agora configure e divirta-se! Obs: Caso lhe ajudei, da um REP+ Aí !
    • Por Wend
      Olá Pessoal  
       
      Sou novo no fórum e queria sabe Onde tem as Funções das scripts.lua? 
      se For possivel explicando Cada uma *--* 
       
      Vallew e Rep+ para quem mim passa
    • Por jhonfreitas
      Olá, estou com a seguinte problema.
      como sou um noob inutil em mexer com scripts sempre faço erros desse tipo.   

      E é assim que esta o script.


       
      Eu peguei esse Outfits com Attributes de um post do Kimoszin. Ja que o ultimo post la foi de 2012, evitei de reviver um topico   
      Se quiser checar lá.    http://www.tibiaking.com/forum/topic/9273-outfits-com-attributes/
       
      Por fim se alguém puder me ajudar é Rep+   
       
      Se quiser baixar pra conferir e encontrar o problema > outfits.xml
    • Por pabloxp
      gostaria que alguem me ajuda-se!! queria 1 sistema ou script que o trenó (Sled) se movimentase qnd o char fica-se em cima dele e ele controlase o trenó para as direçoes segurando CTRL + a direção desejada
      +rep pra qm ajudar
    • Por Jose Peterson
      Queria um script para o meu New Slayer Yurots 8.60.
      Um Script onde eu poderia adicionar vocação nas outfits, como no NaruTibia e outros server do tipo.
      Exemplo: Player Knight só pode usar a outfit Knight e mais nenhuma outra, e tambem nemhuma outra vocação pode usar a outfit knight além dó própio
      Eu procurei pelo TibiaKing e achei tópicos onde eles falavam de Storages, Quest="xxxx" ... Só que nemhum deles deu certo, se alguem tiver uma ajuda e poder explicar sobre essesStorages e Quests ... Ajuda ae galera
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo