Before You Begin#
Before installing Theme Park, make sure your server meets the minimum requirements. Two libraries, OneSync and the two asset resources that come in the download are mandatory; everything else is optional and detected on its own.
Requirement | Status | Notes |
|---|---|---|
ox_lib | Required | Callbacks, the settings panel and notifications. |
oxmysql | Required | The settings and the dart targets live in the database. The tables create themselves. |
OneSync | Required | Every ride is driven by the server. |
| Required (included) | The park map, the darts booth, the darts and the plush toys. |
| Required (included) | The animated rides: bumper cars and their ticket booth, drop tower, sky drop, flying swings and their lights. |
Framework | Optional | ESX, QBCore or Qbox — auto-detected. Without one, every player gets a wallet of their own. |
Inventory | Optional | Only for darts prizes that pay an item. Without one, the framework's own inventory is used. |
| Optional | Notifications and a HUD that hides itself while the panel is open. Without it, ox_lib notifications are used. |
Each layer is detected by looking for started resources in this order — the first one found wins:
Layer | Detection order |
|---|---|
Framework |
|
Inventory |
|
Notifications |
|
Downloading Theme Park#
After purchasing Theme Park, 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 Theme Park.
After extracting the download, you should have these three folders:
qs-themepark/ -- the script
├── config/ -- what you may edit before the server starts
├── custom/ -- framework bridges and notifications (open)
├── client/custom/ -- the HUD (open)
├── server/custom/ -- darts item prizes per inventory (open)
├── locales/ -- one JSON file per language
└── sql/database.sql
qs_amusement_park/ -- the park map and the darts booth
└── stream/
qs_amusement_park_anim_prop/ -- the animated rides
└── stream/Keep every file of the two asset resources directly inside their
stream/folder, with no subfolders. Their models are registered fromstream/*.ytyp, which does not look into subfolders: a.ytypmoved into one stops loading and its rides turn invisible.
Installing the Resource#
Move the three folders into your server's resources directory. They can live anywhere inside it, including a category folder:
resources/
└── [themepark]/
├── qs-themepark/
├── qs_amusement_park/
└── qs_amusement_park_anim_prop/Once copied, open your server.cfg and make sure every dependency — and everything it should detect — starts before Theme Park:
ensure ox_lib
ensure oxmysql
# Framework
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Inventory (only for darts item prizes)
ensure ox_inventory
# Theme Park: the two asset resources first
ensure qs_amusement_park
ensure qs_amusement_park_anim_prop
ensure qs-themepark
# Who can open /themeparkconfig
add_ace group.admin command.themeparkconfig allow
# Who can place dart targets (the admin and superadmin groups already can)
add_ace group.admin qs-themepark.build allowThe loading order matters. Detection only sees resources that are already started, so a framework that starts after Theme Park is not found. On purpose, the park does not fall back to standalone money in that case: payments stay blocked and the console says which resource to move up.
The Database#
There is nothing to import. Theme Park creates its own tables on the first start. sql/database.sql holds the same tables if you prefer to create them yourself.
Table | Holds |
|---|---|
| Every value saved from the settings panel, and the darts prize tiers. |
| The dart targets placed with the creator: the board, its size and the circle it is thrown from. |
| Marks of one-time jobs, such as the first copy of the starter dart targets. |
| Standalone servers only: each player's wallet, by license. |
On the first start the six starter dart targets — three on each side of the booth — are copied from
config/darts.luainto the database, once. From then on the file is not read: targets are added and removed in game. Keep it as a backup or delete it.
Permissions#
Two things are for staff only: the settings panel and the dart target creator. The server console can always do both.
Opened by players with the ace command.themeparkconfig, and nobody else:
add_ace group.admin command.themeparkconfig allowA player without it who types the command is told so, and the server console names them and prints the line to add.
Opened by a player with one of:
the ace
qs-themepark.build;the group
adminorsuperadmin— as an ESX group, agroup.<name>ace, or a QBCore / Qbox permission.
A player given the ace or the group while online can use the creator on their next try.
Configuring the Resource#
Almost nothing is configured in files. The language, the blip, the prices, the boarding key, which rides run, their waits, the darts and their prizes are all set in game with /themeparkconfig — see Usage. config/config.lua only holds what must be known before the server starts:
-- Extra console output. Leave it false on a live server.
Config.Debug = false
-- Your framework: the first started resource wins. Add a line
-- if you renamed the resource.
local frameworks = {
{ ['qbx_core'] = 'qb' },
{ ['es_extended'] = 'esx' },
{ ['qb-core'] = 'qb' },
}
-- Your inventory, for darts item prizes. Never run two.
local inventories = {
{ ['ox_inventory'] = 'ox_inventory' },
{ ['qs-inventory'] = 'qs-inventory' },
-- codem-inventory, core_inventory, tgiann-inventory, qb-inventory
}
-- Only if you renamed the asset resources.
Config.AssetResource = 'qs_amusement_park_anim_prop'
Config.DartsAssetResource = 'qs_amusement_park'The other open files are covered in Integrations.
File | Contents |
|---|---|
| Debug, framework and inventory detection, the asset resource names. |
| How a message reaches the player: qs-interface, then ox_lib, then the GTA feed. |
| Money, player name, group and job for each framework, and the start money of a standalone wallet. |
| Item names, the room check and the delivery of darts item prizes. |
| Hiding and bringing back the radar, the GTA HUD and your HUD resource. |
| Every text of the script and the panel, one file per language. |
Ride positions, speeds, physics, lights, cameras and the darts difficulty are fixed and tuned for this map. They are not settings: changing them would put the rides out of line with the buildings streamed around them.
Verifying the Installation#
After completing the installation, restart your server and read the server console. A healthy start looks like this:
[qs-themepark] framework resolved: esx, inventory: ox_inventory
[qs-themepark] server adapter loaded: esx
[qs-themepark] loaded 0 saved settings, 32 fields in total
You are using the latest version of qs-themepark!standalone in the first line means no framework was found running. About ten seconds after the start the script also checks the two asset resources and names the one that is not started.
Then join your server and work through the first loop:
Pick the language
A fresh install speaks Spanish. Type
/themeparkconfig, open General, choose your language and save. While you are there, set the notification title and, under Map blip, the name of the park in the map legend — both ship in Spanish too.Take a ride
Follow the blip to Del Perro Pier and walk up to the Ferris wheel platform. Press E when the help text appears: the wheel brakes for a free cabin and you get on.
Play a game of darts
Stand in the yellow circle in front of a target at the booth, press E, hold the left mouse button to charge and release to throw.
Nothing needs a restart from here on, except switching a ride on or off and renaming a command. The panel marks those fields with Needs restart.



