Installation — Shutters Creator | Quasar Store | Quasar Store
Documentation
Installation
Install Shutters Creator on your FiveM server: requirements, server.cfg load order, the qs_shutters database table, the lockpick item and admin access.
Before installing Shutters Creator, make sure your server meets the minimum requirements. Four things are mandatory; everything else is optional and detected on its own.
Requirement
Status
Notes
OneSync
Required
Declared as a dependency. It is on by default on txAdmin servers.
oxmysql
Required
Database access. Shutters and their state are stored in one table.
ox_lib
Required
Callbacks, the zones around each shutter and the lockpick skill check.
Framework
Required
ESX, QBCore or Qbox — auto-detected. Jobs, gangs, items and the admin check come from it.
Inventory
Recommended
qs-inventory, ox_inventory, qb-inventory, tgiann-inventory or origen-inventory. It fills the creator's Required Item list with names and pictures.
Target
Optional
ox_target or qb-target, when Config.UseTarget is on. Without one, players press E at a 3D prompt.
Gangs
Optional
QBCore and Qbox gangs work out of the box. On ESX, gang access needs qs-gangs.
qs-interface · qs-textui
Optional
Quasar-styled notifications, HUD hiding and the 3D prompt. Without them the script uses its own notifications and GTA's 3D text.
Everything framework- or inventory-specific sits behind a small bridge file, and the resource picks the right one by looking at what is already running:
Layer
Detected resources
Framework
es_extended → ESX · qb-core and qbx_core → the QB bridge
After purchasing Shutters Creator, the resource is automatically linked to your CFX Portal account.
Sign in to the CFX Portal using the same account used during checkout, open Granted Assets, and download Shutters Creator. With a different account the asset does not appear.
After extracting the download, you should have the following folders:
lua
[shutterscreator]/
├── qs-shutter-creator/ -- the script
│ ├── config/ -- what you may edit
│ ├── custom/ -- framework bridges, ESX and QBCore/Qbox (editable)
│ ├── server/custom/ -- the inventory bridges (editable)
│ ├── locales/ -- 27 languages (editable)
│ └── types.lua -- the data formats, for developers
├── shutters_props/ -- the six shutter models, streamed
├── [sql]/database.sql -- the qs_shutters table
└── [img]/shutter_lockpick.png -- the lockpick item picture
Keep the folder named qs-shutter-creator. Its sounds are loaded from nui://qs-shutter-creator/ and every export is called on that name, so a renamed copy plays no sound and breaks any script that calls it.
The loading order matters. A framework that starts after Shutters Creator is not found and the resource stops with an error; an inventory that starts after it is not found and the creator's item list stays empty.
Shutters Creator keeps everything in a single table, qs_shutters. Import [sql]/database.sql into your server's database before the first start, with HeidiSQL or any MySQL / MariaDB client.
database.sql
sql
CREATE TABLE IF NOTEXISTS `qs_shutters` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`creator` VARCHAR(80) NULLDEFAULTNULLCOLLATE'utf8mb3_general_ci',
`name` VARCHAR(64) NULLDEFAULTNULLCOLLATE'utf8mb3_general_ci',
`model` VARCHAR(64) NOT NULLDEFAULT'sf_prop_sf_shutter_01a'COLLATE'utf8mb3_general_ci',
`coords` LONGTEXT NOT NULLCOLLATE'utf8mb3_general_ci',
`open_offset` FLOATNOT NULLDEFAULT'3',
`interact_points` LONGTEXT NULLDEFAULTNULLCOLLATE'utf8mb3_general_ci',
`item` VARCHAR(64) NULLDEFAULTNULLCOLLATE'utf8mb3_general_ci',
`job` VARCHAR(30) NULLDEFAULTNULLCOLLATE'utf8mb3_general_ci',
`job_grades` LONGTEXT NULLDEFAULTNULLCOLLATE'utf8mb3_general_ci',
`gang` VARCHAR(30) NULLDEFAULTNULLCOLLATE'utf8mb3_general_ci',
`gang_grades` LONGTEXT NULLDEFAULTNULLCOLLATE'utf8mb3_general_ci',
`enable_pin` TINYINT(1) NOT NULLDEFAULT'0',
`pin_code` VARCHAR(10) NULLDEFAULTNULLCOLLATE'utf8mb3_general_ci',
`pin_length` TINYINT NOT NULLDEFAULT'4',
`blip` LONGTEXT NULLDEFAULTNULLCOLLATE'utf8mb3_general_ci',
`is_closed` TINYINT(1) NULLDEFAULT'1',
PRIMARY KEY (`id`) USING BTREE,
INDEX `creator` (`creator`) USING BTREE
)COLLATE='utf8mb3_general_ci';
ALTER TABLE `qs_shutters`
ADDCOLUMN IF NOTEXISTS `enable_pin` TINYINT(1) NOT NULLDEFAULT0 AFTER `gang_grades`,
ADDCOLUMN IF NOTEXISTS `pin_code` VARCHAR(10) NULLDEFAULTNULL AFTER `enable_pin`,
ADDCOLUMN IF NOTEXISTS `pin_length` TINYINT NOT NULLDEFAULT4 AFTER `pin_code`;
Columns
Hold
name · model · coords · open_offset
What the shutter is called, which model it uses, where it stands and how far it rolls up.
interact_points · blip
Every interaction point with its distance and lockpick switch, and the map blip.
item · job · job_grades · gang · gang_grades
The access rules.
enable_pin · pin_code · pin_length
The keypad code, if the shutter has one.
is_closed · creator
Whether the shutter is currently up or down, and the identifier of the admin who created it.
Updating from an older version? Run the whole file again. CREATE TABLE IF NOT EXISTS leaves your shutters untouched and the ALTER TABLE adds the PIN columns when they are missing. The ADD COLUMN IF NOT EXISTS form is MariaDB syntax — on MySQL, see Common Errors.
The lockpick is an ordinary usable item called shutter_lockpick. Shutters Creator registers its use through your framework; your inventory only needs to know the item exists.
Add the item
Paste the definition for your inventory from Inventory Items.
Add the picture
Copy [img]/shutter_lockpick.png into your inventory's item image folder.
Keep the names matching
To use an item you already have — a generic lockpick, for example — set its name in Config.LockpickItem instead.
The creator is where shutters are placed and their access is decided, so it is admin-only. /shuttercreator asks your framework whether the player is staff:
Players in the admin or superadmin group. Set the group with ESX's own command, from the server console or as an existing admin:
bash
setgroup <server id> admin
Players with the admin or god permission, or allowed the command ace — which txAdmin admins already have. In server.cfg:
Shutters themselves are never configured in files — they are created in game. The files are for the server-wide behaviour and the bridges:
File
Contents
config/main.lua
The language, target, lockpick item and minigame, the shutter animation, sounds, debug and the models offered in the creator.
locales/*.json
Every text the script shows, one file per language.
custom/esx/ · custom/qb/
The framework bridges: the admin check, jobs, gangs and items.
custom/client.lua
Notifications, the 3D prompt and the HUD — where another notification or text UI resource is plugged in.
server/custom/inventory/
One bridge per inventory: where the creator reads item names and pictures from.
The values worth reviewing first:
lua
Config.Locale = 'en'-- one of the 27 files in locales/
Config.UseTarget = false-- true: ox_target / qb-target instead of the E prompt
Config.LockpickItem = 'shutter_lockpick'-- the usable lockpick item
Config.LockpickMinigame = true-- ox_lib skill check before a pick succeeds
Config.AnimDuration = 3000-- how long a shutter takes to roll, in ms
Config.Debug = true-- verbose console output: turn it off on a live server
Config.Debug ships as true so the first setup is easy to follow in the console. Set it to false once everything works. Every option is described in Usage → Configuration Reference.
After completing the installation, restart your server and read the console. The server — and each client, in the F8 console — confirms which framework bridge it loaded:
bash
[INFO] Successfully loaded the framework. esx
If the server instead repeats Using standalone inventory…, your inventory was not detected — move it above ensure qs-shutter-creator. Then join your server and work through the first loop:
Open the creator
Type /shuttercreator as an admin. On a fresh server the list on the left is empty.
Create a shutter
Press Create shutter, name it, pick a model, press Select and place it over a doorway, add an interaction point, and save. Usage walks through every step.
Open it
Walk to the interaction point and press E at Press [E] to enter the shutter. The shutter rolls up for everyone nearby; press again to bring it down.
Nothing needs a restart from here on. Every shutter, its access rules and its blip are created, edited and deleted in game, and every player sees the change straight away.