1
0
Fork 0
forked from Simnation/Main
Main/resources/[tools]/bl_bridge/server/inventory/qs.lua
2025-08-04 04:28:47 +02:00

93 lines
No EOL
2.7 KiB
Lua

local utils = require 'utils'
local retreiveExportsData = utils.retreiveExportsData
local overrideFunction = {}
local registeredInventories = {}
local qs_inventory = exports['qs-inventory']
overrideFunction.methods = retreiveExportsData(qs_inventory, {
addItem = {
originalMethod = 'AddItem',
modifier = {
passSource = true,
effect = function(originalFun, src, name, amount, metadata, slot)
return originalFun(src, name, amount, slot, metadata)
end
}
},
removeItem = {
originalMethod = 'RemoveItem',
modifier = {
passSource = true,
}
},
setMetaData = {
originalMethod = 'SetItemMetadata',
modifier = {
passSource = true,
}
},
canCarryItem = {
originalMethod = 'CanCarryItem',
modifier = {
passSource = true,
}
},
getItem = {
originalMethod = 'GetItemByName',
modifier = {
passSource = true, -- Src doesn't actually seem to be passed to originalFunc
effect = function(originalFunc, src, itemName)
local data = originalFunc(src, itemName)
if not data then
return false, 'Item does not exist or you don\'t have it'
end
return {
label = data.label,
name = data.name,
weight = data.weight,
slot = data.slot,
close = data.shouldClose,
stack = not data.unique,
metadata = data.info ~= '' and data.info or {},
count = data.amount or 1
}
end
}
},
items = {
originalMethod = 'GetInventory',
modifier = {
passSource = true,
}
},
})
function overrideFunction.registerInventory(id, data)
local type, name, items, slots, maxWeight in data
for k,v in ipairs(items) do
v.amount = v.amount or 10
v.slot = k
end
registeredInventories[('%s-%s'):format(type, id)] = {
label = name,
items = items,
slots = slots or #items,
maxweight = maxWeight
}
end
function overrideFunction.registerUsableItem(name, cb)
qs_inventory:CreateUsableItem(name, function(source, item)
cb(source, item and item.slot, item and item.info)
end)
end
utils.register('bl_bridge:validInventory', function(_, invType, invId)
local inventory = registeredInventories[('%s-%s'):format(invType, invId)]
if not inventory then return end
return inventory
end)
return overrideFunction