This repository has been archived on 2025-12-11. You can view files and clone it, but cannot push or open issues or pull requests.

202 lines
6.4 KiB
Lua

local function addDeferral(err)
err = err:gsub("%^%d", "")
AddEventHandler('playerConnecting', function(_, _, deferrals)
deferrals.defer()
deferrals.done(err)
end)
end
-- Do not modify this file at all. This isn't a "config" file. You want to change
-- resource settings? Use convars like you were told in the documentation.
-- You did read the docs, right? Probably not, if you're here.
-- https://overextended.dev/ox_inventory#config
shared = {
resource = GetCurrentResourceName(),
framework = GetConvar('inventory:framework', 'esx'),
playerslots = GetConvarInt('inventory:slots', 50),
playerweight = GetConvarInt('inventory:weight', 30000),
target = GetConvarInt('inventory:target', 0) == 1,
police = json.decode(GetConvar('inventory:police', '["police", "sheriff"]')),
networkdumpsters = GetConvarInt('inventory:networkdumpsters', 0) == 1
}
shared.dropslots = GetConvarInt('inventory:dropslots', shared.playerslots)
shared.dropweight = GetConvarInt('inventory:dropslotcount', shared.playerweight)
do
if type(shared.police) == 'string' then
shared.police = { shared.police }
end
local police = table.create(0, shared.police and #shared.police or 0)
for i = 1, #shared.police do
police[shared.police[i]] = 0
end
shared.police = police
end
if IsDuplicityVersion() then
server = {
bulkstashsave = GetConvarInt('inventory:bulkstashsave', 1) == 1,
loglevel = GetConvarInt('inventory:loglevel', 1),
randomprices = GetConvarInt('inventory:randomprices', 0) == 1,
randomloot = GetConvarInt('inventory:randomloot', 1) == 1,
evidencegrade = GetConvarInt('inventory:evidencegrade', 2),
trimplate = GetConvarInt('inventory:trimplate', 1) == 1,
vehicleloot = json.decode(GetConvar('inventory:vehicleloot', [[
[
["sprunk", 1, 1],
["water", 1, 1],
["garbage", 1, 2, 50],
["panties", 1, 1, 5],
["money", 1, 50],
["money", 200, 400, 5],
["bandage", 1, 1]
]
]])),
dumpsterloot = json.decode(GetConvar('inventory:dumpsterloot', [[
[
["mustard", 1, 1],
["garbage", 1, 3],
["money", 1, 10],
["burger", 1, 1]
]
]])),
}
local accounts = json.decode(GetConvar('inventory:accounts', '["money"]'))
server.accounts = table.create(0, #accounts)
for i = 1, #accounts do
server.accounts[accounts[i]] = 0
end
else
PlayerData = {}
client = {
autoreload = GetConvarInt('inventory:autoreload', 0) == 1,
screenblur = GetConvarInt('inventory:screenblur', 1) == 1,
keys = json.decode(GetConvar('inventory:keys', '')) or { 'F2', 'K', 'TAB' },
enablekeys = json.decode(GetConvar('inventory:enablekeys', '[249]')),
aimedfiring = GetConvarInt('inventory:aimedfiring', 0) == 1,
giveplayerlist = GetConvarInt('inventory:giveplayerlist', 0) == 1,
weaponanims = GetConvarInt('inventory:weaponanims', 1) == 1,
itemnotify = GetConvarInt('inventory:itemnotify', 1) == 1,
weaponnotify = GetConvarInt('inventory:weaponnotify', 1) == 1,
imagepath = GetConvar('inventory:imagepath', 'nui://ox_inventory/web/images'),
dropprops = GetConvarInt('inventory:dropprops', 0) == 1,
dropmodel = joaat(GetConvar('inventory:dropmodel', 'prop_med_bag_01b')),
weaponmismatch = GetConvarInt('inventory:weaponmismatch', 1) == 1,
ignoreweapons = json.decode(GetConvar('inventory:ignoreweapons', '[]')),
suppresspickups = GetConvarInt('inventory:suppresspickups', 1) == 1,
disableweapons = GetConvarInt('inventory:disableweapons', 0) == 1,
}
local ignoreweapons = table.create(0, (client.ignoreweapons and #client.ignoreweapons or 0) + 3)
for i = 1, #client.ignoreweapons do
local weapon = client.ignoreweapons[i]
ignoreweapons[tonumber(weapon) or joaat(weapon)] = true
end
ignoreweapons[`WEAPON_UNARMED`] = true
ignoreweapons[`WEAPON_HANDCUFFS`] = true
ignoreweapons[`WEAPON_GARBAGEBAG`] = true
ignoreweapons[`OBJECT`] = true
ignoreweapons[`WEAPON_HOSE`] = true
client.ignoreweapons = ignoreweapons
end
function shared.print(...) print(string.strjoin(' ', ...)) end
function shared.info(...) lib.print.info(string.strjoin(' ', ...)) end
---Throws a formatted type error.
---```lua
---error("expected %s to have type '%s' (received %s)")
---```
---@param variable string
---@param expected string
---@param received string
function TypeError(variable, expected, received)
error(("expected %s to have type '%s' (received %s)"):format(variable, expected, received))
end
-- People like ignoring errors for some reason
local function spamError(err)
shared.ready = false
CreateThread(function()
while true do
Wait(10000)
CreateThread(function()
error(err, 0)
end)
end
end)
addDeferral(err)
error(err, 0)
end
---@param name string
---@return table
---@deprecated
function data(name)
if shared.server and shared.ready == nil then return {} end
local file = ('data/%s.lua'):format(name)
local datafile = LoadResourceFile(shared.resource, file)
local path = ('@@%s/%s'):format(shared.resource, file)
if not datafile then
warn(('no datafile found at path %s'):format(path:gsub('@@', '')))
return {}
end
local func, err = load(datafile, path)
if not func or err then
shared.ready = false
---@diagnostic disable-next-line: return-type-mismatch
return spamError(err)
end
return func()
end
if not lib then
return spamError('ox_inventory requires the ox_lib resource, refer to the documentation.')
end
local success, msg = lib.checkDependency('oxmysql', '2.7.3')
if success then
success, msg = lib.checkDependency('ox_lib', '3.27.0')
end
if not success then
return spamError(msg)
end
if not LoadResourceFile(shared.resource, 'web/build/index.html') then
return spamError(
'UI has not been built, refer to the documentation or download a release build.\n ^3https://overextended.dev/ox_inventory^0')
end
-- No we're not going to support qtarget any longer.
if shared.target and GetResourceState('ox_target') ~= 'started' then
shared.target = false
warn('ox_target is not loaded - it should start before ox_inventory')
end
if lib.context == 'server' then
shared.ready = false
return require 'server'
end
require 'client'