president vankk
Web Developer & AuraOT Owner
- Joined
- Jul 10, 2009
- Messages
- 5,719
- Solutions
- 9
- Reaction score
- 339
I got this NPC:
And I got this in data/npc/lib/npc.lua:
And this error:
[ShopModule.onBuy]
Item not found on shopitems list
LUA:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local Topic = {}
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)
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if (msgcontains(msg, "hello") or msgcontains(msg, "hi")) and (not npcHandler:isFocused(cid)) then
npcHandler:say("Hello, ".. getCreatureName(cid) .." and welcome to my little forge.", cid)
npcHandler:addFocus(cid)
elseif(not npcHandler:isFocused(cid)) then
return false
elseif msgcontains(msg, "bye") or msgcontains(msg, "farewell") then
npcHandler:say("Bye.", cid)
npcHandler:releaseFocus(cid)
elseif msgcontains(msg, "trade") then
local items = {
{name="axe", id=2386, buy=20, sell=7},
{name="battle hammer", id=2417, buy=350},
{name="brass armor", id=2465, buy=450, sell=150},
{name="chain armor", id=2464, buy=200, sell=70},
{name="chain helmet", id=2458, buy=52, sell=17},
{name="chain legs", id=2648, buy=80, sell=25},
{name="dagger", id=2351, buy=5},
{name="hand axe", id=2380, buy=8, sell=4},
{name="leather armor", id=2467, buy=35, sell=12},
{name="leather helmet", id=2461, buy=12},
{name="mace", id=2398, buy=90, sell=30},
{name="rapier", id=2384, buy=15, sell=5},
{name="sabre", id=2385, buy=35, sell=12},
{name="spear", id=2389, buy=10, sell=3},
{name="steel shield", id=2509, buy=240, sell=80},
{name="sword", id=2376, buy=85, sell=25},
{name="throwing knife", id=2410, buy=25},
{name="wooden shield", id=2512, buy=15, sell=3},
{name="battle axe", id=2378, sell=80},
{name="battle shield", id=2513, sell=95},
{name="halberd", id=2381, sell=400},
{name="morning star", id=2394, sell=90},
{name="plate armor", id=2463, sell=400},
{name="steel helmet", id=2457, sell=190},
{name="two handed sword", id=2377, sell=450},
{name="warmaster's wristguards", id=11322, sell=200},
{name="lizard weapon rack kit", id=11120, buy=500},
{name="twin hooks", id=11309, buy=1100, sell=500},
{name="zaoan halberd", id=11323, sell=500},
{name="bone shoulderplate", id=11315, sell=150},
{name="broken halberd", id=11329, sell=100},
{name="cursed shoulder spikes", id=11321, sell=320},
{name="drachaku", id=11308, sell=10000},
{name="drakinata", id=11305, sell=10000},
{name="draken boots", id=12646, sell=40000},
{name="guardian boots", id=11240, sell=35000},
{name="high guard's shoulderplates", id=11333, sell=130},
{name="legionnaire flags", id=11334, sell=500},
{name="sais", id=11306, sell=16500},
{name="spiked iron ball", id=11325, sell=100},
{name="trashed draken boots", id=12660, sell=40000},
{name="twiceslicer", id=12613, sell=28000},
{name="wailing widow's necklace", id=11329, sell=3000},
{name="zaoan armor", id=11301, sell=14000},
{name="zaoan helmet", id=11302, sell=45000},
{name="zaoan legs", id=11304, sell=14000},
{name="zaoan shoes", id=11303, sell=5000},
{name="zaoan sword", id=11307, sell=30000},
{name="zaogun's shoulderplates", id=11331, sell=150},
}
openShopWindow(cid, items,
function(cid, itemid, subType, amount, ignoreCap, inBackpacks)
customCallbackOnSell(cid, itemid, subType, amount, ignoreCap, inBackpacks, items)
end,
function(cid, itemid, subType, amount, ignoreCap, inBackpacks)
customCallbackOnBuy(cid, itemid, subType, amount, ignoreCap, inBackpacks, items)
end
)
npcHandler:say("Of course, just browse through my wares.", cid)
end
return TRUE
end
npcHandler:setMessage(MESSAGE_WALKAWAY, "Bye.")
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
And I got this in data/npc/lib/npc.lua:
LUA:
function customCallbackOnBuy(cid, itemid, subType, amount, ignoreCap, inBackpacks, shopWindow)
local shopItem, npcHandler = nil, NpcHandler
for _, item in ipairs(shopWindow) do
if not item.subType then
item.subType = (isItemFluidContainer(item.id) == TRUE or isItemStackable(item.id) == TRUE) and 0 or 1
end
if(item.id == itemid and (item.subType == subType)) then
shopItem = item
break
end
end
if(shopItem == nil) then
print("[ShopModule.onBuy]", "Item not found on shopItems list")
return false
end
if(shopItem.buy < 0) then
print("[ShopModule.onSell]", "Attempt to purchase an item which is only sellable")
return false
end
local backpack, totalCost = 1988, amount * shopItem.buy
if(inBackpacks) then
totalCost = isItemStackable(itemid) == TRUE and totalCost + 20 or totalCost + (math.max(1, math.floor(amount / getContainerCapById(backpack))) * 20)
end
if(getPlayerMoney(cid) < totalCost) then
doPlayerSendCancel(cid, npcHandler:parseMessage(npcHandler:getMessage(MESSAGE_NEEDMONEY), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = totalCost, [TAG_ITEMNAME] = shopItem.name}))
return false
end
local subType = shopItem.subType or isItemFluidContainer(itemid) == TRUE and 0 or 1
local a, b = doNpcSellItem(cid, itemid, amount, subType, ignoreCap, inBackpacks, backpack)
if(a < amount) then
local msgId = MESSAGE_NEEDMORESPACE
if(a == 0) then
msgId = MESSAGE_NEEDSPACE
end
doPlayerSendCancel(cid, npcHandler:parseMessage(npcHandler:getMessage(msgId), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = totalCost, [TAG_ITEMNAME] = shopItem.name, [TAG_ITEMCOUNT] = a}))
if(a > 0) then
doPlayerRemoveMoney(cid, ((a * shopItem.buy) + (b * 20)))
return true
end
return false
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, npcHandler:parseMessage(npcHandler:getMessage(MESSAGE_BOUGHT), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = totalCost, [TAG_ITEMNAME] = shopItem.name}))
doPlayerRemoveMoney(cid, totalCost)
return true
end
function customCallbackOnSell(cid, itemid, subType, amount, ignoreCap, inBackpacks, shopWindow)
local shopItem, npcHandler, subType = nil, NpcHandler, subType or 0
for _, item in ipairs(shopWindow) do
item.subType = not item.subType and 0 or item.subType
if(item.id == itemid and (isItemFluidContainer(itemid) == FALSE or isItemFluidContainer(itemid) == TRUE and item.subType == subType)) then
shopItem = item
break
end
end
if(shopItem == nil) then
print("[ShopModule.onBuy]", "Item not found on shopItems list")
return false
end
if(shopItem.sell < 0) then
print("[ShopModule.onSell]", "Attempt to sell an item which is only buyable")
return false
end
if(doPlayerRemoveItem(cid, itemid, amount, isItemFluidContainer(itemid) == TRUE and subType or isItemStackable(itemid) == TRUE and amount or 1) == TRUE) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, npcHandler:parseMessage(npcHandler:getMessage(MESSAGE_SOLD), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = amount * shopItem.sell, [TAG_ITEMNAME] = shopItem.name}))
doPlayerAddMoney(cid, amount * shopItem.sell)
return true
end
doPlayerSendCancel(cid, npcHandler:parseMessage(npcHandler:getMessage(MESSAGE_NEEDITEM), {[TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = amount * shopItem.sell, [TAG_ITEMNAME] = shopItem.name}))
return false
end
And this error:
[ShopModule.onBuy]
Item not found on shopitems list
Last edited: