Ir para conteúdo
  • Cadastre-se

(Resolvido)[pedido] Npc que troca um item por outro..


Ir para solução Resolvido por Frenesy,

Posts Recomendados

Quero um npc q troque uma boots of haste por uma soft boots

Mas so pode trocar uma vez por play...

Ajuda ae tk.....

Rep +

Link para o post
Compartilhar em outros sites

Não sei se você entende um pouco, e vai saber implementar o script e configura-lo, qualquer duvida poste aqui ...

 

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 change(cid, message, keywords, parameters, node)
    if(not npcHandler:isFocused(cid)) then return false end
    
	local config =
	{
		STORAGE = 85222,
		ITEM = {2160, 1},
		REWARD = {2160, 1}
	}
	
	if getPlayerStorageValue(cid, config.STORAGE) == 0 then
		if getPlayerItemCount(cid, config.ITEM[1]) >= config.ITEM[2] then
			if doPlayerRemoveItem(cid, config.ITEM[1], config.ITEM[2]) then
				npcHandler:say('Here is your item!', cid)
				setPlayerStorageValue(cid, config.STORAGE, 1)
				doPlayerAddItem(cid, config.REWARD[1], config.REWARD[2])
			end
		else
			npcHandler:say('You don\'t have these items!', cid)
		end
	else
		npcHandler:say('VocÊ já pegou seu item', cid)
	end
end

local node1 = keywordHandler:addKeyword({'change'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Hum Humm! Welcume lil. Me can do unbroken but Big Ben want gold 5000 and Big Ben need a lil time to make it unbroken. Yes or no??'})
    node1:addChildKeyword({'yes'}, change, {npcHandler = npcHandler, onlyFocus = true, reset = true})
    node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then. Come back when you got the neccessary items.', reset = true})
	
npcHandler:addModule(FocusModule:new())
Link para o post
Compartilhar em outros sites

É um NPC, que trocará itens com o player, ou seja, pedirá Item1 e dará o Item2, que poderá ser configurado no script.

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


-- Config --

local configs = {
    
    FirstItemId = 2455,
    FirstItemCount = 5,
    SecondItemId = 2321,
    SecondItemCount = 1,

    isQuest = "false",    
    questStorage = 17890,

    msgMeet = 'Você deseja trocar '..FirstItemCount .. ' '.. getItemName(FirstItemId) ..' por '.. SecondItemCount ..' '.. getItemName(SecondItemId) ..'?',
    msgQuestCompleted = "Você já fez essa quest.",
    msgQuestNotItem = "Voce não tem o item necessario.",

    }


function npcTroca(cid, message, keywords, parameters, node)

    if(not npcHandler:isFocused(cid)) then
        return false
    end

    if (configs.isQuest == "true") then
    if (getPlayerStorageValue(configs.questStorage) <= 0) then
        if (getItemCount(cid, configs.FirstItemId) == configs.FirstItemCount) then
            doRemoveItem(configs.FirstItemId, config.FirstItemCount)
            doPlayerAddItem(cid, configs.SecondItemId, configs.SecondItemCount)
        else
            return     doPlayerSendTextMessage(cid, 27, configs.msgQuestNotItem)
        end
    else
        return doPlayerSendTextMessage(cid, 27, configs.msgQuestCompleted)
    end
else
    if (getItemCount(cid, configs.FirstItemId) == configs.FirstItemCount) then
        doRemoveItem(configs.FirstItemId, config.FirstItemCount)
        doPlayerAddItem(cid, configs.SecondItemId, configs.SecondItemCount)
    else
        return     doPlayerSendTextMessage(cid, 27, configs.msgQuestNotItem)
    end    
end
end

itemTrade = keywordHandler:addKeyword({'offer'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = configs.msgMeet})
itemTrade:addChildKeyword({'yes'}, npcTroca, {})
itemTrade:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then.', reset = true})
        
npcHandler:addModule(FocusModule:new())

 

O código acima possui a acessibilidade de troca de IDs e Quantidades, para isso vá no CONFIGS e altere.
Editado por macalo (veja o histórico de edições)

Link para o post
Compartilhar em outros sites

Obrigado macalo :)

Mais tarde eu testo e dou rep+

Agr to no cel..

Sobre leitura de script nao entendo muito

Pode mostra como configurar??

Link para o post
Compartilhar em outros sites
00:30 Heron: Voc? j? pegou seu item
00:30 Testt [224]: yes

Ai Troquei Como Vc Mando I Nada Ele Fala A Msm Coisa
Link para o post
Compartilhar em outros sites
  • Solução

 -- < Script by Frenesy > --
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 doCreatureSayWithDelay(cid,text,type,delay,e)
   if delay<=0 then
      doCreatureSay(cid,text,type)
   else
      local func=function(pars)
                    doCreatureSay(pars.cid,pars.text,pars.type)
                    pars.e.done=TRUE
                 end
      e.done=FALSE
      e.event=addEvent(func,delay,{cid=cid, text=text, type=type, e=e})
   end
end




function cancelNPCTalk(events)
  local ret=1
  for aux=1,table.getn(events) do
     if events[aux].done==FALSE then
        stopEvent(events[aux].event)
     else
        ret=ret+1
     end
  end
  events=nil
  return(ret)
end




function doNPCTalkALot(msgs,interval)
  local e={}
  local ret={}
  if interval==nil then interval=3000 end --3 seconds is default time between messages
  for aux=1,table.getn(msgs) do
      e[aux]={}
      doCreatureSayWithDelay(getNpcCid(),msgs[aux],TALKTYPE_PRIVATE_NP,(aux-1)*interval,e[aux])
      table.insert(ret,e[aux])
  end
  return(ret)
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


    if(msgcontains(msg, 'trocar') or msgcontains(msg, 'changer')) and getPlayerStorageValue(cid,1000) == -1 then -- Configura Storage Aqui
selfSay('Deseja trocar uma {Boots of Haster} por uma {Soft Boots}?', cid)
talkState[talkUser] = 1


elseif((msgcontains(msg, 'no') or msgcontains(msg, 'nao')) and talkState[talkUser] == 1) then
selfSay('Tudo bem entao. Adeus!.', cid)
talkState[talkUser] = 0


elseif(msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 and getPlayerStorageValue(cid,1000) == -1 and getPlayerItemCount(cid, BootIfHasterID) >= 1 then
selfSay('Aqui esta!', cid)


doSendMagicEffect(getPlayerPosition(cid), 13)
setPlayerStorageValue(cid, 1000, 1)
doPlayerAddItem(cid,BootOfHasterID, -1)
doPlayerAddItem(cid,SoftBootsID, 1)
talkState[talkUser] = 0


elseif(msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 and getPlayerStorageValue(cid,1000) == -1 and getPlayerItemCount(cid, BootIfHasterID) < 1 then
selfSay('Voce nao possui o item.', cid)
talkState[talkUser] = 0


elseif(msgcontains(msg, 'trocar') or msgcontains(msg, 'changer')) and getPlayerStorageValue(cid,1000) == 1 then -- Configura Storage Aqui
selfSay('Voce so pode realiazar esta troca apenas uma vez.', cid)


end 
return TRUE
end


npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new()) 
Editado por Frenesy (veja o histórico de edições)

cms1-pr%C3%AAmio.png

Link para o post
Compartilhar em outros sites

Frenesy obrigado pelo script

Hj a noite eu testo, agr to no trabalho

depois digo se funciono.

Ate maiss..

Link para o post
Compartilhar em outros sites

Frenesy Esse Script Nao Ta Funcionando Corretamente
O Npc Ta Falando Q Eu Nao Tenho O Item J

Ja Coloquei o Id E Nada
Alguem Sabe Resolver??

 

Link para o post
Compartilhar em outros sites

@wesleyyy segunda vez que peço para tomar cuidado com double post,como você é um membro novo eu vou deixar passar mais uma vez.Caso precise acrescentar alguma coisa que esqueceu ou algo do tipo é só editar o ultimo comentario,não tem necessidade de criar mais um amigo !

Leia as regras do fórum : http://www.tibiaking.com/forum/forum/23-regras-do-forum/

Link para o post
Compartilhar em outros sites

@wesleyyy só é permitido dar UP após 24 horas brother !

Leia as regras do fórum : http://www.tibiaking.com/forum/forum/23-regras-do-forum/

 

Dar "UP" para subir tópicos:
Não é proibido da "UP" em seus tópicos para ele subir na listagem, porém você só poderá usar deste beneficio dentro de um período de 24h, ou seja, se você deu "UP" agora só poderá dar novamente daqui 24h, caso ao contrário seu tópico será fechado. Lembre-se que isto é um exceção da regra do double post, tanto é que você só poderá usar deste beneficio de 48 em 48 horas.

Link para o post
Compartilhar em outros sites

 ViitinG Oq Foi Q Eu Fiz Dessa Vez ???
Ja Mi Avisou Isso Duas Vezes No Msm Post


Esse Poster Foi  Criado por wesleyyyOntem, 12:09

Ja E 19:10

dei Up Era 18hrs

 

Link para o post
Compartilhar em outros sites

Você cometeu double post 2 vezes e eu deixei passar sem nenhum problema por você ser um membro novo e agora você deu UP no tópico antes de 24 horas,se você pegasse 10 minutos do seu tempo para ler as regras você iria ver que oque está fazendo é proibído.

Regras do fórum : http://www.tibiaking.com/forum/forum/23-regras-do-forum/

Link para o post
Compartilhar em outros sites

 -- < Script by Frenesy > --
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 doCreatureSayWithDelay(cid,text,type,delay,e)
   if delay<=0 then
      doCreatureSay(cid,text,type)
   else
      local func=function(pars)
                    doCreatureSay(pars.cid,pars.text,pars.type)
                    pars.e.done=TRUE
                 end
      e.done=FALSE
      e.event=addEvent(func,delay,{cid=cid, text=text, type=type, e=e})
   end
end




function cancelNPCTalk(events)
  local ret=1
  for aux=1,table.getn(events) do
     if events[aux].done==FALSE then
        stopEvent(events[aux].event)
     else
        ret=ret+1
     end
  end
  events=nil
  return(ret)
end




function doNPCTalkALot(msgs,interval)
  local e={}
  local ret={}
  if interval==nil then interval=3000 end --3 seconds is default time between messages
  for aux=1,table.getn(msgs) do
      e[aux]={}
      doCreatureSayWithDelay(getNpcCid(),msgs[aux],TALKTYPE_PRIVATE_NP,(aux-1)*interval,e[aux])
      table.insert(ret,e[aux])
  end
  return(ret)
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


    if(msgcontains(msg, 'trocar') or msgcontains(msg, 'changer')) and getPlayerStorageValue(cid,1000) == -1 then -- Configura Storage Aqui
selfSay('Deseja trocar uma {Boots of Haster} por uma {Soft Boots}?', cid)
talkState[talkUser] = 1


elseif((msgcontains(msg, 'no') or msgcontains(msg, 'nao')) and talkState[talkUser] == 1) then
selfSay('Tudo bem entao. Adeus!.', cid)
talkState[talkUser] = 0


elseif(msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 and getPlayerStorageValue(cid,1000) == -1 and getPlayerItemCount(cid, BootIfHasterID) >= 1 then
selfSay('Aqui esta!', cid)


doSendMagicEffect(getPlayerPosition(cid), 13)
setPlayerStorageValue(cid, 1000, 1)
doPlayerAddItem(cid,BootOfHasterID, -1)
doPlayerAddItem(cid,SoftBootsID, 1)
talkState[talkUser] = 0


elseif(msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 and getPlayerStorageValue(cid,1000) == -1 and getPlayerItemCount(cid, BootIfHasterID) < 1 then
selfSay('Voce nao possui o item.', cid)
talkState[talkUser] = 0


elseif(msgcontains(msg, 'trocar') or msgcontains(msg, 'changer')) and getPlayerStorageValue(cid,1000) == 1 then -- Configura Storage Aqui
selfSay('Voce so pode realiazar esta troca apenas uma vez.', cid)


end 
return TRUE
end


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

doSendMagicEffect(getPlayerPosition(cid), 13)

setPlayerStorageValue(cid, 1000, 1)

doPlayerAddItem(cid,BootOfHasterID, -1) <<tem q subistituir esse por >>doPlayerRemoveItem(cid, 2195, -1) 

doPlayerAddItem(cid,SoftBootsID, 1)

talkState[talkUser] = 0

Vc Colocou Add Duas Vezes

Obrigado Pelo Script

Obrigado Msm ^^

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Você cometeu double post 2 vezes e eu deixei passar sem nenhum problema por você ser um membro novo e agora você deu UP no tópico antes de 24 horas,se você pegasse 10 minutos do seu tempo para ler as regras você iria ver que oque está fazendo é proibído.

Regras do fórum : http://www.tibiaking.com/forum/forum/23-regras-do-forum/

Me Desculpe ...

Faz Parte Ja Q Sou Novo Menbro

Lendo As Regras.....

Esse Forum E 10!!

 

Editado por wesleyyy (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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo