Ir para conteúdo

Npc Que Troca Itens


Conde Sapo

Posts Recomendados

Exclusivo para XTibia

favor não postar em outro forum

 

Um usuário me pediu um NPC que troca itens.......

 

Olá Conde Sapo. gostaria de pedir ajuda a você, por favor, visite meu tópico de dúvidas...

http://www.xtibia.com/forum/index.php?showtopic=67166

 

Obrigado!!!

 

[]'s, Taxijab.

Parte do PM

 

 

data\npc\Taxijab.xml

<?xml version="1.0"?>

<npc name="Taxijab" script="data/npc/scripts/Cheese.lua" access="3" lookdir="1" autowalk="200" speed="200">
<health now="1" max="1"/>
<look type="120" head="38" body="79" legs="107" feet="114"/>
</npc>

 

 

data\npc\scripts\Cheese.lua

-- NPC de troca - By Conde Sapo
local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false
local addon_state = 0

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('Olá ' .. getCreatureName(cid) .. '... Eu daria tudo por alguns queijos... Você tem 5 sobrando aí? Eu posso te dar meu escudo em troca!')
	focus = cid
	talk_start = os.clock()

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

elseif focus == cid then
	talk_start = os.clock()
	if msgcontains(msg, 'queijo') or msgcontains(msg, 'escudo') then
		if doPlayerRemoveItem(cid,2696,5) == 0 then
			selfSay('Eu disse 5 QUEIJOS!')
			addon_state = 0
		else 
			selfSay('Obrigado, muito mesmo! Tome, isto pode ser útil para você!')
			doPlayerAddItem(cid, 2512, 1)
			talk_start = 0
		end 

	elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then
		selfSay('Good bye, ' .. getCreatureName(cid) .. '! Come back soon..')
		focus = 0
		talk_start = 0
	end
end
end

function onCreatureChangeOutfit(creature)
end

function onThink()
doNpcSetCreatureFocus(focus)
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

É um NPC estremamente simples mas útil pros servers que tem ROOKGARD

O Player entra com 5 queijos e sai com o Wooden Shield

 

Os usuários mais criatvos podem transformar este simples NPC em um NPC que troca coisas mais interessantes.

o único limite é a criatividade.

 

Boas Criações.

:XTibia_smile:

Editado por Conde Sapo
Link para o comentário
Compartilhar em outros sites

Parece ser bom, vou colocar no meu server. ^^

Mas tenho uma pergunta, ele só troca 1 item por outro, exemplo:

Tenho uma MPA, ele troca somente por outro item, não da pra trocar 2 itens por 1 ?

 

@Taxijab

Eu sei que da para trocar por dois itens que sejam do mesmo ID, eu queria saber se daria para trocar por dois itens de ID diferente.

 

//GM Matthor

Editado por GM Matthor
Link para o comentário
Compartilhar em outros sites

Muito, muito obrigado, conde! É muito bom saber que ainda existem pessoas assim!

 

E esse NPC não é só de grande ajuda para mim, mas para muitos outros OT's sérios também!

 

@GM Mathor

Se estiver enganado, alguém me corrija, mas dá sim, localize a linha:

if doPlayerRemoveItem(cid,2696,5) == 0 then

 

Troque pelo item que o player deve ter

Troque pela quantidade de itens que o player tem

 

E também:

doPlayerAddItem(cid, 2512, 1)

 

Troque pelo item que o player recebe

Troque pela quantidade de itens que o player recebe

Link para o comentário
Compartilhar em outros sites

Aew mais um ótimo tutor...

de parabens mesmo

cara... num faz mto tempo q me integrei a este FORUM mais os trabalhos dos quais tem maior destaque aki, penso q são os seus

Alguem aew me corrige se eu estiver errado

sinceramente muito bom

e aprovadissimo

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...
muito bom, mas meu ot não tem

rookgard,

Eu disse que o único limite é a criatividade....

Veja meu amiguinho ae de baixo !!!

 

Vou fazer um NPC de Soft Boots e Worn~ já que o único limite é a criatividade.
Parabundas....

Você sabe ler as entrelinhas....

 

 

[ ]s

:smile_positivo:

Link para o comentário
Compartilhar em outros sites

Thunder Sundex,

 

Neste caso repare nesta função:

 

if doPlayerRemoveItem(cid,2696,5) == 0 then

 

Troque o 2696 pelo id do item que tem que dar 2 deles.

 

Depois o 5 troque por 2 que no caso seria a quantidade de itens que precisaria ter para trocar!

 

Espero ter ajudado até +

Link para o comentário
Compartilhar em outros sites

Como eu faço pra fazer tipo..

troco 2 items por 1 item?

 

 

o comando doPlayerRemoveItem é pratico pra conferir 1 item

pra nais de 1 item é aconselhavel doPlayerItemCount e só depois remove-los

 

Quantidade1 = getPlayerItemCount(cid,ID_1)
Quantidade2 = getPlayerItemCount(cid,ID_2)
Quantidade3 = getPlayerItemCount(cid,ID_3)
QuantidadeETC = getPlayerItemCount(cid,ID_ETC)

if Quantidade1 >= QTD1 and Quantidade2 >= QTD2 and Quantidade3 >= QTD3 and QuantidadeETC >= QTD_ETC then
doPlayerSendTextMessage(cid,22,"Você ganhou o item bla-bla-bla!.")
doPlayerAddItem(cid,ID_DO_PRESENTE,QTD)
doPlayerRemoveItem(cid, ID_1, QTD1)
doPlayerRemoveItem(cid, ID_2, QTD2)
doPlayerRemoveItem(cid, ID_3, QTD3)
doPlayerRemoveItem(cid, ID_ETC, QTD_ETC)
end

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...
×
×
  • Criar Novo...