We can set up custom stashes from outside the resource utilising the exported RegisterStash function.
Firstly, we need to define the stashes properties.
Stash properties
- id:
string
- Unique name to identify the stash in the database.
- label:
string
- Display name when viewing the stash.
- slots:
number
- Number of slots the stash will have.
- weight:
number
- Maximum weight of the stash inventory.
- owner?:
string
orboolean
true
: Each player has their own unique stash, but can request to open the stash of another playerfalse
: Only a single stash exists and is shared between all playersstring
: The stash explicitly belongs to the given owner, usually a player identifier
- groups?:
table
- Key-value pairs of job name and minimum grade to be able to access the stash. (
{["police"] = 0, ["ambulance"] = 2}
) - name:
string
- grade:
number
- Key-value pairs of job name and minimum grade to be able to access the stash. (
- coords?:
vector3
ortable
- You can set the stash coordinates to prevent the stash from being opened if the player isn't close enough.
- Vector or table containing the coordinates of the stash.
Example
Below the value is hardset, but it could be loaded from the database (especially if there are unknown fields, i.e. owner)
-- Server
local stash = {
id = '42wallabyway',
label = '42 Wallaby Way',
slots = 50,
weight = 100000,
owner = 'char1:license'
}
AddEventHandler('onServerResourceStart', function(resourceName)
if resourceName == 'ox_inventory' or resourceName == GetCurrentResourceName() then
exports.ox_inventory:RegisterStash(stash.id, stash.label, stash.slots, stash.weight, stash.owner)
end
end)
-- Client
exports.ox_inventory:openInventory('stash', {id='42wallabyway', owner=property.owner})
The following sample is based on esx_property's db data.
-- Server
local properties
MySQL.query('SELECT * FROM `properties`', {}, function(result)
properties = result
end
RegisterNetEvent('ox:loadStashes', function(id)
local stash = properties[id]
if stash then
-- id: 1, name: WhispymoundDrive, label: 2677 Whispymound Drive, coords: {"x":118.748,"y":566.573,"z":175.697}
ox_inventory:RegisterStash(stash.name, stash.label, 50, 100000, true, false, json.encode(stash.room_menu))
end
end)
-- Client
local ox_inventory = exports.ox_inventory
if ox_inventory:openInventory('stash', property.id) == false then
TriggerServerEvent('ox:loadStashes')
ox_inventory:openInventory('stash', property.id)
end
Example resource
We put together an example resource showcasing how to properly utilise the stash API: