Ir para conteúdo
  • Cadastre-se

(Resolvido)Npc de troca


Ir para solução Resolvido por Caronte,

Posts Recomendados

Alguém poderia me ajudar. Gostaria de um npc de troca, que pede 7 items e em troca da 1 item, que pode ter a opção de escolher 4 items pelo qual pode trocar os 7 items.

Por favor, ficaria grato com ajuda. Rep + mais quem ajudar.

 

Obrigado desde de já !

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

Cara, quando fizer um pedido não esquece de informar o TFS do seu servidor, isso é de extrema importância para criar o script.

Te ajudei? Clique em  Gostei ! 

²²²d¬¬b²²²

 

 

"She's got a smile that it seems to me...."  ♪♪

Link para o post
Compartilhar em outros sites

Aqui está:

 

 

Npc.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


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 itemsp = {2666, 2671, 2681, 2695, 2667, 2676, 2675} -- os 7 items que precisam.
    
    
    s = ""
    for k, v in pairs(itemsp) do 
        s = s.."{".. getItemNameById(v) .."}".. (#itemsp ~= k and ", " or "")
        
    end
    
    function pegaritems()
        for k, v in pairs(itemsp) do
            doPlayerRemoveItem(cid, v, 1)
        end
    end
    
    function temitem()
        for k, v in pairs(itemsp) do 
            if not (getPlayerItemCount(cid, v) >= 1) then
                return false
            end
        end
        return true
    end
    
    local tab = {	[2] = 7454, -- axe
        [3] = 2376, -- sword
        [4] = 2389, -- spear
    }
    
    
    if (msgcontains(msg, "troca") or msgcontains(msg, "trocar") or msgcontains(msg, "yes")) and talkState[talkUser] == nil then
        npcHandler:say("Ok, preciso de {7 items} em troca de: ("..getItemArticleById(tab[2]).." {"..getItemNameById(tab[2]).."} - ID: "..tab[2].."), ("..getItemArticleById(tab[3]).." {"..getItemNameById(tab[3]).."} - ID: "..tab[3]..") ou ("..getItemArticleById(tab[4]).." {"..getItemNameById(tab[4]).."} - ID: "..tab[4]..")", cid)
        talkState[talkUser] = 1
    elseif (msgcontains(msg, "axe")) and talkState[talkUser] == 1 then
        npcHandler:say("Voce quer trocar: ".. s .." por um {axe}?", cid)
        talkState[talkUser] = 2
    elseif (msgcontains(msg, "sword")) and talkState[talkUser] == 1 then
        npcHandler:say("Voce quer trocar: ".. s .." por uma {sword}?", cid)
        talkState[talkUser] = 3
    elseif (msgcontains(msg, "spear")) and talkState[talkUser] == 1 then
        npcHandler:say("Voce quer trocar: ".. s .." por uma {spear}?", cid)
        talkState[talkUser] = 4
    elseif (msgcontains(msg, "yes")) and tab[talkState[talkUser]] then 
        for k, v in pairs(itemsp) do 
            if not temitem() then
                doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
                npcHandler:say("Voce nao tem todos os items, desculpe, nada feito.", cid)
                npcHandler:onCreatureDisappear(cid)
                talkState[talkUser] = nil
                return true
            elseif temitem() then 
                pegaritems()
                doPlayerAddItem(cid, tab[talkState[talkUser]])
                npcHandler:say("Uhuul, troca feita, obrigado.", cid)
                npcHandler:onCreatureDisappear(cid)
                talkState[talkUser] = nil
                return true
            end
        end
    end
end 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Npc.Xml

<?xml version="1.0"?>
<npc name="Troque aqui" script="trocador de item.lua" walkinterval="2000">
  <mana now="800" max="800" />
  <health now="200" max="200" />
  <look type="132" head="0" body="0" legs="0" feet="0" addons="3" />
  <parameters>
    <parameter key="message_greet" value="Ola, |PLAYERNAME|, gostaria de fazer uma {troca}?" />
    <parameter key="message_farewell" value="Ate mais, |PLAYERNAME|!" />
    <parameter key="message_walkaway" value="Valeu!" />
  </parameters>

 

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

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites
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 itemsp = {2666, 2671, 2681, 2695, 2667, 2676, 2675} -- os 7 items que precisam.
    
    
    s = ""
    for k, v in pairs(itemsp) do 
        s = s.."{".. getItemNameById(v) .."}".. (#itemsp ~= k and ", " or "")
        
    end
    
    function pegaritems()
        for k, v in pairs(itemsp) do
            doPlayerRemoveItem(cid, v, 1)
        end
    end
    
    function temitem()
        for k, v in pairs(itemsp) do 
            if not (getPlayerItemCount(cid, v) >= 1) then
                return false
            end
        end
        return true
    end
    
    local tab = {	
		[2] = {7454, 4}, -- axe
        [3] = {2376, 2}, -- sword
        [4] = {2389, 2}, -- spear
    }
    	
    if (msgcontains(msg, "troca") or msgcontains(msg, "trocar") or msgcontains(msg, "yes")) and talkState[talkUser] == nil then
        npcHandler:say("Ok, preciso de {7 items} em troca de: ("..getItemArticleById(tab[2][1]).." {"..getItemNameById(tab[2][1]).."} - ID: "..tab[2][1].."), ("..getItemArticleById(tab[3][1]).." {"..getItemNameById(tab[3][1]).."} - ID: "..tab[3][1]..") ou ("..getItemArticleById(tab[4][1]).." {"..getItemNameById(tab[4][1]).."} - ID: "..tab[4][1]..")", cid)
        talkState[talkUser] = 1
    elseif (msgcontains(msg, tostring(getItemNameById(tab[2][1])))) and talkState[talkUser] == 1 then
        npcHandler:say("Voce quer trocar: ".. s .." por um {"..getItemNameById(tab[2][1]).."}?", cid)
        talkState[talkUser] = 2
    elseif (msgcontains(msg, tostring(getItemNameById(tab[3][1])))) and talkState[talkUser] == 1 then
        npcHandler:say("Voce quer trocar: ".. s .." por uma {"..getItemNameById(tab[3][1]).."}?", cid)
        talkState[talkUser] = 3
    elseif (msgcontains(msg, tostring(getItemNameById(tab[4][1])))) and talkState[talkUser] == 1 then
        npcHandler:say("Voce quer trocar: ".. s .." por uma {"..getItemNameById(tab[4][1]).."}?", cid)
        talkState[talkUser] = 4
    elseif (msgcontains(msg, "yes")) and tab[talkState[talkUser]]  then 
        for k, v in pairs(itemsp) do 
            if not temitem() then
                doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
                npcHandler:say("Voce nao tem todos os items, desculpe, nada feito.", cid)
                npcHandler:onCreatureDisappear(cid)
                talkState[talkUser] = nil
                return true
            elseif temitem() then 
                pegaritems()
				for i = 1, tab[talkState[talkUser]][2] do 
					doPlayerAddItem(cid, tab[talkState[talkUser]][1])
				end
                npcHandler:say("Uhuul, troca feita, obrigado.", cid)
                npcHandler:onCreatureDisappear(cid)
                talkState[talkUser] = nil
                return true
            end
        end
    end
end 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites
  • Solução
7 minutos atrás, Gabrielk disse:

  local itemsp = {2666, 2671, 2681, 2695, 2667, 2676, 2675} -- os 7 items que precisam.

esse daqui que eu queria... por favor

 

Opa, desculpa, burrice minha.

 

Agora ambos estão configuráveis:

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 itemsp = {	
						[1] = {2666, 2}, 
						[2] = {2671, 2}, 
						[3] = {2681, 2}, 
						[4] = {2695, 2}, 
						[5] = {2667, 2}, 
						[6] = {2676, 2}, 
						[7] = {2675, 2},
	} -- os 7 items que precisam.
    
    
    s = ""
    for k, v in pairs(itemsp) do 
        s = s.."{"..v[2].." ".. getItemNameById(v[1]) .."}".. (#itemsp ~= k and ", " or "")
        
    end
    
    function pegaritems()
        for k, v in pairs(itemsp) do
            doPlayerRemoveItem(cid, v[1], v[2])
        end
    end
    
    function temitem()
        for k, v in pairs(itemsp) do 
            if not (getPlayerItemCount(cid, v[1]) >= v[2]) then
                return false
            end
        end
        return true
    end
    
    local tab = {	
		[2] = {7454, 1}, -- axe
        [3] = {2376, 1}, -- sword
        [4] = {2389, 1}, -- spear
    }
    	
    if (msgcontains(msg, "troca") or msgcontains(msg, "trocar") or msgcontains(msg, "yes")) and talkState[talkUser] == nil then
        npcHandler:say("Ok, preciso de {7 items} em troca de: ("..getItemArticleById(tab[2][1]).." {"..getItemNameById(tab[2][1]).."} - ID: "..tab[2][1].."), ("..getItemArticleById(tab[3][1]).." {"..getItemNameById(tab[3][1]).."} - ID: "..tab[3][1]..") ou ("..getItemArticleById(tab[4][1]).." {"..getItemNameById(tab[4][1]).."} - ID: "..tab[4][1]..")", cid)
        talkState[talkUser] = 1
    elseif (msgcontains(msg, tostring(getItemNameById(tab[2][1])))) and talkState[talkUser] == 1 then
        npcHandler:say("Voce quer trocar: ".. s .." por um {"..getItemNameById(tab[2][1]).."}?", cid)
        talkState[talkUser] = 2
    elseif (msgcontains(msg, tostring(getItemNameById(tab[3][1])))) and talkState[talkUser] == 1 then
        npcHandler:say("Voce quer trocar: ".. s .." por uma {"..getItemNameById(tab[3][1]).."}?", cid)
        talkState[talkUser] = 3
    elseif (msgcontains(msg, tostring(getItemNameById(tab[4][1])))) and talkState[talkUser] == 1 then
        npcHandler:say("Voce quer trocar: ".. s .." por uma {"..getItemNameById(tab[4][1]).."}?", cid)
        talkState[talkUser] = 4
    elseif (msgcontains(msg, "yes")) and tab[talkState[talkUser]]  then 
        for k, v in pairs(itemsp) do 
            if not temitem() then
                doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
                npcHandler:say("Voce nao tem todos os items, desculpe, nada feito.", cid)
                npcHandler:onCreatureDisappear(cid)
                talkState[talkUser] = nil
                return true
            elseif temitem() then 
                pegaritems()
				for i = 1, tab[talkState[talkUser]][2] do 
					doPlayerAddItem(cid, tab[talkState[talkUser]][1])
				end
                npcHandler:say("Uhuul, troca feita, obrigado.", cid)
                npcHandler:onCreatureDisappear(cid)
                talkState[talkUser] = nil
                return true
            end
        end
    end
end 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo