local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
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 function getTable(player)
local itemsList = {
{name="apprentice exercise sword", id=13188, buy=250000, subType = 500},
{name="superior exercise sword", id=13187, buy=900000, subType = 1800},
{name="expert exercise sword", id=13186, buy=8000000, subType = 14400},
{name="apprentice exercise axe", id=13192, buy=250000, subType = 500},
{name="superior exercise axe", id=13191, buy=900000, subType = 1800},
{name="expert exercise axe", id=13190, buy=8000000, subType = 14400},
{name="apprentice exercise club", id=13196, buy=250000, subType = 500},
{name="superior exercise club", id=13195, buy=900000, subType = 1800},
{name="expert exercise club", id=13194, buy=8000000, subType = 14400},
{name="apprentice exercise bow", id=13201, buy=250000, subType = 500},
{name="superior exercise bow", id=13203, buy=900000, subType = 1800},
{name="expert exercise bow", id=13204, buy=8000000, subType = 14400},
{name="apprentice exercise staff", id=13200, buy=250000, subType = 500},
{name="superior exercise staff", id=13199, buy=900000, subType = 1800},
{name="expert exercise staff", id=13198, buy=8000000, subType = 14400}
}
local tomes = {
{
-- 3 tomes
{name="lizard weapon rack kit", id=11126, buy=500}
},
{
-- 9 tomes
{name="bone shoulderplate", id=11321, sell=150},
{name="broken draken mail", id=12616, sell=340},
{name="broken halberd", id=11335, sell=100},
{name="Broken Slicer", id=12617, sell=120},
{name="cursed shoulder spikes", id=11327, sell=320},
{name="drachaku", id=11308, sell=10000},
{name="draken boots", id=12646, sell=40000},
{name="draken wristbands", id=12615, sell=430},
{name="drakinata", id=11305, sell=10000},
{name="Elite Draken Mail", id=12607, sell=50000},
{name="guardian boots", id=11240, sell=35000},
{name="high guard's shoulderplates", id=11333, sell=130},
{name="sais", id=11306, sell=16500},
{name="spiked iron ball", id=11325, sell=100},
{name="twiceslicer", id=12613, sell=28000},
{name="twin hooks", id=11309, buy=1100, sell=500},
{name="wailing widow's necklace", id=11329, sell=3000},
{name="warmaster's wristguards", id=11322, sell=200},
{name="zaoan armor", id=11301, sell=14000},
{name="zaoan halberd", id=11323, buy=1200, sell=500},
{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}
}
}
if player:getStorageValue(Storage.TheNewFrontier.TomeofKnowledge) >= 3 then
-- 3 tomes
for i = 1, #tomes[1] do
itemsList[#itemsList] = tomes[1][i]
end
end
if player:getStorageValue(Storage.TheNewFrontier.TomeofKnowledge) >= 9 then
-- 9 tomes
for i = 1, #tomes[2] do
itemsList[#itemsList] = tomes[2][i]
end
end
return itemsList
end
local function setNewTradeTable(table)
local items, item = {}
for i = 1, #table do
item = table[i]
items[item.id] = {itemId = item.id, buyPrice = item.buy, sellPrice = item.sell, subType = item.subType, realName = item.name}
end
return items
end
local function onBuy(cid, item, subType, amount, ignoreCap, inBackpacks)
local player = Player(cid)
local items = setNewTradeTable(getTable(player))
local backpack = player:getSlotItem(CONST_SLOT_BACKPACK)
if not backpack or backpack:getEmptySlots(true) < 1 then
player:sendCancelMessage(RETURNVALUE_NOTENOUGHROOM)
return false
end
if not ignoreCap and player:getFreeCapacity() < ItemType(items[item].itemId):getWeight(amount) then
return player:sendTextMessage(MESSAGE_FAILURE, 'You don\'t have enough cap.')
end
if not player:removeMoneyNpc(items[item].buyPrice * amount) then
selfSay("You don't have enough money.", cid)
else
player:addItem(items[item].itemId, amount, true, subType)
return player:sendTextMessage(MESSAGE_TRADE, 'Bought '..amount..'x '..items[item].realName..' for '..items[item].buyPrice * amount..' gold coins.')
end
return true
end
local function onSell(cid, item, subType, amount, ignoreCap, inBackpacks)
local player = Player(cid)
local items = setNewTradeTable(getTable(player))
if items[item].sellPrice and player:removeItem(items[item].itemId, amount) then
player:addMoney(items[item].sellPrice * amount)
return player:sendTextMessage(MESSAGE_TRADE, 'Sold '..amount..'x '..items[item].realName..' for '..items[item].sellPrice * amount..' gold coins.')
else
selfSay("You don't have item to sell.", cid)
end
return true
end
local function creatureSayCallback(cid, type, msg)
if not npcHandler:isFocused(cid) then
return false
end
if msgcontains(msg, "trade") then
local player = Player(cid)
local items = setNewTradeTable(getTable(player))
openShopWindow(cid, getTable(player), onBuy, onSell)
npcHandler:say("Of course, just browse through my wares.", cid)
end
return true
end
npcHandler:setMessage(MESSAGE_GREET, 'Hello, |PLAYERNAME| and welcome to my little forge.')
npcHandler:setMessage(MESSAGE_FAREWELL, 'Bye.')
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())