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:
stringUnique name to identify the stash in the database.
label:
stringDisplay name when viewing the stash.
slots:
numberNumber of slots the stash will have.
weight:
numberMaximum 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?:
tableKey-value pairs of job name and minimum grade to be able to access the stash. (
{["police"] = 0, ["ambulance"] = 2})name:
stringgrade:
number
coords?:
vector3ortableYou 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)
endExample Resource
We put together an example resource showcasing how to properly utilise the stash API:
Last updated