TFS 1.x version of Action - item 'item seller'/'fast loot' (use npc items list config!) (https://otland.net/threads/item-item-seller-fast-loot-use-npc-items-list-config.51076/)
How it works?
Player uses 'loot seller item' (ex. some rune - item that player can 'Use with...') on other item and if that other item is sellable, script removes it and gives player money.
It's easy to configure, as you can copy item lists from NPC. Items configuration is at bottom of script.
New features in 1.x version:
data/actions/scripts/other/item_seller.lua:
How it works?
Player uses 'loot seller item' (ex. some rune - item that player can 'Use with...') on other item and if that other item is sellable, script removes it and gives player money.
It's easy to configure, as you can copy item lists from NPC. Items configuration is at bottom of script.
New features in 1.x version:
- support for items list from .xml file
- limit range to 1 SQM
- block possibility to sell item in house, otherwise someone could sell item that lays in house doors
- block possibility to sell items with actionID or uniqueID
XML:
<action actionid="36282" event="script" value="other/item_seller.lua"/>
Lua:
-- rest of config (item prices) is under function, paste there your items list from npc
local config = {
price_percent = 90, -- how many % of shop price player receive when sell by 'item seller'
cash_to_bank = true -- send money to bank, not add to player BP
}
local shopItems = {}
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
if toPosition.x ~= 65535 and getDistanceBetween(player:getPosition(), toPosition) > 1 then
player:sendTextMessage(MESSAGE_INFO_DESCR, 'This item is too far away.')
return true
end
local targetTile = Tile(toPosition)
if targetTile then
-- this is to prevent selling item that lays in house doors
local targetHouse = targetTile:getHouse()
if targetHouse then
-- this blocks only selling items laying on house floor
-- if player open BP that lays on house floor, he can sell items inside it
player:sendTextMessage(MESSAGE_INFO_DESCR, 'You cannot sell items in house.')
return true
end
end
local itemEx = Item(target.uid)
if not itemEx then
player:sendTextMessage(MESSAGE_INFO_DESCR, 'This is not an item.')
return true
end
if itemEx:getUniqueId() < 65535 or itemEx:getActionId() > 0 then
player:sendTextMessage(MESSAGE_INFO_DESCR, 'You cannot sell quest item.')
return true
end
if not shopItems[itemEx.itemid] then
player:sendTextMessage(MESSAGE_INFO_DESCR, 'This is not sellable item.')
return true
end
local itemCount = 1
local itemType = ItemType(itemEx.itemid)
if itemType:isStackable() then
itemCount = itemEx.type
end
local itemName = itemEx:getName()
local itemValue = math.ceil(shopItems[itemEx.itemid] * itemCount / 100 * config.price_percent)
if itemValue > 0 then
itemEx:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
itemEx:remove()
local message = 'You sold ' .. itemCount .. ' ' .. itemName .. ' for ' .. itemValue .. ' gold coins.'
if config.cash_to_bank then
player:setBankBalance(player:getBankBalance() + itemValue)
message = message .. ' Money was added to your bank account.'
else
player:addMoney(itemValue)
end
player:sendTextMessage(MESSAGE_INFO_DESCR, message)
else
player:sendTextMessage(MESSAGE_INFO_DESCR, itemName .. ' is worthless.')
end
return true
end
local shopModule = {}
function shopModule:addBuyableItemContainer()
end
function shopModule:addBuyableItem()
end
function shopModule:addSellableItem(names, itemid, cost, realName)
shopItems[itemid] = cost
end
function shopModule:parseList(data)
for item in string.gmatch(data, "[^;]+") do
local i = 1
local itemid = -1
local cost = 0
for temp in string.gmatch(item, "[^,]+") do
if i == 2 then
itemid = tonumber(temp)
elseif i == 3 then
cost = tonumber(temp)
end
i = i + 1
end
shopItems[itemid] = cost
end
end
-- here paste list of items from NPC lua file
shopModule:addSellableItem({ 'poison arrow' }, 2545, 5, 'poison arrow')
shopModule:addSellableItem({ 'hota' }, 2342, 500, 'helmet of the ancients')
-- here paste list from .xml file
shopModule:parseList('crossbow,2455,150;bow,2456,130')
shopModule:parseList('knight armor, 2476, 10000')
Last edited: