JE
pedido

NPC que vende itens por Scarab coins

Por jefersonzc, 15 de out. de 2013 em Scripts

npc
scarab coins
itens
resolvido
otserv
tibia
8
5.4k
jefersonzcJ
15 de outubro de 2013 às 14:30

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

OmegaO
15 de outubro de 2013 às 23:04

Que tal uma janela pop-up com os itens que o NPC vende e o preço e depois o jogador fala o que quer?

VodkartV
16 de outubro de 2013 às 08:29

 

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())
jefersonzcJ
18 de outubro de 2013 às 17:41

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 Outubro 17 por jefersonzc

jefersonzcJ
23 de outubro de 2013 às 15:30

up.... quem sabe né :/

Editado Outubro 23 por jefersonzc

VodkartV
24 de outubro de 2013 às 07:16
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>

jefersonzcJ
24 de outubro de 2013 às 19:19

 

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++

OmegaO
27 de outubro de 2013 às 16:13

Tópico movido para a seção de dúvidas e pedidos resolvidos.