Skip to content

Installation

Before installing, make sure the required resources are running on your server:

DependencyRequiredPurpose
ox_libโœ… YesCallbacks, dialogs, menus, and progress interactions
oxmysqlโœ… YesStorage persistence, logs, delivery data, and automatic migrations
Supported inventoryโœ… Yesox_inventory, qb-inventory, qs-inventory, or codem-inventory
Supported targetโœ… Yesox_target or qb-target
FrameworkOptionalQBCore, Qbox, ESX, Standalone, or a custom bridge
LB PhoneOptionalRequired only when using the included My Storages phone app
  1. Extract the core resource into your serverโ€™s resources directory:
rs_multistorage

If you want to use the included LB Phone application, also extract:

rs_multistorage_phone

rs_multistorage_phone is optional. Keep the folder names unchanged when installed.

  1. Add the required items to your inventory. Ready-to-paste definitions are included:
InventorySetup file
ox_inventoryrs_multistorage/install/items/ox_inventory.lua
qb-inventory / qs-inventory / codem-inventoryrs_multistorage/install/items/qb-inventory.lua
ESX database itemsrs_multistorage/install/items/esx_items.sql
QB digital scanner weaponrs_multistorage/install/weapons/qb-weapons.lua
  1. Copy the item images from rs_multistorage/web/images/ into your inventoryโ€™s image folder.

  2. Add the core resource to server.cfg in the correct order:

Core Installation
ensure oxmysql
ensure ox_lib
# Start your framework, inventory, and target before RS Multi Storage
ensure rs_multistorage

Only add the following lines when using the optional LB Phone application:

Optional LB Phone App
ensure lb-phone
ensure rs_multistorage_phone
  1. Restart the server. The storage and phone tables are created automatically. You do not need to import the main SQL file manually.

  2. Give yourself a storage item and test placement:

Example Command
/giveitem <player_id> large_safe 1

The script detects the framework, inventory, and target automatically. You can also select them manually in shared/config.lua:

shared/config.lua
Config.Framework = { type = 'auto' } -- 'qb', 'esx', 'standalone', 'custom'
Config.Inventory = {
type = 'auto', -- 'ox_inventory', 'qb_inventory', 'qs_inventory', 'codem_inventory', 'custom'
stashIdPrefix = 'multistorage_'
}
Config.Target = { type = 'auto' } -- 'ox_target', 'qb_target', 'custom'

The automatic priority order is:

  • Framework: qbx_core โ†’ qb-core โ†’ es_extended โ†’ Standalone
  • Inventory: ox_inventory โ†’ qb-inventory โ†’ qs-inventory โ†’ codem-inventory
  • Target: ox_target โ†’ qb-target

The base system uses the following items:

ItemPurpose
storage_containerStarts the NPC container delivery process
large_safePlaces a large safe
medium_safePlaces a medium safe
small_safePlaces a small safe
portable_safePlaces a portable and buryable safe
storage_keyMetadata key connected to one storage
shovelBuries and recovers portable safes
welding_toolPolice storage breaching
repairkitRepairs damaged storages

The optional heist module also uses heist_welding_tool, heist_lockpick, and weapon_digiscanner.

If Config.BurySystem.giveBuriedNote remains enabled, also register the configured buried_storage_note item in your inventory.

The phone application is included but optional. It automatically registers itself through LB Phone when both resources are running.

Phone Resource Order
ensure rs_multistorage
ensure lb-phone
ensure rs_multistorage_phone

By default, the app is installed on every phone. The included phone app currently resolves QBCore, Qbox, and ESX player identifiers; standalone servers require a small custom identifier adaptation in the phone resource. To make it an App Store download instead:

rs_multistorage_phone/shared/config.lua
Config.App = {
identifier = 'my_storages',
name = 'My Storages',
defaultApp = false,
price = 500
}

The default admin command is /storageadmin. Configure framework groups or ACE permission in the main config:

shared/config.lua
Config.Admin = {
command = 'storageadmin',
aceGroup = 'admin',
qbAdminRanks = { 'god', 'admin' },
esxGroups = { 'admin', 'superadmin' }
}

For standalone ACE permission, add an appropriate rule to server.cfg, for example:

server.cfg
add_ace group.admin admin allow