sd-selfstorage is a comprehensive self-storage rental system for FiveM that allows players to rent or purchase storage units with advanced features including auto-renewal payments, access management (i.e. you can give people access to your unit), upgrades, and more.
- 🏢 Rent or Purchase - Players can either rent units weekly or buy them permanently
- 💳 Auto-Renewal System - Automatic payments from bank accounts (configurable)
- 👥 Access Management - Share storage access with other players
- ⬆️ Storage Upgrades - Purchase additional slots and weight capacity
- ⏰ Grace Period System - 48-hour grace period for overdue payments
- 🏦 Banking Integration - Works with banking systems that support static identifiers
- 🌍 Multi-Language Support - Easy localization system
- 📦 ox_inventory Integration - Full stash system with weight and slot limits
Author: Samuel#0008
Discord: Join the Discord
Store: Click Here
- Download the latest release from the repository
- Extract the downloaded file and rename the folder to
sd-selfstorage - Place the
sd-selfstoragefolder into your server'sresourcesdirectory - Add
ensure sd-selfstorageto yourserver.cfg - Configure the banking functions in
server/main.lua(lines 14-37), if you want auto-renewal to work. - Adjust the config file to your needs
- ox_inventory
- ox_lib
- qbx_core, qb-core or es_extended
- oxmysql
The script supports two modes depending on your banking system:
Banking = {
hasStaticIdentifiers = true,
noIdentifierMessage = 'Your banking system does not support automatic payments'
}Banking = {
hasStaticIdentifiers = false,
noIdentifierMessage = 'Your banking system does not support automatic payments'
}When hasStaticIdentifiers = false:
- Auto-renewal features are disabled
- Bank account linking is hidden
- Only manual payments are available
- Grace period and deletion systems still work
Edit the banking functions in server/main.lua (lines 14-37):
-- Example Integration with RxBanking
Banking.GetPlayerAccount = function(identifier)
local accountData = exports['RxBanking']:GetPlayerPersonalAccount(identifier)
if type(accountData) == "table" then
return accountData.iban
elseif type(accountData) == "string" then
return accountData
end
return nil
end
Banking.RemoveAccountMoney = function(accountId, amount, unitId)
return exports['RxBanking']:RemoveAccountMoney(
accountId,
amount,
'payment',
locale('storage_unit_autorenewal', { id = unitId }),
nil
)
end

