forked from Simnation/Main
118 lines
No EOL
3.8 KiB
Lua
118 lines
No EOL
3.8 KiB
Lua
local utils = require 'utils'
|
|
local retreiveExportsData = utils.retreiveExportsData
|
|
local overrideFunction = {}
|
|
local registeredInventories = {}
|
|
local inventoryName = GetFramework('inventory')
|
|
local inventory = exports[inventoryName]
|
|
overrideFunction.methods = retreiveExportsData(inventory, {
|
|
addItem = {
|
|
originalMethod = 'AddItem',
|
|
modifier = {
|
|
passSource = true,
|
|
effect = function(originalFun, src, name, amount, metadata, slot)
|
|
TriggerClientEvent('inventory:client:ItemBox', src, name, "add", amount)
|
|
TriggerClientEvent('qb-inventory:client:ItemBox', src, name, "add", amount)
|
|
return originalFun(src, name, amount, slot, metadata)
|
|
end
|
|
}
|
|
},
|
|
removeItem = {
|
|
originalMethod = 'RemoveItem',
|
|
modifier = {
|
|
passSource = true,
|
|
effect = function(originalFun, src, name, amount, slot)
|
|
TriggerClientEvent('inventory:client:ItemBox', src, name, "remove", amount)
|
|
TriggerClientEvent('qb-inventory:client:ItemBox', src, name, "remove", amount)
|
|
return originalFun(src, name, amount, slot)
|
|
end
|
|
}
|
|
},
|
|
setMetaData = {
|
|
originalMethod = 'SetItemData',
|
|
modifier = {
|
|
passSource = true,
|
|
effect = function(originalFun, src, slot, data)
|
|
local item = inventory:GetItemBySlot(src, slot)
|
|
|
|
if not item then return end
|
|
if type(data) ~= 'table' then return end
|
|
|
|
originalFun(src, item.name, 'info', data)
|
|
end
|
|
}
|
|
},
|
|
canCarryItem = {
|
|
originalMethod = inventoryName == 'qb-inventory' and inventory.CanAddItem and 'CanAddItem' or 'HasItem',
|
|
modifier = {
|
|
passSource = true,
|
|
}
|
|
},
|
|
getItem = {
|
|
originalMethod = 'GetItemByName',
|
|
modifier = {
|
|
passSource = true,
|
|
effect = function(originalFun, src, itemName)
|
|
local data = originalFun(src, itemName)
|
|
if not data then
|
|
return false, 'Item 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
|
|
}
|
|
},
|
|
})
|
|
|
|
function overrideFunction.registerInventory(id, data)
|
|
local type, name, items, slots, maxWeight in data
|
|
|
|
for k,v in ipairs(items or {}) do
|
|
v.amount = v.amount or 1
|
|
v.slot = k
|
|
end
|
|
|
|
registeredInventories[('%s-%s'):format(type, id)] = {
|
|
label = name,
|
|
items = items,
|
|
slots = slots or #items,
|
|
maxweight = maxWeight
|
|
}
|
|
|
|
if type == 'shop' and inventory.CreateShop then
|
|
inventory:CreateShop({
|
|
name = name,
|
|
label = name,
|
|
slots = slots or #items,
|
|
items = items
|
|
})
|
|
end
|
|
end
|
|
|
|
utils.register('bl_bridge:validInventory', function(src, invType, invId)
|
|
local inventoryData = registeredInventories[('%s-%s'):format(invType, invId)]
|
|
if not inventoryData then return end
|
|
|
|
local isShop = invType == 'shop'
|
|
|
|
if isShop and inventory.OpenShop then
|
|
return inventory:OpenShop(src, inventoryData.label)
|
|
elseif not isShop and inventory.OpenInventory then
|
|
return inventory:OpenInventory(src, inventoryData.label, {
|
|
label = inventoryData.label,
|
|
slots = inventoryData.slots,
|
|
maxweight = inventoryData.maxweight,
|
|
})
|
|
end
|
|
|
|
return inventoryData
|
|
end)
|
|
|
|
return overrideFunction |