Before You Begin#
Before installing Starter Pack, make sure your server meets the minimum requirements. Only two resources are mandatory; everything else is detected on its own when it is running.
Requirement | Status | Notes |
|---|---|---|
| Required | Database access. The two tables install themselves. |
| Required | Callbacks and shared helpers. |
Framework | Recommended |
|
Inventory | Optional | Eleven are supported. Without one, items go through the framework's own inventory. |
Target / Text UI | Optional | For the world peds. Without one, a floating |
Garage script | Optional | Only for starter vehicles. Cars are written to your framework's own vehicle table, so any garage that reads it shows them. |
Vehicle keys | Optional | Only if your keys script does not hand out keys for owned cars by itself. |
Each layer is detected by looking at what is already running, in this order — the first one found wins:
Layer | Detection order |
|---|---|
Framework |
|
Inventory |
|
Target |
|
Text UI |
|
Every optional integration steps aside quietly when it is missing. Integrations has the details for each one.
github.comReleases · overextended/oxmysqlMySQL resource for FXServer.github.comReleases · overextended/ox_libA FiveM resource and script library for Lua and JS.Downloading Starter Pack#
After purchasing Starter Pack, 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 Starter Pack.
After extracting the download, you should have the following:
[starterpack]/
├── qs-starterpack/ -- the resource itself
│ ├── config/ -- main.lua, what you may edit
│ ├── client/custom/ -- client hooks (editable)
│ ├── server/custom/ -- commands and Discord webhooks (editable)
│ ├── locales/ -- 21 languages
│ └── html/ -- the interface, already built
├── [items]/ -- the starter-pack item for each inventory
├── [img]/ -- starterpack.png, the item's icon
└── [sql]/
├── install.sql -- manual schema, only if auto-install is blocked
└── presets.sql -- optional: six ready-made packsThe resource folder must be named
qs-starterpack. Its exports, its interface callbacks and the ox_inventory item export (qs-starterpack.UseItem) all use that name, so a renamed copy stops answering them.
Installing the Resource#
Move the qs-starterpack folder into your server's resources directory. It can live anywhere inside it, including a category folder:
resources/
└── [qs]/
└── qs-starterpack/Then open your server.cfg and make sure every dependency — and everything it should detect — starts before Starter Pack:
ensure oxmysql
ensure ox_lib
# Framework
ensure qb-core
# ensure qbx_core
# ensure es_extended
# Inventory, target, text UI, garages, keys
ensure ox_inventory
ensure ox_target
# ensure qs-textui
# ensure jg-advancedgarages
ensure qs-starterpackThe loading order matters. Detection only sees resources that are already started, so an inventory or target that starts after Starter Pack is not found.
The Database#
There is no SQL file to import. Starter Pack waits for oxmysql to connect, then creates its own two tables on first start. It owns no vehicle table: starter cars are written into your framework's own player_vehicles or owned_vehicles.
Table | Holds |
|---|---|
| Everything built in the admin panel — packs, items, vehicles, theme, logo and peds — as one record per server. |
| Every claim: who, which pack, which gender and when. A unique index on the claim period is what makes a second claim impossible. |
Both tables are keyed by a server key taken from your
sv_licenseKey(orsv_hostnamewhen there is none), so several servers can share one database without seeing each other's packs or claims. Changing the license key therefore starts that server on a fresh, empty configuration — the old rows are still there under the old key.
The Starter Pack Item#
Optional. Players can open the picker by using a starterpack item from their inventory — handy for handing one to every new character from your spawn or character-creation script. The item is only consumed on a successful claim, so closing the window or hitting a full inventory keeps it. Its name is Config.Player.Item; set it to '' to switch the item off.
Add the item to your inventory
The
[items]folder holds a ready-made line for every supported inventory. The most common ones:Add to
ox_inventory/data/items.lua. Theexportline is what makes it usable — without it ox_inventory never tells Starter Pack the item was used.lua ['starterpack'] = { label = 'Starter Pack', weight = 0, stack = false, close = true, description = 'Open it to claim your starter pack.', client = { image = 'starterpack.png', export = 'qs-starterpack.UseItem', }, },Add to
qb-core/shared/items.lua. The item is registered as usable automatically.lua starterpack = { name = 'starterpack', label = 'Starter Pack', weight = 0, type = 'item', image = 'starterpack.png', unique = true, useable = true, shouldClose = true, description = 'Open it to claim your starter pack.' },Run against your database. The item is registered as usable automatically.
sql INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('starterpack', 'Starter Pack', 0, 0, 1);Add to your qs-inventory items list.
lua ['starterpack'] = { ['name'] = 'starterpack', ['label'] = 'Starter Pack', ['weight'] = 0, ['type'] = 'item', ['image'] = 'starterpack.png', ['unique'] = true, ['useable'] = true, ['shouldClose'] = true, ['description'] = 'Open it to claim your starter pack.' },codem-inventory, core_inventory, tgiann-inventory, ps-inventory, origen_inventory, ak47_inventory, ak47_qb_inventory and linden_inventory each have their own file in
[items], named after the inventory. Paste its line into that inventory's item list.Copy the icon
Copy
[img]/starterpack.pnginto your inventory's image folder —ox_inventory/web/imagesfor ox,html/imagesfor qb-inventory and most others.Restart and check the console
With ox_inventory the console confirms
Starter pack item ready in ox_inventory. If the item is missing or has noexportline, a red banner prints the exact block to paste, and repeats every five minutes until it is fixed.
Preset Packs (Optional)#
A fresh install starts with no packs — you build them in the admin panel. If you would rather start from something, [sql]/presets.sql fills in three packs for each gender, with their own background photos:
Pack | Contents |
|---|---|
LEGAL | $3,000 cash, ID card, phone, driver licence, two repair kits, three water bottles. |
CIVILIAN | $1,500 cash, ID card, phone, five water bottles, five sandwiches. |
ILLEGAL | $5,000 dirty money, ID card, phone, two lockpicks, a baseball bat, three water bottles. Featured as "Most popular". |
Start the server once
The presets update the configuration record, and that record is only created on the first start. Run the file before that and it changes nothing.
Run presets.sql
Import it in HeidiSQL or your MySQL client. Names, descriptions and icons of the items are read from your inventory at run time, so the same file works on QBCore, Qbox, ESX and ox_inventory.
Open the picker
No restart needed:
/starterpackreads the database every time it opens.
Claiming Admin Access#
The admin panel is where packs are built, so it is behind an admin check that runs on the server — for opening it and again for every save. Any one of these routes makes a player an admin:
The usual route. Anyone in your group.admin already passes, because the default server.cfg grants that group the command ace. To grant Starter Pack alone, use its own ace:
add_ace identifier.license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx qs-starterpack.admin allowRestart the resource after adding it. A different admin group can be set in Config.Admin.AceGroup.
A plain whitelist in config/main.lua. It accepts any identifier the player is known by — license:, discord:, steam:, fivem:.
Config.Admin = {
AceGroup = 'group.admin',
Command = 'starteradmin',
Identifiers = {
'license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'discord:123456789012345678',
},
}Automatic, nothing to configure. QBCore and Qbox admin, god and superadmin, and ESX admin, superadmin and mod are recognised as admins.
When somebody is refused, the server console prints Permission denied: <name> (id <n>) tried to use /starteradmin but is not an admin.
Configuring the Resource#
The packs themselves are never configured in files — they live in the database and are built in /starteradmin. The files are for the plumbing around them:
File | Contents |
|---|---|
| Language, brand name, interaction mode, notifications, cooldown, money accounts, ID items, admin access, the ways in, and starter-vehicle garages. |
| The three commands — rename or extend them here. |
| Discord logging, one URL per event. |
| Hooks: allow or refuse an open, run code after it, and a custom notification. |
| The messages sent from the server: not admin, already claimed, items granted, vehicle delivered. |
The values worth reviewing first:
Config.Locale = 'en' -- 21 languages, see Usage
Config.BrandName = 'QUASAR STARTER PACK' -- shown in the interface and notifications
Config.Cooldown = 'lifetime' -- 'lifetime' | 'weekly' | 'monthly'
Config.CooldownScope = 'character' -- 'character' | 'account'
Config.Notification = 'original' -- see Integrations
Config.Player = {
Command = 'starterpack', -- the player's command
OpenKey = nil, -- e.g. 'F7'; players can still bind it themselves
PedOpen = true, -- world peds open the picker
Item = 'starterpack', -- '' to disable the item
}
Config.CooldownandConfig.CooldownScopeare checked on start. A typo there stops the resource with a message naming the value, rather than letting players claim more often than you meant.
Verifying the Installation#
Restart your server and read the boot banner in the console. It says what was detected:
[qs-starterpack] ✦ Quasar Starter Pack v1.0.15 │ framework qb │ inventory ox │ database ready
[qs-starterpack] ✓ You are running the latest version. Enjoy!standalone or default means nothing was found for that layer — if you do have that resource, move it above ensure qs-starterpack. database pending only means the database was still connecting two seconds after start; it is a problem only if a connection-failed message follows.
Then join your server and work through the first loop:
Build a pack
/starteradminopens the creator. Pick a gender, press Add Pack, name it and add an item. It saves on its own.Claim it
/starterpack, choose the same gender, and hold the claim button on your pack. The items arrive and a notification confirms it.Reset yourself and test again
/starterclearwipes your own claim so you can repeat the test. Usage covers the rest of the panel.



