Ir para conteúdo
  • Cadastre-se

(Resolvido)[Resolvido] NPC que Troca Itens por Quantidade


Ir para solução Resolvido por Mathias Kenfi,

Posts Recomendados

Servidor: The OTX Server Version 2.52

 

 Eu queria uma ajudinha aqui com um NPC, pois não sei como criá-lo.

 É o seguinte; o NPC é de troca, mas preciso que ele troque itens de acordo com a quantidade estipulada pelo player. Exemplo:

 

PLAYER: hi

NPC: Olá PLAYER! Minha função aqui é trocar barras de bronze, prata, ouro ou mithril em suas respectivas moedas. Que tipo de troca deseja fazer?

PLAYER: bronze (ou poderia ser prata, ouro ou mithril).

NPC: Muito bem, cada barra corresponde a 5 moedas, quantas barras de bronze você quer trocar?

PLAYER: 10

NPC: Aqui está suas 50 moedas de bronze. Volte sempre!

 

50 moedas porque cara barra vale 5 moedas, sendo que ali a troca foi 10, logo 10x5=50.

 

 Bem é isso, agradeço de coração quem puder me ajudar, é algo muito importante para o meu servidor.

@Vodkart?

 

Editado por Steeven (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução
2 horas atrás, Steeven disse:

Servidor: The OTX Server Version 2.52

 

 Eu queria uma ajudinha aqui com um NPC, pois não sei como criá-lo.

 É o seguinte; o NPC é de troca, mas preciso que ele troque itens de acordo com a quantidade estipulada pelo player. Exemplo:

 

PLAYER: hi

NPC: Olá PLAYER! Minha função aqui é trocar barras de bronze, prata, ouro ou mithril em suas respectivas moedas. Que tipo de troca deseja fazer?

PLAYER: bronze (ou poderia ser prata, ouro ou mithril).

NPC: Muito bem, cada barra corresponde a 5 moedas, quantas barras de bronze você quer trocar?

PLAYER: 10

NPC: Aqui está suas 50 moedas de bronze. Volte sempre!

 

50 moedas porque cara barra vale 5 moedas, sendo que ali a troca foi 10, logo 10x5=50.

 

 Bem é isso, agradeço de coração quem puder me ajudar, é algo muito importante para o meu servidor.

@Vodkart?

 

 

Crie um arquivo chamado golden.lua em data/npc/scripts e dentro coloque:

Spoiler


-- Script BY: ~Mathias Kenfi
-- Contato: [email protected] / 034991286815

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local npcTopic, xmsg, msgcount = {}, {}, {}
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
 
local items = {
	["bronze"] = {id = 2160, count = 1, reward = 2159}, -- id é a moeda de compra, count é o valor da barra, reward é o id da barra
	["prata"] = {id = 2160, count = 2, reward = 2159},
	["ouro"] = {id = 2160, count = 3, reward = 2159},
	["mithril"] = {id = 2160, count = 4, reward = 2159}
}

function creatureSayCallback(cid, type, msg)
local talkUser, msg = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid, string.lower(msg)
	if(not npcHandler:isFocused(cid)) then
		return false
	end

	if items[msg] then
		npcTopic[talkUser] = 1
		xmsg[talkUser] = msg
		npcHandler:say('Muito bem, cada barra corresponde a  '..items[msg].count..' '..getItemNameById(items[msg].id)..', quantas barras de '..getItemNameById(items[msg].reward)..' você quer?' , cid)
	elseif tonumber(msg) and npcTopic[talkUser] == 1 then
		msgcount[talkUser] = msg
		npcTopic[talkUser] = 2
		npcHandler:say('Você quer comprar '..msg..' barras de '..xmsg[talkUser]..'?' , cid)
	elseif not tonumber(msg) and npcTopic[talkUser] == 1 then
		npcHandler:say('Você precisa me dizer uma quantidade válida' , cid)
	elseif msgcontains(msg, "yes") and npcTopic[talkUser] == 2 then
		local x = items[xmsg[talkUser]]
		local price = (x.count * msgcount[talkUser])
		if getPlayerItemCount(cid, x.id) >= price then
			doPlayerAddItem(cid, x.reward, msgcount[talkUser])
			doPlayerRemoveItem(cid, x.id, price)
			npcHandler:say('Aqui está '..msgcount[talkUser]..' barras de '..getItemNameById(x.reward)..'. Volte sempre!' , cid)
		else
			npcHandler:say('Você não tem '..price..' '..getItemNameById(x.id)..'' , cid)
		end
		npcTopic[talkUser] = 0
	elseif msgcontains(msg, "no") and npcTopic[talkUser] == 2 then
		npcHandler:say('Então tá, Bye bye!' , cid)
		npcTopic[talkUser] = 0
	end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Agora crie um arquivo chamado golden.xml em data/npc e dentro coloque:

Spoiler

<npc name="Golden" script="data/npc/scripts/golden.lua" walkinterval="5000" floorchange="0">
    <health now="100" max="100"/>
    <look type="69" head="96" body="99" legs="99" feet="115" addons="2"/>
    <parameters>
		<parameter key="message_greet" value="Ola |PLAYERNAME|. Minha função aqui é trocar barras de {bronze}, {prata}, {ouro} ou {mithril} em suas respectivas moedas. Que tipo de troca deseja fazer?." />
    </parameters>
</npc>

 

 

Editado por Joaovettor (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
43 minutos atrás, Joaovettor disse:

Crie um arquivo chamado golden.lua em data/npc/scripts e dentro coloque:

  Mostrar conteúdo oculto



-- Script BY: ~Mathias Kenfi
-- Contato: [email protected] / 034991286815

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local npcTopic, xmsg, msgcount = {}, {}, {}
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
 
local items = {
	["bronze"] = {id = 2160, count = 1, reward = 2159}, -- id é a moeda de compra, count é o valor da barra, reward é o id da barra
	["prata"] = {id = 2160, count = 2, reward = 2159},
	["ouro"] = {id = 2160, count = 3, reward = 2159},
	["mithril"] = {id = 2160, count = 4, reward = 2159}
}

function creatureSayCallback(cid, type, msg)
local talkUser, msg = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid, string.lower(msg)
	if(not npcHandler:isFocused(cid)) then
		return false
	end

	if items[msg] then
		npcTopic[talkUser] = 1
		xmsg[talkUser] = msg
		npcHandler:say('Muito bem, cada barra corresponde a  '..items[msg].count..' '..getItemNameById(items[msg].id)..', quantas barras de '..getItemNameById(items[msg].reward)..' você quer?' , cid)
	elseif tonumber(msg) and npcTopic[talkUser] == 1 then
		msgcount[talkUser] = msg
		npcTopic[talkUser] = 2
		npcHandler:say('Você quer comprar '..msg..' barras de '..xmsg[talkUser]..'?' , cid)
	elseif not tonumber(msg) and npcTopic[talkUser] == 1 then
		npcHandler:say('Você precisa me dizer uma quantidade válida' , cid)
	elseif msgcontains(msg, "yes") and npcTopic[talkUser] == 2 then
		local x = items[xmsg[talkUser]]
		local price = (x.count * msgcount[talkUser])
		if getPlayerItemCount(cid, x.id) >= price then
			doPlayerAddItem(cid, x.reward, msgcount[talkUser])
			doPlayerRemoveItem(cid, x.id, price)
			npcHandler:say('Aqui está '..msgcount[talkUser]..' barras de '..getItemNameById(x.reward)..'. Volte sempre!' , cid)
		else
			npcHandler:say('Você não tem '..price..' '..getItemNameById(x.id)..'' , cid)
		end
		npcTopic[talkUser] = 0
	elseif msgcontains(msg, "no") and npcTopic[talkUser] == 2 then
		npcHandler:say('Então tá, Bye bye!' , cid)
		npcTopic[talkUser] = 0
	end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Agora crie um arquivo chamado golden.xml em data/npc e dentro coloque:

  Mostrar conteúdo oculto


<npc name="Golden" script="data/npc/scripts/golden.lua" walkinterval="5000" floorchange="0">
    <health now="100" max="100"/>
    <look type="69" head="96" body="99" legs="99" feet="115" addons="2"/>
    <parameters>
		<parameter key="message_greet" value="Ola |PLAYERNAME|. Minha função aqui é trocar barras de {bronze}, {prata}, {ouro} ou {mithril} em suas respectivas moedas. Que tipo de troca deseja fazer?." />
    </parameters>
</npc>

 

 

 

 Muito obrigado mesmo, funcionou perfeitamente, eu só precisei mudar esta linha:
doPlayerAddItem(cid, x.reward, msgcount[talkUser]) para >>> doPlayerAddItem(cid, x.reward, msgcount[talkUser]*5)

 Porque quando o player fala a quantidade, ele deve receber 5 moedas em troca das barras! Tudo rodando sem erros, muito obrigado mesmo! <3

Editado por Steeven (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
18 minutos atrás, Steeven disse:

 Muito obrigado mesmo, funcionou perfeitamente, eu só precisei mudar esta linha:
doPlayerAddItem(cid, x.reward, msgcount[talkUser]) para >>> doPlayerAddItem(cid, x.reward, msgcount[talkUser]*5)

 Porque quando o player fala a quantidade, ele deve receber 5 moedas em troca das barras! Tudo rodando sem erros, muito obrigado mesmo! <3

 

Não entendi a modificação, afinal o NPC vai dar a quantidade de barras que o player pedir a troco de x moedas, sendo:

x = Quantidade desejada 

y = Preço da barra (especificado na tabela)

Então ele vai ter que ter x*y de moedas para receber x barras. Como você colocou msgcount[talkUser]*5, ele vai receber x*5, ou seja, a quantidade especificada multiplicado por 5

 

Se você quer que ele recebe 5 moedas de volta, é só colocar embaixo 

doPlayerAddItem(cid, x.id, 5)

Link para o post
Compartilhar em outros sites
4 minutos atrás, Joaovettor disse:

Não entendi a modificação, afinal o NPC vai dar a quantidade de barras que o player pedir a troco de x moedas, sendo:

x = Quantidade desejada 

y = Preço da barra (especificado na tabela)

Então ele vai ter que ter x*y de moedas para receber x barras. Como você colocou msgcount[talkUser]*5, ele vai receber x*5, ou seja, a quantidade especificada multiplicado por 5

 

Se você quer que ele recebe 5 moedas de volta, é só colocar embaixo 

doPlayerAddItem(cid, x.id, 5)

 

 Sim, os dois caminhos estão corretos, é que eu quero que o Player dê as barras em troca de moedas, cada barra por 5 moedas. Então troquei os ids do item que o player dá pelo o ID das barras e ele recebe as moedas. Isso. :)

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