Jump to content

Recommended Posts

Olá pessoal eu andei tentando criar um npc que troca dois itens por 1.

Exemplo: Uma CHAIN ARMOR + GOLDEN ARMOR + 10k por um outro item... só que quando vou falar com ele , basta ter só uma chain armor ou só uma golden armor, ou só 10k que ele ja troca..nao precisa ter os 3, e eu gostaria que ele trocasse os 3 itens por 1. Vou postar foto do meu script.

É um OTSERVER 7.6 ..OTyourotz, bem antigo.

Se alguem souber me ajudar, por favor, ficarei muito grato!

Abraço!

 

Script

focus = 0
talk_start = 0
target = 0
following = false
attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
      if focus == cid then
          selfSay('Good bye then.')
          focus = 0
          talk_start = 0
      end
end


function onCreatureTurn(creature)

end


function msgcontains(txt, str)
      return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end


function onCreatureSay(cid, type, msg)
      msg = string.lower(msg)

      if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
          selfSay('Hi ' .. creatureGetName(cid) .. '... I can forge A Forge Armor for you to bring me a Chain Armor and a Golden Armor , will charge a fee of 10000GPS...')
          focus = cid
          talk_start = os.clock()

      elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
          selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')

    elseif focus == cid then
        talk_start = os.clock()

if msgcontains(msg, 'forge armor') then    
    itemstatus = doPlayerRemoveItem(cid,2464) -- 2464 golden armor    
    itemstatus = doPlayerRemoveItem(cid,2466) -- 2466 chain armor
    itemstatus = doPlayerRemoveItem(cid,2160) -- 2160 crystal coin
    needmoney = 0 -- qntidade que o player precisa pagar (em GPs)    
    money = pay(cid,needmoney)    
    if itemstatus == 0 and money == true then        
        selfSay('Hmm, this is incredible! Take this Forge Armor!')        
        buy(cid,2508,1,0) -- 2472 é o item que ele irá ganhar 
                -- note que o preço do item é 0, ou seja,                
                -- o player irá pagar 0 GPs pelo item;    
    else        
        selfSay('you do not have the necessary items...')    
end

if msgcontains(msg, 'helmet of the ancients') then    
    itemstatus = doPlayerRemoveItem(cid,2147) -- 2147 é o item que o player vai ter que dar pro npc    
    itemstatus = doPlayerRemoveItem(cid,2342) -- 2342 é o item que o player vai ter que dar pro npc
    needmoney = 0 -- qntidade que o player precisa pagar (em GPs)    
    money = pay(cid,needmoney)    
    if itemstatus == 0 and money == true then        
        selfSay('Hmm, this is incredible! Take this Full Helmet of the Ancients!')        
        buy(cid,2343,1,0) -- 2343 é o item que ele irá ganhar 
                -- note que o preço do item é 0, ou seja,                
                -- o player irá pagar 0 GPs pelo item;    
    else        
        selfSay('It is missing something...')    
    end
end
        elseif string.find(msg, '(%a*)bye(%a*)') and getDistanceToCreature(cid) < 4 then
            selfSay('Good bye, ' .. creatureGetName(cid) .. '!')
            focus = 0
            talk_start = 0
        end
    end
end


function onCreatureChangeOutfit(creature)

end


function onThink()
      if (os.clock() - talk_start) > 30 then
          if focus > 0 then
              selfSay('Next Please...')
          end
              focus = 0
      end
     if focus ~= 0 then
         if getDistanceToCreature(focus) > 5 then
             selfSay('Good bye then.')
             focus = 0
         end
     end
end
 

 

Link to post
Share on other sites
Spoiler

 

focus = 0
talk_start = 0
target = 0
following = false
attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
      if focus == cid then
          selfSay('Good bye then.')
          focus = 0
          talk_start = 0
      end
end


function onCreatureTurn(creature)

end


function msgcontains(txt, str)
      return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end


function onCreatureSay(cid, type, msg)
      msg = string.lower(msg)

      if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
          selfSay('Hi ' .. creatureGetName(cid) .. '... I can forge A Forge Armor for you to bring me a Chain Armor and a Golden Armor , will charge a fee of 10000GPS...')
          focus = cid
          talk_start = os.clock()

      elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
          selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')

    elseif focus == cid then
        talk_start = os.clock()

if msgcontains(msg, 'forge armor') then    
    itemstatusum = doPlayerRemoveItem(cid,2464) -- 2464 golden armor    
    itemstatusdois = doPlayerRemoveItem(cid,2466) -- 2466 chain armor
    itemstatustres = doPlayerRemoveItem(cid,2160) -- 2160 crystal coin
    needmoney = 0 -- qntidade que o player precisa pagar (em GPs)    
    money = pay(cid,needmoney)    
    if itemstatusum == 0 and itemstatusdois == 0 and itemstatustres == 0 and money == true then        
        selfSay('Hmm, this is incredible! Take this Forge Armor!')        
        buy(cid,2508,1,0) -- 2472 é o item que ele irá ganhar 
                -- note que o preço do item é 0, ou seja,                
                -- o player irá pagar 0 GPs pelo item;    
    else        
        selfSay('you do not have the necessary items...')    
end

if msgcontains(msg, 'helmet of the ancients') then    
    itemstatusum = doPlayerRemoveItem(cid,2147) -- 2147 é o item que o player vai ter que dar pro npc    
    itemstatusdois = doPlayerRemoveItem(cid,2342) -- 2342 é o item que o player vai ter que dar pro npc
    needmoney = 0 -- qntidade que o player precisa pagar (em GPs)    
    money = pay(cid,needmoney)    
    if itemstatusum == 0 and itemstatusdois == 0 and money == true then        
        selfSay('Hmm, this is incredible! Take this Full Helmet of the Ancients!')        
        buy(cid,2343,1,0) -- 2343 é o item que ele irá ganhar 
                -- note que o preço do item é 0, ou seja,                
                -- o player irá pagar 0 GPs pelo item;    
    else        
        selfSay('It is missing something...')    
    end
end
        elseif string.find(msg, '(%a*)bye(%a*)') and getDistanceToCreature(cid) < 4 then
            selfSay('Good bye, ' .. creatureGetName(cid) .. '!')
            focus = 0
            talk_start = 0
        end
    end
end


function onCreatureChangeOutfit(creature)

end


function onThink()
      if (os.clock() - talk_start) > 30 then
          if focus > 0 then
              selfSay('Next Please...')
          end
              focus = 0
      end
     if focus ~= 0 then
         if getDistanceToCreature(focus) > 5 then
             selfSay('Good bye then.')
             focus = 0
         end
     end
end

 

Tenta assim

Link to post
Share on other sites

ai irmao, tentei, mas o que acontece , se eu tenho por exemplo UM item dos que precisa pra ''fazer'' a armadura, ele simplismente some, mas se eu tenho todos os itens ele faz a armadura.

 

Link to post
Share on other sites
3 horas atrás, fedegrodas21 disse:

ai irmao, tentei, mas o que acontece , se eu tenho por exemplo UM item dos que precisa pra ''fazer'' a armadura, ele simplismente some, mas se eu tenho todos os itens ele faz a armadura.

 

 

Esquece esse script, tenta esse:

 

data/npc/scripts/blacksmith.lua

local tab = {
	item = {2349, 1}, -- {ID do item, Quantidade} mude para os itens que voce quer, pois esses sao itens de teste que usei
	item2 = {2346, 1},
	item3 = {2156, 1},
	recompensa = {5791, 1}, -- Armadura que vai ganhar se tiver todos os itens
	price = 10 -- quantidade em crystal coins
	
}

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
	if (msgcontains(msg, 'forge armor')) then
		talkState[talkUser] = 1
		selfSay('Lembre-se.. Voce precisa de '..tab.item[2]..' '..getItemNameById(tab.item[1])..', '..tab.item2[2]..' '..getItemNameById(tab.item2[1])..', '..tab.item3[2]..' '..getItemNameById(tab.item3[1])..' e 10k. Ja possui todos?', cid)
	elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
		if (getPlayerItemCount(cid, tab.item[1]) >= tab.item[2] and
			getPlayerItemCount(cid, tab.item2[1]) >= tab.item2[2] and 
			getPlayerItemCount(cid, tab.item3[1]) >= tab.item3[2] and
			doPlayerRemoveMoney(cid, tab.price * 1000)) then
			doPlayerRemoveItem(cid, tab.item[1], tab.item[2])
			doPlayerRemoveItem(cid, tab.item2[1], tab.item2[2])
			doPlayerRemoveItem(cid, tab.item3[1], tab.item3[2])
			doPlayerAddItem(cid,tab.recompensa[1],tab.recompensa[2])
			doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
			selfSay('Veja so, voce tem todos os itens, parabens, aproveite sua nova armadura!.', cid)
		else
			talkState[talkUser] = 0
			selfSay('Perdao, mas voce nao tem os itens necessarios ainda, volte quando estiver com todos.', cid)
		end
	elseif (msgcontains(msg, 'no') and talkState[talkUser] == 1) then
		talkState[talkUser] = 0
		selfSay('Pois bem, pegue os itens e retorne.', cid)
	end
	
	return true
end

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

data/npc/blacksmith.xml

<npc name="Blacksmith" script="data/npc/scripts/blacksmith.lua" access="5" lookdir="1">
<health now="1000" max="1000"/>
<look type="54" head="45" body="67" legs="79" feet="10" addons="1"/>
	<parameters>
		<parameter key="message_greet" value="Ola, |PLAYERNAME|. Se voce tiver os itens certos diga {forge armor} e ganhe uma armadura nova." />
	</parameters>
</npc>

 

Script de @Wise , adaptei para sua necessidade.

Link to post
Share on other sites
Spoiler

focus = 0
talk_start = 0
target = 0
following = false
attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
      if focus == cid then
          selfSay('Good bye then.')
          focus = 0
          talk_start = 0
      end
end


function onCreatureTurn(creature)

end


function msgcontains(txt, str)
      return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end


function onCreatureSay(cid, type, msg)
      msg = string.lower(msg)

      if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
          selfSay('Hi ' .. creatureGetName(cid) .. '... I can forge A Forge Armor for you to bring me a Chain Armor and a Golden Armor , will charge a fee of 10000GPS...')
          focus = cid
          talk_start = os.clock()

      elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
          selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')

    elseif focus == cid then
        talk_start = os.clock()

if msgcontains(msg, 'forge armor') then    
    itemstatusum = doPlayerRemoveItem(cid,2464) -- 2464 golden armor    
    itemstatusdois = doPlayerRemoveItem(cid,2466) -- 2466 chain armor
    itemstatustres = doPlayerRemoveItem(cid,2160) -- 2160 crystal coin
    needmoney = 0 -- qntidade que o player precisa pagar (em GPs)    
    money = pay(cid,needmoney)    
    if itemstatusum == 0 and itemstatusdois == 0 and itemstatustres == 0 and money == true then        
        selfSay('Hmm, this is incredible! Take this Forge Armor!')        
        buy(cid,2508,1,0) -- 2472 é o item que ele irá ganhar 
        return true        

                -- note que o preço do item é 0, ou seja,                
                -- o player irá pagar 0 GPs pelo item;    
    else        
        selfSay('you do not have the necessary items...')

        return false    
end

if msgcontains(msg, 'helmet of the ancients') then    
    itemstatusum = doPlayerRemoveItem(cid,2147) -- 2147 é o item que o player vai ter que dar pro npc    
    itemstatusdois = doPlayerRemoveItem(cid,2342) -- 2342 é o item que o player vai ter que dar pro npc
    needmoney = 0 -- qntidade que o player precisa pagar (em GPs)    
    money = pay(cid,needmoney)    
    if itemstatusum == 0 and itemstatusdois == 0 and money == true then        
        selfSay('Hmm, this is incredible! Take this Full Helmet of the Ancients!')        
        buy(cid,2343,1,0) -- 2343 é o item que ele irá ganhar 
        return true        

                -- note que o preço do item é 0, ou seja,                
                -- o player irá pagar 0 GPs pelo item;    

     else        
        selfSay('It is missing something...')  

        return false 
    end
end
        elseif string.find(msg, '(%a*)bye(%a*)') and getDistanceToCreature(cid) < 4 then
            selfSay('Good bye, ' .. creatureGetName(cid) .. '!')
            focus = 0
            talk_start = 0
        end
    end
end


function onCreatureChangeOutfit(creature)

end


function onThink()
      if (os.clock() - talk_start) > 30 then
          if focus > 0 then
              selfSay('Next Please...')
          end
              focus = 0
      end
     if focus ~= 0 then
         if getDistanceToCreature(focus) > 5 then
             selfSay('Good bye then.')
             focus = 0
         end
     end
end

Ai mano esse deve dar.

Edited by Crlixto (see edit history)
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


  • Similar Content

    • By Cat
      Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
       
      Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
      Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                     
      Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
      Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
       
      Downloads
      https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

      Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
       
    • By danilo belato
      Fala Galera To Com um problema aki 
       
      quero exporta umas sprites de um server para colocar em outro 
       
      eu clico na sprites ai aparece tds a forma delas do lado de la >>
       
      ai eu clico nela e ponho a opiçao de export mais quando salvo a sprite ela n abri 
       
      aparece isso quando tento vê-la 
       
      visualização não disponível ( no formatos png e bitmap)
       
      Agora no formato idc fala que o paint n pode ler 
       
      me ajudem ae...
    • By Vitor Bicaleto
      Galera to com o script do addon doll aqui, quando eu digito apenas "!addon" ele aparece assim: Digite novamente, algo está errado!"
      quando digito por exemplo: "!addon citizen" ele não funciona e não da nenhum erro
       
      mesma coisa acontece com o mount doll.. 
    • By Ayron5
      Substitui uma stone no serve, deu tudo certo fora  esse  erro ajudem  Valendo  Rep+  Grato  

      Erro: data/actions/scripts/boost.lua:557: table index is nil
       [Warning - Event::loadScript] Cannot load script (data/actions/scripts/boost.lua)

      Script:
    • By thelifeofpbion
      Vocês conhecem aqueles globalevents que ficam falando de x em x minutos tal mensagem...
      alguem pode fazer um que apareça essa mensagem em apenas um local? 

      tipo

      local fpos = {x = 888, y = 767, z = 7}    -- pos da area < /\
      local tpos = {x = 902, y = 781, z = 7}    -- pos da area > \/   

       ira aparecer a mensagem... se nao estiver dentro das cordenadas não aparece nada.
×
×
  • Create New...

Important Information

Confirmação de Termo