Storage
POPULAR LINKS
{:links-list}
INSTALLATION
- Open the downloaded ZIP product file and drop the folder in it somewhere in your resources folder.
- Add your product key (get it here) to the
settings.inifile. - Make sure your database connector, inventory, target, and
BigDaddy-Gizmoresources start before Storage. - Add
start BigDaddy-Storageto yourserver.cfg.
DO NOT RENAME THE FOLDER.
If you change the name of the folder it will not function correctly so leave the name as it is.
{:is-danger}
Storage automatically creates its required database tables when the resource starts. You do not need to manually import a SQL file.
The database may still be starting when FiveM resources first load. Storage waits before initializing and retries the database connection if it is not ready on the first attempt.
REQUIREMENTS
Storage requires:
BigDaddy-Gizmofor placing and moving containers- One supported database connector
- One supported inventory system
- An optional supported target system if target interaction is enabled
SUPPORTED DATABASE CONNECTORS
oxmysqlmysql-asyncghmattimysql
SUPPORTED INVENTORY SYSTEMS
ox_inventoryqb-inventory
SUPPORTED TARGET SYSTEMS
ox_targetqb-target
Target interaction and key interaction can be enabled at the same time. When no supported target system is running, key interaction can still be used.
CONFIGURATION
settings.ini
| SETTING | DEFAULT | DESCRIPTION |
|---|---|---|
| [licensing] | ||
| key1 | none | This is where you put your product key |
| [settings] | ||
| UseAcePermissions | true | Enables ACE permission checking for storage administration |
| AcePermission | command | ACE permission required to use the storage administration tools |
| Inventory | auto | Inventory selection. The current version automatically detects a supported running inventory resource |
| Target | auto | Target selection. The current version automatically detects a supported running target resource |
| UseTarget | true | Target interaction setting. Leave enabled in the current version |
| UseKeyInteraction | true | Key interaction setting. Leave enabled in the current version |
| InteractionKey | 47 | Key interaction control ID. The current version uses control 47, the G key |
| InteractionDistance | 2.0 | Interaction distance setting. The current version uses a 2.0-unit distance |
| EnablePlayerPlacement | false | Allows regular players to use /storagecreate to place containers |
| PlayerPlacementItems | none | Optional comma-separated item list. The player must possess any one listed item and one matching item is consumed after successful placement |
| AbandonedUnlockHours | 168 | Number of hours a container can remain locked before it is automatically unlocked. Use 0 to disable |
| EnableLockpicking | true | Enables the safe-cracking option on locked containers |
| LockpickCooldownMinutes | 15 | Cooldown after a player finishes or fails a safe-cracking attempt |
| LockpickBaseTimeSeconds | 10 | Base amount of time provided for the safe-cracking minigame |
| LockpickTimePerDigitSeconds | 9 | Additional safe-cracking time provided for each digit in the PIN |
| LockpickAllowedMistakes | 2 | Number of incorrect tumbler attempts allowed before the attempt fails |
| LockpickRequiredDialRotations | 1 | Number of complete dial rotations required before each tumbler can be set |
| LockpickContactWindowMilliseconds | 1400 | Time available to set a tumbler after reaching its correct contact point |
| LockpickFalseContactsPerRotation | 2 | Number of misleading contact sounds added during each rotation |
NOTE
Higher time, mistake, and contact-window values make safe cracking easier.
Higher rotation and false-contact values make safe cracking harder.
{:is-warning}
Player placement item example:
EnablePlayerPlacement=true
PlayerPlacementItems=storage_crate,storage_box,metal_case
In this example, a player can place a container while carrying any one of the three listed items. Only one matching item is consumed when the placement is successfully saved.
Leave PlayerPlacementItems empty to allow player placement without requiring or consuming an item.
CONTAINER MODELS
Available container types are configured in config.json.
{
"containerModels": [
{
"label": "Wooden Crate",
"model": "prop_box_wood02a_pu",
"defaultSlots": 30,
"defaultWeight": 100000
},
{
"label": "Metal Case",
"model": "prop_box_ammo03a",
"defaultSlots": 15,
"defaultWeight": 50000
}
]
}
| PROPERTY | DESCRIPTION |
|---|---|
| label | Display name shown in storage menus and inventory windows |
| model | GTA V object model spawned in the world |
| defaultSlots | Default number of inventory slots for this container type |
| defaultWeight | Default maximum inventory weight for this container type |
Administrators can override the label, slots, and weight while creating or editing a container.
Player-created containers always use the configured label, slots, and weight. Players cannot increase their own container capacity.
NOTE
Every model name must exist in GTA V or be streamed by your server. Invalid models cannot be placed.
{:is-warning}
STORAGE CONTAINERS
Storage creates persistent world containers that use your inventory system for item storage.
Each container stores:
- A unique database ID and inventory stash ID
- Display label and object model
- World position and rotation
- Inventory slot and weight limits
- Lock and PIN state
- Break-in state
- Creation and access information
The physical object is matched to its unique inventory stash after resource or server restarts. Inventory contents remain managed and persisted by ox_inventory or qb-inventory.
When the resource restarts, existing duplicate objects at a saved container location are removed before the persistent object is spawned again.
USING A CONTAINER
Unlocked containers can be used by anyone.
Depending on the enabled interaction settings, players can:
- Use the custom nearby G-key prompt
- Select Open Storage through the target system
- Select Lock Crate through the target system
The key interaction opens a small action menu because one key must support both opening and locking an unlocked container.
When a locked container is accessed, the PIN keypad opens immediately.
LOCKING AND UNLOCKING
An unlocked container can be locked by entering a new 4–8 digit PIN on the NUI keypad.
After a container is locked:
- Any player can attempt to enter its PIN.
- A correct PIN unlocks the container for everyone.
- The inventory opens immediately for the player who entered the correct PIN.
- The container remains unlocked until someone locks it again.
- Locking it again requires setting a new PIN.
PINs are stored as secure hashes and are not saved as readable plain text.
ABANDONED CONTAINERS
AbandonedUnlockHours controls how long a container may remain locked.
When the configured time expires, Storage:
- Unlocks the container
- Clears its PIN
- Makes the inventory available to other players
- Leaves the inventory contents in place so the container can be looted
Set AbandonedUnlockHours=0 to disable automatic abandoned-container unlocking.
PIN CRACKING
When EnableLockpicking=true, locked containers include a Crack Combination target option.
The minigame uses the container's actual PIN as its combination. The player must rotate the dial in the required direction, listen for contact points, complete the required rotations, and set each tumbler before time expires.
Difficulty can be tuned with:
LockpickBaseTimeSecondsLockpickTimePerDigitSecondsLockpickAllowedMistakesLockpickRequiredDialRotationsLockpickContactWindowMillisecondsLockpickFalseContactsPerRotationLockpickCooldownMinutes
A successful break-in:
- Unlocks the container
- Clears the PIN
- Opens the inventory for the player who cracked it
- Marks the container as breached in the database
- Warns the player who locked it when the breach state is relevant to them
PLAYER PLACEMENT
Player placement is disabled by default.
To enable it:
- Set
EnablePlayerPlacement=true. - Optionally add comma-separated item names to
PlayerPlacementItems. - Restart Storage.
- Have the player use
/storagecreate.
The player placement window displays the available types from config.json, including each type's slot and weight limits.
After selecting a type, the player uses BigDaddy-Gizmo to position it. When placement is saved, the server validates the model, capacity, player distance, and required item before creating the persistent container.
If items are configured, one matching item is consumed only after the final placement is accepted. Cancelling the menu or gizmo does not consume an item.
ADMINISTRATION
Administrators use /storageadmin or the Manage Container target option on a nearby container.
The administration window supports:
- Creating new containers
- Selecting the object model
- Setting the display label
- Setting slot and weight limits
- Moving containers with
BigDaddy-Gizmo - Editing container details
- Emptying and resetting containers
- Deleting containers
- Searching all existing containers
- Viewing container IDs, models, lock states, coordinates, and distance
- Setting a waypoint to a container
- Teleporting beside a container
- Selecting a container from the directory for management
Editing, moving, or deleting a container requires its inventory to be empty.
Empty & Reset removes every stored item and also:
- Unlocks the container
- Clears its PIN
- Clears its breached state
- Returns it to a publicly available state
Destructive admin actions display a confirmation before they are completed.
ACE PERMISSIONS
Only the administration tools require a permission. Normal storage access, locking, unlocking, and safe cracking are available to players without an ACE permission.
The required permission is controlled by AcePermission in settings.ini.
With the default setting:
AcePermission=command
Any player granted the command ACE can use the storage administration tools.
You can use a more specific permission:
AcePermission=bigdaddy.storage.admin
Then grant it in server.cfg:
add_ace group.admin bigdaddy.storage.admin allow
COMMANDS
| COMMAND | PERMISSION | DESCRIPTION |
|---|---|---|
/storageadmin |
Configured ACE permission | Opens storage administration and automatically selects a nearby container when possible |
/storagecreate |
EnablePlayerPlacement=true and optional required item |
Opens the player container placement window |
DATABASE
Storage automatically creates and maintains:
bigdaddy_storage_containersbigdaddy_storage_audit
The container table stores the persistent object, stash connection, capacity, lock state, breach state, and ownership history.
The audit table records important actions such as creating, moving, editing, deleting, resetting, breaking into, and automatically unlocking containers.
No SQL import is required.
RESTARTING THE RESOURCE
After changing settings.ini or config.json, refresh your resource files and restart BigDaddy-Storage or restart the server.
When Storage stops, it removes its spawned container objects from the current client. When it starts again, it loads the saved database containers, reconnects each one to its inventory stash, and respawns the objects at their saved locations.