Postado Março 5, 2020 5 anos 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 Março 6, 2020 5 anos por Steeven (veja o histórico de edições)
Postado Março 6, 2020 5 anos 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 Março 6, 2020 5 anos por Joaovettor (veja o histórico de edições)
Postado Março 6, 2020 5 anos Autor 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! Editado Março 6, 2020 5 anos por Steeven (veja o histórico de edições)
Postado Março 6, 2020 5 anos 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! 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)
Postado Março 6, 2020 5 anos Autor 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.
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.