Custom Stashes
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?:
stringorbooleantrue: 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?:
vector3ortable- 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)
lua
-- 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.
lua
-- 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)
endExample Resource#
We put together an example resource showcasing how to properly utilise the stash API: