Ir para conteúdo
  • 0

NPC que vende itens por Scarab coins


jefersonzc

Pergunta

Galera, queria um npc que vendesse itens por Scarab coins ao invés de gps.

Mas não queria que o player falasse o nome do item para que o npc descontasse as coins. Queria que quando o player dissesse "trade", aparecesse aquela janelinha para selecionar o item e a quantidade desejada, tal como é feito com os npcs normais de compra e venda. A única diferença é que onde é mostrado o dinheiro do jogardor, seria mostrado a quantidade de Scarab coins que ele tem e quanto ele iria gastar. Só não sei se isso é possível he.gif

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

 

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
local shopWindow = {}
local moeda = 9020 -- ID da moeda
local t = {
[2195] = {price = 15}, -- [ITEM ID PARA VENDER] = {QNTO CUSTARÁ}
[2493] = {price = 25},
[2361] = {price = 30},
[8851] = {price = 20},
[8925] = {price = 30},
[2640] = {price = 50},
[2494] = {price = 100},
[9932] = {price = 50},
[2472] = {price = 70},
[8931] = {price = 100}
}
local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
if t[item] and not doPlayerRemoveItem(cid, moeda, t[item].price) then
selfSay("you dont have"..t[item].price.." "..getItemNameById(moeda), cid)
else
doPlayerAddItem(cid, item)
selfSay("Here your item!", cid)
end
return true
end
if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then
for var, ret in pairs(t) do
table.insert(shopWindow, {id = var, subType = 0, buy = ret.price, sell = 0, name = getItemNameById(var)})
end
openShopWindow(cid, shopWindow, onBuy, onSell)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Link para o comentário
Compartilhar em outros sites

  • 0

Primeiramente, obrigado pelas respostas.

 

omega blueheaven, creio que o sistema que você descreveu não seja muito interessante para o meu propósito. Até porque eu poderia colocar alguns "black boards" na parede atrás do nnpc que mostrasse os preços quando o player desse look, seria mais fácil.

 

 

Vodkart, vou testar aqui e posto um feedback ;)


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
local shopWindow = {}
local moeda = 9020 -- ID da moeda
local t = {
[2195] = {price = 15}, -- [ITEM ID PARA VENDER] = {QNTO CUSTARÁ}
[2493] = {price = 25},
[2361] = {price = 30},
[8851] = {price = 20},
[8925] = {price = 30},
[2640] = {price = 50},
[2494] = {price = 100},
[9932] = {price = 50},
[2472] = {price = 70},
[8931] = {price = 100}
}
local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
if t[item] and not doPlayerRemoveItem(cid, moeda, t[item].price) then
selfSay("you dont have"..t[item].price.." "..getItemNameById(moeda), cid)
else
doPlayerAddItem(cid, item)
selfSay("Here your item!", cid)
end
return true
end
if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then
for var, ret in pairs(t) do
table.insert(shopWindow, {id = var, subType = 0, buy = ret.price, sell = 0, name = getItemNameById(var)})
end
openShopWindow(cid, shopWindow, onBuy, onSell)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Mano, funcionou parcialmente. O que aconteceu foi o seguinte:

Sabe quando vc vai comprar algo e ta sem grana na mochila? Os nomes dos itens não ficam ressaltados de branco, eles ficam escurecidos.

Então, quando falei trade para o npc, os nomes ficaram assim e eu não conseguia comprar nada. Mas se eu tiver com grana bag (gps mesmo), ai os itens ficam compráveis, só que quando compro, disconta as Scarab coins numa boa.

 

Resumindo, vc só consegue comprar se tiver com gp na bag.

PS.: a quantidade de gp na bag tem que ser igual ou superior ao price do item para ele ser habilitado, como nos npcs normais


-----------------------------------------------------------------------------------------------

 

Mais alguém? Alguma solução?

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

  • 0
em items.xml troque


 <item id="2159" article="a" name="scarab coin" plural="scarab coins">
<attribute key="weight" value="100" />
</item>


por


 <item id="2159" article="a" name="scarab coin" plural="scarab coins">
<attribute key="weight" value="100"/>
<attribute key="worth" value="10000"/>
</item>

Link para o comentário
Compartilhar em outros sites

  • 0

 

em items.xml troque
 <item id="2159" article="a" name="scarab coin" plural="scarab coins">
<attribute key="weight" value="100" />
</item>
por
 <item id="2159" article="a" name="scarab coin" plural="scarab coins">
<attribute key="weight" value="100"/>
<attribute key="worth" value="10000"/>
</item>

 

 

Cara.... muito obrigado por toda a ajuda, de verdade, mas vou desistir disso.

Fiz o que você sugeriu, mas ai virou bagunça. Auahuahuahuahauh! Todos os npcs passaram a intender que a scarab coin valia 10k. E eu queria que apenas um npc aceitasse ela como grana. Acho que o que quero não ficará perfeito nunca.

 

Vou pensar se faço como o omega blueheaven sugeriu e colocar uma pop up ou algo assim.

 

De todo o modo, muito obrigado pela atenção.

 

Rep++

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...