Ir para conteúdo
  • 0

Ajuda em npc que te da certo item


Makakovisk

Pergunta

Fala galera do X-Tibia, esse é o meu primeiro post aqui, mas vamos direto ao assunto.

 

Eu gostaria de fazer no meu servidor um npc normal (npc de food) mas que ao jogador falar por exemplo. Stamina, ele te da um stamina refil. O npc é um npc normal de food e tals, mas só que quando o jogador fala a certa palavra, ele te da um item por outro.

 

Então como no exemplo da stamina, a conversa seria assim:

 

Hi

 

Ola jogador, eu vendo bla bla bla bla....

 

Stamina

 

Voce gostaria de receber uma stamina refil por uma scarab coin?

 

Yes

 

Aqui está sua Stamina. Foi um prazer negociar com voce.

 

Algo do tipo.... Os itens foram apenas exemplos.

 

Eu uso tfs 0.3.6

Se alguem puder me ajudar eu agradeço.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

tenta ai

Script:


local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

local forge = {}


local recipes = {
        [2158] = { -- ID DA STAMINA POTION
                {2160, 1} -- ID E QUANTIDADE DOS ITENS QUE ELE VAI COBRAR
        }
}

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 onGreetCallback(cid)
        talkState[cid] = 0
        forge[cid] = {match = nil, recipe = nil}
        return true
end

function onCreatureSayCallback(cid, class, msg)
        if(not npcHandler:isFocused(cid)) then
                return false
        end

        local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

        if talkState[talkUser] == 0 then
                for itemid, items in pairs(recipes) do
                        if msgcontains(msg, getItemNameById(itemid)) then
                                forge[talkUser] = {match = itemid, recipe = items}
                                break
                        end
                end

                if forge[talkUser].match ~= nil then
                        local str, sep = "Boa escolha, Eu precisarei de"
                        local n = 1
                        for _, item in ipairs(forge[talkUser].recipe) do
                                sep = (n == 1) and " " or (n == #forge[talkUser].recipe and " e " or ", ")
                                str = str .. sep .. (item[2] or 1) .." ".. getItemNameById(item[1])
                                n = n + 1
                        end
                        str = str ..". Concorda?"
                        npcHandler:say(str, cid)
                        talkState[talkUser] = 1
                else
                        npcHandler:say("Desculpa, voce nao tem os itens.", cid)
                end
        elseif talkState[talkUser] == 1 then
                if msgcontains(msg, "yes") or msgcontains(msg, "sim") then
                        local ret = {}
                        for _, item in ipairs(forge[talkUser].recipe) do
                                local g = getPlayerItemById(cid, true, item[1])
                                if g.uid > 0 and math.max(1, g.type) >= item[2] then
                                        table.insert(ret, {g.uid, item[2]})
                                else
                                        ret = {}
                                        break
                                end
                        end

                        if #ret > 0 then
                                for _, item in ipairs(ret) do
                                        doRemoveItem(item[1], item[2])
                                end
                                doPlayerAddItemEx(cid, doCreateItemEx(forge[talkUser].match, 1))
                                npcHandler:say("Foi um prazer negociar com voce, aqui esta a sua ".. getItemNameById(forge[talkUser].match) ..".", cid)
                        else
                                npcHandler:say("Desculpa, voce nao tem os itens para troca.", cid)
                                talkState[talkUser] = 0
                                forge[talkUser] = {match = nil, recipe = nil}
                        end
                elseif msgcontains(msg, "no") or msgcontains(msg, "nao") then
                        npcHandler:say("Tudo bem, voce precisa de mais alguma coisa?", cid)
                        talkState[talkUser] = 0
                        forge[talkUser] = {match = nil, recipe = nil}
                end
        end
        return true
end

local greet, sep = "Ola, |PLAYERNAME|. eu vendo bla bla bla bla...."
local n = 1
for item, recipe in pairs(recipes) do
        sep = (n == 1) and " " or (n == #recipes and " e " or ", ")
        greet = greet .. sep .. "{".. getItemNameById(item) .."}"
        n = n + 1
end

npcHandler:setMessage(MESSAGE_GREET, greet)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, onCreatureSayCallback)
npcHandler:setCallback(CALLBACK_GREET, onGreetCallback)
npcHandler:addModule(FocusModule:new())

Npc:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="NPC Stamina" script="data/npc/scripts/Stamina_Npc.lua" walkinterval="2000" floorchange="0"> 
        <health now="100" max="100"/>
        <look type="60" head="38" body="79" legs="107" feet="114"/>
        <parameters>
        <parameter key="message_greet" value="Hello, |PLAYERNAME|."/>
  </parameters>
</npc>

Link para o comentário
Compartilhar em outros sites

  • 0
  • Diretor

Tem esse também que é super simples, mais acho que eu usaria o do Janmix.

 

stamina.lua:

-- Créditos para Yan Liima - Night criador da script.
local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
  	if focus == cid then
          selfSay('adeus.')
          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('Olá ' .. getCreatureName(cid) .. ' deseja comprar 1 stamina potion?')
			focus = cid
			talk_start = os.clock()

  	elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
  		selfSay('Desculpe, ' .. getCreatureName(cid) .. '! Eu falo com você em um minuto.')

  	elseif focus == cid then
		talk_start = os.clock()
	
		if msgcontains(msg, 'yes') then
		if doPlayerRemoveItem(cid,2160,100) then
		doPlayerAddItem(cid, 2469,1)
				else
					selfSay('Desculpe, voce nao tem dinheiro suficiente.')
				end	
		
		elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then
			selfSay('adeus, ' .. getCreatureName(cid) .. '!')
			focus = 0
			talk_start = 0
		end
	end
end
			
function onThink()
	doNpcSetCreatureFocus(focus)
  	if (os.clock() - talk_start) > 45 then
  		if focus > 0 then
  			selfSay('Próximo por Favor...')
  		end
  			focus = 0
  	end
 	if focus ~= 0 then
 		if getDistanceToCreature(focus) > 5 then
 			selfSay('adeus.')
 			focus = 0
 		end
 	end
end

npcstamina.xml:

<npc name="Stamina" script="data/npc/scripts/stamina.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1">
	<health now="150" max="150"/>
	<look type="309" head="132" body="79" legs="97" feet="132" corpse="2212"/>

</npc>
Editado por nedroesdoksdja
Link para o comentário
Compartilhar em outros sites

  • 0

 

Tem esse também que é super simples, mais acho que eu usaria o do Janmix.

 

stamina.lua:

-- Créditos para Yan Liima - Night criador da script.
local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
  	if focus == cid then
          selfSay('adeus.')
          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('Olá ' .. getCreatureName(cid) .. ' deseja comprar 1 stamina potion?')
			focus = cid
			talk_start = os.clock()

  	elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
  		selfSay('Desculpe, ' .. getCreatureName(cid) .. '! Eu falo com você em um minuto.')

  	elseif focus == cid then
		talk_start = os.clock()
	
		if msgcontains(msg, 'yes') then
		if doPlayerRemoveItem(cid,2160,100) then
		doPlayerAddItem(cid, 2469,1)
				else
					selfSay('Desculpe, voce nao tem dinheiro suficiente.')
				end	
		
		elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then
			selfSay('adeus, ' .. getCreatureName(cid) .. '!')
			focus = 0
			talk_start = 0
		end
	end
end
			
function onThink()
	doNpcSetCreatureFocus(focus)
  	if (os.clock() - talk_start) > 45 then
  		if focus > 0 then
  			selfSay('Próximo por Favor...')
  		end
  			focus = 0
  	end
 	if focus ~= 0 then
 		if getDistanceToCreature(focus) > 5 then
 			selfSay('adeus.')
 			focus = 0
 		end
 	end
end

npcstamina.xml:

<npc name="Stamina" script="data/npc/scripts/stamina.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1">
	<health now="150" max="150"/>
	<look type="309" head="132" body="79" legs="97" feet="132" corpse="2212"/>

</npc>

 

Ta mas o Yan, eu queria um npc normal de food. Tipo, um npc que voce fala: Hi trade, e ele te vende food.

 

Mas que tenha uma funcao que quando um jogador falar stamina. Ele fala, voce gostaria de uma stamina por uma steel boots?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...