wafuboe
Member
- Joined
- Dec 24, 2010
- Messages
- 881
- Solutions
- 2
- Reaction score
- 22
hello i would like to have some modifications on gnomally so it can trade items without needing to be part of the "gnomes" so it does not check storage and you can freely trade items can i get some help please illl appreciated thank you!
TFS 1.3
Code
TFS 1.3
Code
Code:
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 t = {}
local renown = {}
local config = {
['supply'] = {itemid = 18215, token = {type = 'minor', id = 18422, count = 2}},
['muck'] = {itemid = 18395, token = {type = 'minor', id = 18422, count = 8}},
['mission'] = {itemid = 18509, token = {type = 'minor', id = 18422, count = 10}},
['lamp'] = {itemid = 18388, token = {type = 'minor', id = 18422, count = 15}},
['backpack'] = {itemid = 18393, token = {type = 'minor', id = 18422, count = 15}},
['addition to the soil guardian outfit'] = {itemid = 18518, token = {type = 'minor', id = 18422, count = 70}},
['addition to the crystal warlord armor outfit'] = {itemid = 18521, token = {type = 'minor', id = 18422, count = 70}},
['gill gugel'] = {itemid = 18398, token = {type = 'major', id = 18423, count = 10}},
['gill coat'] = {itemid = 18399, token = {type = 'major', id = 18423, count = 10}},
['gill legs'] = {itemid = 18400, token = {type = 'major', id = 18423, count = 10}},
['spellbook'] = {itemid = 18401, token = {type = 'major', id = 18423, count = 10}},
['prismatic helmet'] = {itemid = 18403, token = {type = 'major', id = 18423, count = 10}},
['prismatic armor'] = {itemid = 18404, token = {type = 'major', id = 18423, count = 10}},
['prismatic legs'] = {itemid = 18405, token = {type = 'major', id = 18423, count = 10}},
['prismatic boots'] = {itemid = 18406, token = {type = 'major', id = 18423, count = 10}},
['prismatic shield'] = {itemid = 18410, token = {type = 'major', id = 18423, count = 10}},
['basic soil guardian outfit'] = {itemid = 18517, token = {type = 'major', id = 18423, count = 20}},
['basic crystal warlord outfit'] = {itemid = 18520, token = {type = 'major', id = 18423, count = 20}},
['iron loadstone'] = {itemid = 18447, token = {type = 'major', id = 18423, count = 20}},
['glow wine'] = {itemid = 18448, token = {type = 'major', id = 18423, count = 20}}
}
local function getTable()
local itemsList = {
{name = "bell", id = 18343, buy = 50},
{name = "gnomish crystal package", id = 18313, buy = 1000},
{name = "gnomish extraction crystal", id = 18213, buy = 50},
{name = "gnomish repair crystal", id = 18219, buy = 50},
{name = "gnomish spore gatherer", id = 18328, buy = 50},
{name = "little pig", id = 18339, buy = 150}
}
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 = 0, realName = item.name}
end
return items
end
local function onBuy(cid, item, subType, amount, ignoreCap, inBackpacks)
local player = Player(cid)
local items = setNewTradeTable(getTable())
local count = 0
for i = 1, amount do
local item = Game.createItem(items[item].itemId, subType)
if player:addItemEx(item, false) ~= RETURNVALUE_NOERROR then
npcHandler:say('First make sure you have enough space in your inventory.', cid)
break
end
count = i
end
if count == 0 then
return true
end
player:removeMoney(items[item].buyPrice * count)
player:sendTextMessage(MESSAGE_INFO_DESCR, string.format('Bought %dx %s for %d gold.', count, items[item].realName, items[item].buyPrice * count))
return true
end
local function greetCallback(cid)
npcHandler:setMessage(MESSAGE_GREET, 'Oh, hello! I\'m the gnome-human relations assistant. I am here for you to trade your tokens for {equipment}, resupply you with mission {items} and talk to you about your {relations} to us gnomes! ...')
return true
end
local function creatureSayCallback(cid, type, msg)
if not npcHandler:isFocused(cid) then
return false
end
if msgcontains(msg, 'equipment') then
npcHandler:say({
'You can buy different equipment for minor or for major tokens. So, which is the equipment you are interested in, the one for {minor} or {major} tokens? ...',
'By the way, if you want to have a look on the prismatic and gill items first, just head over to the depot and check the market.'
}, cid)
elseif msgcontains(msg, 'major') then
npcHandler:say({
'For ten major tokens, I can offer you a {gill gugel}, a {gill coat}, {gill legs}, a {spellbook} of vigilance, a {prismatic helmet}, a {prismatic armor}, {prismatic legs}, {prismatic boots} or a {prismatic shield} ...',
'For twenty major tokens, I can offer you a {basic soil guardian outfit}, a {basic crystal warlord outfit}, an {iron loadstone} or a {glow wine}.'
}, cid)
elseif msgcontains(msg, 'minor') then
npcHandler:say({
'For two minor tokens, you can buy one gnomish {supply} package! For eight tokens, you can buy a {muck} remover! For ten tokens, you can buy a {mission} crystal. For fifteen tokens, you can buy a crystal {lamp} or a mushroom {backpack}. ...',
'For seventy tokens, I can offer you a voucher for an {addition to the soil guardian outfit}, or a voucher for an {addition to the crystal warlord armor outfit}.'
}, cid)
elseif config[msg] then
local itemType = ItemType(config[msg].itemid)
npcHandler:say(string.format('Do you want to trade %s %s for %d %s tokens?', (itemType:getArticle() ~= "" and itemType:getArticle() or ""), itemType:getName(), config[msg].token.count, config[msg].token.type), cid)
npcHandler.topic[cid] = 1
t[cid] = msg
elseif msgcontains(msg, 'relations') then
local player = Player(cid)
if player:getStorageValue(Storage.BigfootBurden.QuestLine) >= 14 then
npcHandler:say('Our relations improve with every mission you undertake on our behalf. Another way to improve your relations with us gnomes is to trade in minor crystal tokens. ...', cid)
npcHandler:say('Your renown amongst us gnomes is currently {' .. math.max(0, player:getStorageValue(Storage.BigfootBurden.Rank)) .. '}. Do you want to improve your standing by sacrificing tokens? One token will raise your renown by 5 points. ', cid)
npcHandler.topic[cid] = 2
else
npcHandler:say('You are not even a recruit of the Bigfoots. Sorry I can\'t help you.', cid)
end
elseif npcHandler.topic[cid] == 3 then
local amount = getMoneyCount(msg)
if amount > 0 then
npcHandler:say('Do you really want to trade ' .. amount .. ' minor tokens for ' .. amount * 5 .. ' renown?', cid)
renown[cid] = amount
npcHandler.topic[cid] = 4
end
elseif msgcontains(msg, 'items') then
npcHandler:say('Do you need to buy any mission items?', cid)
npcHandler.topic[cid] = 5
elseif msgcontains(msg, 'yes') then
if npcHandler.topic[cid] == 1 then
local player, targetTable = Player(cid), config[t[cid]]
if player:getItemCount(targetTable.token.id) < targetTable.token.count then
npcHandler:say('Sorry, you don\'t have enough ' .. targetTable.token.type .. ' tokens with you.', cid)
npcHandler.topic[cid] = 0
return true
end
local item = Game.createItem(targetTable.itemid, 1)
local weight = 0
weight = ItemType(item.itemid):getWeight(item:getCount())
if player:addItemEx(item) ~= RETURNVALUE_NOERROR then
if player:getFreeCapacity() < weight then
npcHandler:say('First make sure you have enough capacity to hold it.', cid)
else
npcHandler:say('First make sure you have enough space in your inventory.', cid)
end
npcHandler.topic[cid] = 0
return true
end
player:removeItem(targetTable.token.id, targetTable.token.count)
npcHandler:say('Here have one of our ' .. item:getPluralName() .. '.', cid)
npcHandler.topic[cid] = 0
elseif npcHandler.topic[cid] == 2 then
npcHandler:say("How many tokens do you want to trade?", cid)
npcHandler.topic[cid] = 3
elseif npcHandler.topic[cid] == 4 then
local player = Player(cid)
if player:removeItem(18422, renown[cid]) then
player:setStorageValue(Storage.BigfootBurden.Rank, math.max(0, player:getStorageValue(Storage.BigfootBurden.Rank)) + renown[cid] * 5)
npcHandler:say('As you wish! Your new renown is {' .. player:getStorageValue(Storage.BigfootBurden.Rank) .. '}.', cid)
else
npcHandler:say('You don\'t have these many tokens.', cid)
end
npcHandler.topic[cid] = 0
elseif npcHandler.topic[cid] == 5 then
openShopWindow(cid, getTable(), onBuy, onSell)
npcHandler:say('Let us see if I have what you need.', cid)
npcHandler.topic[cid] = 0
end
elseif msgcontains(msg, 'no') and isInArray({1, 3, 4, 5}, npcHandler.topic[cid]) then
npcHandler:say('As you like.', cid)
npcHandler.topic[cid] = 0
end
return true
end
local function onReleaseFocus(cid)
t[cid], renown[cid] = nil, nil
end
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:setCallback(CALLBACK_ONRELEASEFOCUS, onReleaseFocus)
npcHandler:addModule(FocusModule:new())