# Table of Contents - [Qbox Documentation](#qbox-documentation) - [Archive | Qbox Documentation](#archive-qbox-documentation) - [Blog | Qbox Documentation](#blog-qbox-documentation) - [Authors | Qbox Documentation](#authors-qbox-documentation) - [How fxmanifests Work with FiveM | Qbox Documentation](#how-fxmanifests-work-with-fivem-qbox-documentation) - [Search the documentation | Qbox Documentation](#search-the-documentation-qbox-documentation) - [How to install custom weapons in Qbox using ox_inventory | Qbox Documentation](#how-to-install-custom-weapons-in-qbox-using-ox-inventory-qbox-documentation) - [How to Install FiveM Server on Linux | Qbox Documentation](#how-to-install-fivem-server-on-linux-qbox-documentation) - [How to Set Up VSCode for FiveM and RedM Lua Scripting | Qbox Documentation](#how-to-set-up-vscode-for-fivem-and-redm-lua-scripting-qbox-documentation) - [Navigating Qbox Efficiently | Qbox Documentation](#navigating-qbox-efficiently-qbox-documentation) - [Contributing Guidelines | Qbox Documentation](#contributing-guidelines-qbox-documentation) - [Converting from QBCore to Qbox | Qbox Documentation](#converting-from-qbcore-to-qbox-qbox-documentation) - [Developer's Guide | Qbox Documentation](#developer-s-guide-qbox-documentation) - [Frequently Asked Questions | Qbox Documentation](#frequently-asked-questions-qbox-documentation) - [Installation Guide | Qbox Documentation](#installation-guide-qbox-documentation) - [Release Readiness Guidelines | Qbox Documentation](#release-readiness-guidelines-qbox-documentation) - [Server Events | Qbox Documentation](#server-events-qbox-documentation) - [Server Exports | Qbox Documentation](#server-exports-qbox-documentation) - [Client Callbacks | Qbox Documentation](#client-callbacks-qbox-documentation) - [Convars | Qbox Documentation](#convars-qbox-documentation) - [Getting Started | Qbox Documentation](#getting-started-qbox-documentation) - [πŸ–ΌοΈ CDN | Qbox Documentation](#-cdn-qbox-documentation) - [Discord Rich Presence | Qbox Documentation](#discord-rich-presence-qbox-documentation) - [Convars | Qbox Documentation](#convars-qbox-documentation) - [Commands | Qbox Documentation](#commands-qbox-documentation) - [Server Exports | Qbox Documentation](#server-exports-qbox-documentation) - [Client Exports | Qbox Documentation](#client-exports-qbox-documentation) - [Client Exports | Qbox Documentation](#client-exports-qbox-documentation) - [Commands | Qbox Documentation](#commands-qbox-documentation) - [Client Events | Qbox Documentation](#client-events-qbox-documentation) - [Server Exports | Qbox Documentation](#server-exports-qbox-documentation) - [LB Phone | Qbox Documentation](#lb-phone-qbox-documentation) - [Hooks | Qbox Documentation](#hooks-qbox-documentation) - [Server Events | Qbox Documentation](#server-events-qbox-documentation) - [Server Exports | Qbox Documentation](#server-exports-qbox-documentation) - [Custom Permissions | Qbox Documentation](#custom-permissions-qbox-documentation) - [Inviting People | Qbox Documentation](#inviting-people-qbox-documentation) - [Getting Started | Qbox Documentation](#getting-started-qbox-documentation) - [GTA V Map | Qbox Documentation](#gta-v-map-qbox-documentation) - [πŸ”« Weapon Audio | Qbox Documentation](#-weapon-audio-qbox-documentation) - [MultiCharacter | Qbox Documentation](#multicharacter-qbox-documentation) - [Prevent Usage | Qbox Documentation](#prevent-usage-qbox-documentation) - [Installation | Qbox Documentation](#installation-qbox-documentation) - [πŸ—ƒοΈ Loki Logging | Qbox Documentation](#-loki-logging-qbox-documentation) - [Installation | Qbox Documentation](#installation-qbox-documentation) - [Logging Functionality | Qbox Documentation](#logging-functionality-qbox-documentation) - [Client Exports | Qbox Documentation](#client-exports-qbox-documentation) - [🎰 Casino Slots | Qbox Documentation](#-casino-slots-qbox-documentation) - [Required Item | Qbox Documentation](#required-item-qbox-documentation) - [Shared Exports | Qbox Documentation](#shared-exports-qbox-documentation) - [PlayerData | Qbox Documentation](#playerdata-qbox-documentation) - [Jobs | Qbox Documentation](#jobs-qbox-documentation) - [Hooks | Qbox Documentation](#hooks-qbox-documentation) - [Players | Qbox Documentation](#players-qbox-documentation) - [Gangs | Qbox Documentation](#gangs-qbox-documentation) - [Logger | Qbox Documentation](#logger-qbox-documentation) - [vehicle | Qbox Documentation](#vehicle-qbox-documentation) - [Lib | Qbox Documentation](#lib-qbox-documentation) - [Server Lib | Qbox Documentation](#server-lib-qbox-documentation) - [Client Lib | Qbox Documentation](#client-lib-qbox-documentation) - [Shared Lib | Qbox Documentation](#shared-lib-qbox-documentation) - [Server Exports | Qbox Documentation](#server-exports-qbox-documentation) --- # Qbox Documentation [Skip to main content](https://docs.qbox.re/#__docusaurus_skipToContent_fallback) On this page Qbox is a FiveM roleplay framework created on September 27, 2022. Starting as a QBCore fork, its goal was improving upon QBCore while maintaining backwards compatibility. Today this framework strives to be much greater, and utilizes [overextended's resources](https://github.com/CommunityOx) to achieve its goals. Read here We are however not affiliated with the Overextended team. They are their own entity and we simply utilize their resources. The name Qbox was simply a derivative from the name Qbus. It just so happens to have the term "ox" in it. Support & Questions[​](https://docs.qbox.re/#support--questions "Direct link to Support & Questions") ------------------------------------------------------------------------------------------------------ Support for Qbox is provided by the community in the support channels of the [Qbox Discord](https://discord.gg/qbox) . Luckily, Qbox benefits from a great community with varied experience. We encourage everyone to help each other in a friendly and respectable manner. Converting from QBCore[​](https://docs.qbox.re/#converting-from-qbcore "Direct link to Converting from QBCore") ---------------------------------------------------------------------------------------------------------------- Already have a server that uses QBCore? No worries! Qbox has backwards-compatibility for almost all QBCore scripts, with a few exceptions (learn more in the [FAQ](https://docs.qbox.re/faq#will-my-qbcore-scripts-work-with-qbox) ). Planning on converting to Qbox anyway to be able to utilize its new and modern functions and features? Learn how to convert your resources to Qbox in [Converting from QBCore](https://docs.qbox.re/converting) . Note for Developers[​](https://docs.qbox.re/#note-for-developers "Direct link to Note for Developers") ------------------------------------------------------------------------------------------------------- Planning on utilizing qbx\_core in your next resource? Make sure to read the [Developer's Guide](https://docs.qbox.re/developers) to learn about principles that make you avoid bad practices and help you in having a better developer expetience. Contributing to Qbox[​](https://docs.qbox.re/#contributing-to-qbox "Direct link to Contributing to Qbox") ---------------------------------------------------------------------------------------------------------- Contributions are always welcome, but we prefer quality over quantity! Please read our [contributing guidelines](https://qbox-project.github.io/contributors) to learn how best to contribute. Frequently Asked Questions[​](https://docs.qbox.re/#frequently-asked-questions "Direct link to Frequently Asked Questions") ---------------------------------------------------------------------------------------------------------------------------- Check out the [FAQ](https://docs.qbox.re/faq) to learn more about Qbox. * [Support & Questions](https://docs.qbox.re/#support--questions) * [Converting from QBCore](https://docs.qbox.re/#converting-from-qbcore) * [Note for Developers](https://docs.qbox.re/#note-for-developers) * [Contributing to Qbox](https://docs.qbox.re/#contributing-to-qbox) * [Frequently Asked Questions](https://docs.qbox.re/#frequently-asked-questions) --- # Archive | Qbox Documentation [Skip to main content](https://docs.qbox.re/blog/archive#__docusaurus_skipToContent_fallback) ### 2025[​](https://docs.qbox.re/blog/archive#2025 "Direct link to 2025") * [March 26 - How to install custom weapons in Qbox using ox\_inventory](https://docs.qbox.re/blog/install-custom-weapons) * [April 19 - How to Set Up VSCode for FiveM and RedM Lua Scripting](https://docs.qbox.re/blog/vscode-setup) * [April 20 - How fxmanifests Work with FiveM](https://docs.qbox.re/blog/how-fxmanifests-work) * [June 17 - How to Install FiveM Server on Linux](https://docs.qbox.re/blog/linux-server-tutorial) * [September 5 - Navigating Qbox Efficiently](https://docs.qbox.re/blog/navigating) --- # Blog | Qbox Documentation [Skip to main content](https://docs.qbox.re/blog#__docusaurus_skipToContent_fallback) Working inside Qbox can sometimes feel overwhelming. Whether you need to remove a bugged item, locate a specific message, or figure out where certain data is stored, this guide will show you how to quickly find what you’re looking for. This comprehensive guide will walk you through setting up a complete FiveM server environment on a Linux machine (Ubuntu or Debian). We'll cover database setup, FiveM server installation, and automation using systemd services. An `fxmanifest.lua` is the backbone of any FiveM resource. It tells the server which files to load, what they do, and how they should be handledβ€”whether that's on the client, server, or both. Getting VSCode setup for FiveM/RedM scripting is actually really easy. The exentions listed in this blog automatically set most of that up for you! Below we will go over some suggested extensions and addons for VSCode. Installing and streaming a new weapon on your FiveM server is actually pretty simple. However, most people struggle to make this work with `ox_inventory`. This guide will also cover how to stream custom weapons on your server. --- # Authors | Qbox Documentation [Skip to main content](https://docs.qbox.re/blog/authors#__docusaurus_skipToContent_fallback) Authors ======= * [![ChatDisabled](https://github.com/ChatDisabled.png)](https://github.com/ChatDisabled) [ChatDisabled\ ------------](https://github.com/ChatDisabled) 1 Founder of the Qbox Project [](https://github.com/ChatDisabled "GitHub") * [![aj](https://github.com/ihyajb.png)](https://github.com/ihyajb) [aj\ --](https://github.com/ihyajb) 1 Contributor of the Qbox Project [](https://github.com/ihyajb "GitHub") * [![Scorpion](https://r2.fivemanage.com/image/Z9ftITFQ52WP.png)](https://github.com/Scorpion7162) [Scorpion\ --------](https://github.com/Scorpion7162) 1 Volunteer for the Qbox Project [](https://github.com/Scorpion7162 "GitHub") * [![ilomilo](https://i.imgur.com/ypvcHw9.png)](https://github.com/iloomilo) [ilomilo\ -------](https://github.com/iloomilo) 1 Full Stack Developer [](https://github.com/iloomilo "GitHub") * [![Codexis](https://github.com/CodexisPhantom.png)](https://github.com/CodexisPhantom) [Codexis\ -------](https://github.com/CodexisPhantom) 1 Volunteer for the Qbox Project [](https://github.com/CodexisPhantom "GitHub") --- # How fxmanifests Work with FiveM | Qbox Documentation [Skip to main content](https://docs.qbox.re/blog/how-fxmanifests-work#__docusaurus_skipToContent_fallback) An `fxmanifest.lua` is the backbone of any FiveM resource. It tells the server which files to load, what they do, and how they should be handledβ€”whether that's on the client, server, or both. `__resource.lua`[​](https://docs.qbox.re/blog/how-fxmanifests-work#__resourcelua "Direct link to __resourcelua") ----------------------------------------------------------------------------------------------------------------- In older resources, you might come across a file named `__resource.lua`. Before `fxmanifest.lua` existed, this was used to define how a resource behaves. It serves the same purpose but is now outdated and replaced by the fxmanifest system. How to Start an fxmanifest[​](https://docs.qbox.re/blog/how-fxmanifests-work#how-to-start-an-fxmanifest "Direct link to How to Start an fxmanifest") ----------------------------------------------------------------------------------------------------------------------------------------------------- When setting up an `fxmanifest.lua`, make sure the file is named exactly thatβ€”**fxmanifest.lua**β€”and is located in your resource folder. Here’s a quick look at what that should look like: ![File example](https://r2.fivemanage.com/image/49PUZpggNXt8.png) At a minimum, you need to define two things: * `fx_version` * `game` ### `fx_version` options:[​](https://docs.qbox.re/blog/how-fxmanifests-work#fx_version-options "Direct link to fx_version-options") * `cerulean` – Newest and most secure (recommended) * `bodacious` – Older * `adamant` – Legacy version ### `game` options:[​](https://docs.qbox.re/blog/how-fxmanifests-work#game-options "Direct link to game-options") * `gta5` – For FiveM (use this for Qbox) * `gta4` – For LibertyM (rarely used) * `rdr3` – For RedM * `common` – Works across games, but lacks access to game-specific natives (not recommended) Here’s a basic example: ![Basic fxmanifest](https://r2.fivemanage.com/image/wwP3TeercaC4.png) * * * Specifics of the Manifest[​](https://docs.qbox.re/blog/how-fxmanifests-work#specifics-of-the-manifest "Direct link to Specifics of the Manifest") -------------------------------------------------------------------------------------------------------------------------------------------------- ### Defining Client and Server Scripts[​](https://docs.qbox.re/blog/how-fxmanifests-work#defining-client-and-server-scripts "Direct link to Defining Client and Server Scripts") The `fxmanifest.lua` lets you define which scripts run on the client (the player’s game) and which run on the server (the host environment). #### Client Script Example:[​](https://docs.qbox.re/blog/how-fxmanifests-work#client-script-example "Direct link to Client Script Example:") client_script 'client.lua' If your script is inside a folder: client_script 'foldername/client.lua' #### Server Script Example:[​](https://docs.qbox.re/blog/how-fxmanifests-work#server-script-example "Direct link to Server Script Example:") server_script 'server.lua' ### Defining Multiple Scripts[​](https://docs.qbox.re/blog/how-fxmanifests-work#defining-multiple-scripts "Direct link to Defining Multiple Scripts") If you want to load multiple files: client_scripts { 'client.lua', 'client2.lua'} Or use a wildcard to include everything in a folder: client_scripts { 'clientfolder/*.lua'} info * The `*` wildcard includes all `.lua` files in a folder. * You can use wildcards with folders too. * More details in the [Resource Manifest documentation](https://docs.fivem.net/docs/scripting-reference/resource-manifest/resource-manifest/) * * * Shared Scripts[​](https://docs.qbox.re/blog/how-fxmanifests-work#shared-scripts "Direct link to Shared Scripts") ----------------------------------------------------------------------------------------------------------------- Shared scripts are loaded by both the client and the server. These are typically used for configs or utility files. shared_script 'config.lua'-- Or multiple files:shared_scripts { 'config.lua', 'shared_utils.lua'} * * * Dependencies[​](https://docs.qbox.re/blog/how-fxmanifests-work#dependencies "Direct link to Dependencies") ----------------------------------------------------------------------------------------------------------- ### Hard Dependencies[​](https://docs.qbox.re/blog/how-fxmanifests-work#hard-dependencies "Direct link to Hard Dependencies") Hard dependencies ensure a resource won't start unless certain conditions or resources are met. dependencies { '/server:4500', -- Requires server build 4500 or higher '/policy:subdir_file_mapping', -- Requires server key permission '/onesync', -- Requires OneSync '/gameBuild:h4', -- Requires game build 2189 or higher '/native:0xE27C97A0', -- Requires support for this native 'ox_lib' -- Requires ox_lib to be started} info If any of these are missing, the resource **will not start.** ### Soft Dependencies[​](https://docs.qbox.re/blog/how-fxmanifests-work#soft-dependencies "Direct link to Soft Dependencies") Soft dependencies are optionalβ€”if the resource is missing, your script might throw an error, but it will still run. Defined like this: shared_script '@ox_lib/init.lua' * * * Files[​](https://docs.qbox.re/blog/how-fxmanifests-work#files "Direct link to Files") -------------------------------------------------------------------------------------- Use the `files` section to include additional files like JSON, images, or configs: files { 'data/main.json', 'config.ts'} * * * Vehicles in a Manifest[​](https://docs.qbox.re/blog/how-fxmanifests-work#vehicles-in-a-manifest "Direct link to Vehicles in a Manifest") ----------------------------------------------------------------------------------------------------------------------------------------- To define vehicle-related files, just tell the manifest what each file does: fx_version 'cerulean'game 'gta5'data_file 'HANDLING_FILE' 'data/**/handling.meta'data_file 'VEHICLE_METADATA_FILE' 'data/**/vehicles.meta'data_file 'CARCOLS_FILE' 'data/**/carcols.meta'data_file 'VEHICLE_VARIATION_FILE' 'data/**/carvariations.meta'files { 'data/**/*.meta'} Wildcards like `**` allow you to include files across subdirectories. * * * Other Options[​](https://docs.qbox.re/blog/how-fxmanifests-work#other-options "Direct link to Other Options") -------------------------------------------------------------------------------------------------------------- You can also define extra metadata for documentation or internal use: author 'John Doe 'description 'Example resource'version '1.0.0'-- Scripts to runclient_scripts { 'client.lua', 'client_two.lua'}server_script 'server.lua'-- Custom metadatamy_data 'one' { two = 42 }my_data 'three' { four = 69 }-- Alternate syntaxmy_data('nine')({ ninety = "nein" })-- Arbitrary metadata keys are allowedpizza_topping 'pineapple' * * * * [`__resource.lua`](https://docs.qbox.re/blog/how-fxmanifests-work#__resourcelua) * [How to Start an fxmanifest](https://docs.qbox.re/blog/how-fxmanifests-work#how-to-start-an-fxmanifest) * [`fx_version` options:](https://docs.qbox.re/blog/how-fxmanifests-work#fx_version-options) * [`game` options:](https://docs.qbox.re/blog/how-fxmanifests-work#game-options) * [Specifics of the Manifest](https://docs.qbox.re/blog/how-fxmanifests-work#specifics-of-the-manifest) * [Defining Client and Server Scripts](https://docs.qbox.re/blog/how-fxmanifests-work#defining-client-and-server-scripts) * [Defining Multiple Scripts](https://docs.qbox.re/blog/how-fxmanifests-work#defining-multiple-scripts) * [Shared Scripts](https://docs.qbox.re/blog/how-fxmanifests-work#shared-scripts) * [Dependencies](https://docs.qbox.re/blog/how-fxmanifests-work#dependencies) * [Hard Dependencies](https://docs.qbox.re/blog/how-fxmanifests-work#hard-dependencies) * [Soft Dependencies](https://docs.qbox.re/blog/how-fxmanifests-work#soft-dependencies) * [Files](https://docs.qbox.re/blog/how-fxmanifests-work#files) * [Vehicles in a Manifest](https://docs.qbox.re/blog/how-fxmanifests-work#vehicles-in-a-manifest) * [Other Options](https://docs.qbox.re/blog/how-fxmanifests-work#other-options) --- # Search the documentation | Qbox Documentation [Skip to main content](https://docs.qbox.re/search#__docusaurus_skipToContent_fallback) Search the documentation ======================== [](https://www.algolia.com/) --- # How to install custom weapons in Qbox using ox_inventory | Qbox Documentation [Skip to main content](https://docs.qbox.re/blog/install-custom-weapons#__docusaurus_skipToContent_fallback) Installing and streaming a new weapon on your FiveM server is actually pretty simple. However, most people struggle to make this work with `ox_inventory`. This guide will also cover how to stream custom weapons on your server. Streaming custom weapons[​](https://docs.qbox.re/blog/install-custom-weapons#streaming-custom-weapons "Direct link to Streaming custom weapons") ------------------------------------------------------------------------------------------------------------------------------------------------- Generally, the act of adding custom assets to your server is called "streaming" because all the textures and 3D models are placed in a `stream` folder. This is why you will often see people asking, "How do I stream x?" ### Finding an example resource[​](https://docs.qbox.re/blog/install-custom-weapons#finding-an-example-resource "Direct link to Finding an example resource") Now let's find a suitable resource. You can either search the official [Cfx.re forums](https://forum.cfx.re/search?q=%23releases%20%20tags%3Aweapons%2Cweapon) or browse modding websites like [GTA5-Mods](https://www.gta5-mods.com/weapons) . For this guide, we will be using the [LWRC M6IC](https://www.gta5-mods.com/weapons/modular-lwrc-m6ic) made by [FluffyPlays22](https://www.gta5-mods.com/users/FluffyPlays22) . Why? Because the creator used a program known as [vWeaponsToolkit](https://forum.cfx.re/t/tool-vweaponstoolkit-create-addon-weapons-with-ease/4733757) , which ensures that the creator's assets are correctly registered and streamed to FiveM. We can verify this with the following: * A separate folder containing all the contents along with an `fxmanifest.lua` file. This ensures FiveM recognizes the folder as a resource. * All [asset-related files](https://rage.re/t/rage-format-names-glossary/28#list-of-known-formats-2) in the `stream` folder: * `*.ytd` for textures * `*.ydr` for 3D models * All `*.meta` files, which are necessary to inform the GTA engine how to handle the weapon: * `weapons.meta` for information related to the weapon itself (weapon name, ammo type, audio item, etc.) * `weaponanimations.meta` so the game knows which animation to play for certain actions * `weaponarchetypes.meta` to link the correct texture (`.ytd`) files to the weapon * `weaponcomponents.meta` to register additional components like scopes, silencers, etc.β€”that is, attachments that determine which 3D model (`.ydr`) to use and where to position it on the weapon * `pedpersonality.meta` to detail how certain [ped models](https://docs.fivem.net/docs/game-references/ped-models/) behave when using the weapon * Everything properly linked in the `fxmanifest.lua` file ### Adding the resource to your server[​](https://docs.qbox.re/blog/install-custom-weapons#adding-the-resource-to-your-server "Direct link to Adding the resource to your server") Now that we know this works properly in FiveM, let's add it to our `resources` folder. Since you will likely have more than one weapon, create a new folder called `[weapons]` (with brackets). The brackets ensure that FXServer recognizes this folder as a category, so it will load all folders inside the category as long as they contain an `fxmanifest.lua` file. info For additional information on this matter read the [FiveM documentation](https://docs.fivem.net/docs/scripting-manual/introduction/introduction-to-resources/) . Knowing this lets make the following folder structure. resources/β”œβ”€β”€ [qbx]β”œβ”€β”€ [weapons]/β”‚ └── m6ic/β”‚ β”œβ”€β”€ stream/β”‚ β”‚ β”œβ”€β”€ *.ydrβ”‚ β”‚ └── *.ytdβ”‚ β”œβ”€β”€ meta/β”‚ β”‚ └── *.metaβ”‚ β”œβ”€β”€ cl_weaponNames.luaβ”‚ └── fxmanifest.lua└── [standalone] And don't forget to add `ensure [weapons]` to your `server.cfg` file or any other `.cfg` file that gets read. If you did everything correctly, there are a few indicators to make sure that FXServer recognizes the resource. * The console will show that the resource is being loaded. In this case it will even give us a warning about the physical memory size of the texture dictionary file ![Console output](https://docs.qbox.re/assets/images/console-information-1-2d43921a1c6e7e5992dae8798c0e86b2.png) * In txAdmin under the resource tab, we will see that the resource is started ![txAdmin resource tab](https://docs.qbox.re/assets/images/console-information-2-9e9d82fcd0cc18b9644bc8bebdaca2a9.png) ### Testing the weapon[​](https://docs.qbox.re/blog/install-custom-weapons#testing-the-weapon "Direct link to Testing the weapon") Better yet, use the following code to test whether the weapon works in-game! First, determine the weapon's name by browsing the `weapons.meta` file. Soon you’ll come across the `CWeaponInfo` entry; its first line shows the weapon nameβ€”in this case, `WEAPON_M6IC`. ![Weapon name](https://docs.qbox.re/assets/images/weapon-name-code-1a6293a838078ee0fd0a7bc37112f9d5.png) We will use this name in the following code. RegisterCommand('getweapon', function() ExecuteCommand('stop ox_inventory') Wait(150) local ped = PlayerPedId() GiveWeaponToPed(ped, GetHashKey('WEAPON_M6IC'), 250, false, true) SetCurrentPedWeapon(ped, GetHashKey('WEAPON_M6IC'), true)end) info We temporarily stop `ox_inventory` because it has security measures to prevent equipping weapons that are not registered in the inventory. This command is for testing purposes only. #### The weapon works![​](https://docs.qbox.re/blog/install-custom-weapons#the-weapon-works "Direct link to The weapon works!") ![Weapon in game](https://docs.qbox.re/assets/images/weapon-ingame-07e7ce591f4dce8d7f36c1c38cfb3257.png) For good measure, let's also test the components included with the resource. To do this, look in the `weaponcomponents.meta` file, specifically the "Name" entries. Fortunately, the naming scheme is self-explanatoryβ€”for example, `COMPONENT_M6IC_FLSH_02` is a flashlight attachment, etc. By reviewing the list, you can identify each attachment and apply it to the weapon. RegisterCommand('getweapon', function() ExecuteCommand('stop ox_inventory') Wait(150) local ped = PlayerPedId() GiveWeaponToPed(ped, GetHashKey('WEAPON_M6IC'), 250, false, true) SetCurrentPedWeapon(ped, GetHashKey('WEAPON_M6IC'), true) GiveWeaponComponentToPed(ped, GetHashKey('WEAPON_M6IC'), GetHashKey('COMPONENT_M6IC_CLIP_06')) GiveWeaponComponentToPed(ped, GetHashKey('WEAPON_M6IC'), GetHashKey('COMPONENT_M6IC_FLSH_02')) GiveWeaponComponentToPed(ped, GetHashKey('WEAPON_M6IC'), GetHashKey('COMPONENT_M6IC_SUPP_03')) GiveWeaponComponentToPed(ped, GetHashKey('WEAPON_M6IC'), GetHashKey('COMPONENT_M6IC_STOCK_05')) GiveWeaponComponentToPed(ped, GetHashKey('WEAPON_M6IC'), GetHashKey('COMPONENT_M6IC_FRAME_02'))end) ![Weapon with attachments](https://docs.qbox.re/assets/images/weapon-ingame-attachments-14d10635f4c21e6448995fcbde801fdb.png) Configuring ox\_inventory[​](https://docs.qbox.re/blog/install-custom-weapons#configuring-ox_inventory "Direct link to Configuring ox_inventory") -------------------------------------------------------------------------------------------------------------------------------------------------- Now that we know the weapon works, we can configure `ox_inventory` to work with both the weapon and its attachments. ### Adding the weapon[​](https://docs.qbox.re/blog/install-custom-weapons#adding-the-weapon "Direct link to Adding the weapon") Everything you need is in one file called `weapons.lua`β€”this is where all information regarding weapons, components, and ammo is stored. ox_inventory/└── data/ └── weapons.lua First thing you will see is the `Weapons` table. This is where all the weapons are stored. Remember how to find the weapon name of the weapon inside the `weapons.meta` file? We will be using that name here. Weapons = { ['WEAPON_M6IC'] = { label = 'LWRC M6IC', weight = 3300, durability = 0.03, ammoname = 'ammo-rifle2', },} And that's it! These six simple lines will ensure your weapon works with `ox_inventory`. Now, go in-game and test it out. /giveitem 1 WEAPON_M6IC 1 Remember that we assigned it the `ammo-rifle2` ammo type, which already exists in `ox_inventory`. /giveitem 1 ammo-rifle2 400 ![Weapon in inventory](https://docs.qbox.re/assets/images/weapon-in-inventory-ac73bd6e2b0d343aeb148e48b44b5d68.png) ### Adding components[​](https://docs.qbox.re/blog/install-custom-weapons#adding-components "Direct link to Adding components") Stay within the same `weapons.lua` file. Use **CTRL + F** and search for `Components` to find the table with all the components inside. ![Components table](https://docs.qbox.re/assets/images/search-vscode-cf40de896bdcbabbcde470a46823a136.png) Here, copy another entry. The key will be the name used with the `/giveitem` command, for example `m6ic_flashlight_01`. Then create an entry for each component. How do you know which component the item should apply? Check the weapon’s `weaponcomponents.meta` file for the registered componentsβ€”in this case, `COMPONENT_M6IC_FLSH_01`. If you did everything correctly your code should look like this. ['m6ic_flashlight_01'] = { label = 'Tactical Flashlight', weight = 120, type = 'flashlight', client = { component = { `COMPONENT_M6IC_FLSH_01`, }, usetime = 2500 }}, info One flashlight is black for the normal frame, while the other is tanned because the weapon includes a component (`COMPONENT_M6IC_FRAME_02`) to tint the frame. Now rinse and repeat for all the other components! * [Streaming custom weapons](https://docs.qbox.re/blog/install-custom-weapons#streaming-custom-weapons) * [Finding an example resource](https://docs.qbox.re/blog/install-custom-weapons#finding-an-example-resource) * [Adding the resource to your server](https://docs.qbox.re/blog/install-custom-weapons#adding-the-resource-to-your-server) * [Testing the weapon](https://docs.qbox.re/blog/install-custom-weapons#testing-the-weapon) * [Configuring ox\_inventory](https://docs.qbox.re/blog/install-custom-weapons#configuring-ox_inventory) * [Adding the weapon](https://docs.qbox.re/blog/install-custom-weapons#adding-the-weapon) * [Adding components](https://docs.qbox.re/blog/install-custom-weapons#adding-components) --- # How to Install FiveM Server on Linux | Qbox Documentation [Skip to main content](https://docs.qbox.re/blog/linux-server-tutorial#__docusaurus_skipToContent_fallback) This comprehensive guide will walk you through setting up a complete FiveM server environment on a Linux machine (Ubuntu or Debian). We'll cover database setup, FiveM server installation, and automation using systemd services. Prerequisites[​](https://docs.qbox.re/blog/linux-server-tutorial#prerequisites "Direct link to Prerequisites") --------------------------------------------------------------------------------------------------------------- Before we begin, make sure you have: * A fresh Ubuntu 20.04+ or Debian 11+ server (check [1of1servers](https://1of1servers.com/) ) * Root or sudo access * At least 4GB RAM and 20GB free disk space * A CPU with a minimum of 2 cores and a clock speed of at least 3 GHz. * Basic familiarity with Linux command line Step 1: System Updates and Dependencies[​](https://docs.qbox.re/blog/linux-server-tutorial#step-1-system-updates-and-dependencies "Direct link to Step 1: System Updates and Dependencies") -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- First, let's update the system and install essential packages: # Update package listssudo apt update && sudo apt upgrade -y# Install essential packagessudo apt install -y curl wget unzip tar jq Step 2: Database Setup (MariaDB)[​](https://docs.qbox.re/blog/linux-server-tutorial#step-2-database-setup-mariadb "Direct link to Step 2: Database Setup (MariaDB)") --------------------------------------------------------------------------------------------------------------------------------------------------------------------- ### Method 1: Native MariaDB Installation[​](https://docs.qbox.re/blog/linux-server-tutorial#method-1-native-mariadb-installation "Direct link to Method 1: Native MariaDB Installation") Install MariaDB directly on your server: # Install MariaDB serversudo apt install -y mariadb-server mariadb-client# Start and enable MariaDB servicesudo systemctl start mariadbsudo systemctl enable mariadb# Secure MariaDB installationsudo mysql_secure_installation During the secure installation process: 1. Set a strong root password 2. Remove anonymous users (Y) 3. Disallow root login remotely (Y) 4. Remove test database (Y) 5. Reload privilege tables (Y) Create a database for your FiveM server: # Login to MariaDBsudo mysql -u root -p# Create database and user (replace 'your_password' with a strong password)CREATE DATABASE fivem_server;CREATE USER 'fivem_user'@'localhost' IDENTIFIED BY 'your_password';GRANT ALL PRIVILEGES ON fivem_server.* TO 'fivem_user'@'localhost';FLUSH PRIVILEGES;EXIT; ### Method 2: Docker MariaDB Installation[​](https://docs.qbox.re/blog/linux-server-tutorial#method-2-docker-mariadb-installation "Direct link to Method 2: Docker MariaDB Installation") If you prefer using Docker: # Install Dockersudo sh <(curl -sSL https://get.docker.com)# Add your user to docker groupsudo usermod -aG docker $USER# Log out and back in, then run MariaDB containerdocker run -d \ --name fivem-mariadb \ --restart unless-stopped \ -e MYSQL_ROOT_PASSWORD=your_root_password \ -e MYSQL_DATABASE=fivem_server \ -e MYSQL_USER=fivem_user \ -e MYSQL_PASSWORD=your_password \ -p 3306:3306 \ -v mariadb_data:/var/lib/mysql \ mariadb:latest Step 3: FiveM Server Setup[​](https://docs.qbox.re/blog/linux-server-tutorial#step-3-fivem-server-setup "Direct link to Step 3: FiveM Server Setup") ----------------------------------------------------------------------------------------------------------------------------------------------------- ### Create Server Directory and User[​](https://docs.qbox.re/blog/linux-server-tutorial#create-server-directory-and-user "Direct link to Create Server Directory and User") # Create a dedicated user for FiveM (optional but recommended)sudo adduser fivem --disabled-login --gecos ""# Switch to the fivem usersudo su - fivem# Create server directorymkdir -p /home/fivem/servercd /home/fivem/server ### Create the Automated Server Script[​](https://docs.qbox.re/blog/linux-server-tutorial#create-the-automated-server-script "Direct link to Create the Automated Server Script") Create the server management script that automatically downloads the latest FiveM artifacts: nano /home/fivem/server.sh Add the following content: #!/bin/bashARTIFACTS_URL="https://artifacts.jgscripts.com/json"DOWNLOAD_DIR="/tmp/fivem_artifact"EXTRACT_DIR="/home/fivem/server"mkdir -p "$DOWNLOAD_DIR"LATEST_ARTIFACT=$(curl -s "$ARTIFACTS_URL" | jq -r '.linuxDownloadLink')if [ -z "$LATEST_ARTIFACT" ]; then echo "Failed to find the latest artifact." exit 1fiecho "Downloading the latest FiveM artifact..."wget -q -O "$DOWNLOAD_DIR/fx.tar.xz" "$LATEST_ARTIFACT"if [ $? -ne 0 ]; then echo "Failed to download the artifact." exit 1fimkdir -p "$EXTRACT_DIR"echo "Extracting fx.tar.xz..."tar -xJf "$DOWNLOAD_DIR/fx.tar.xz" -C "$EXTRACT_DIR"if [ $? -ne 0 ]; then echo "Failed to extract the artifact." exit 1fiecho "FiveM artifact successfully downloaded and extracted to $EXTRACT_DIR"rm -rf "$DOWNLOAD_DIR"echo "Starting FiveM server..."cd "$EXTRACT_DIR"if [ -f "run.sh" ]; then chmod +x run.sh ./run.shelse echo "run.sh not found in $EXTRACT_DIR." exit 1fi Make the script executable: chmod +x /home/fivem/server.sh The script is now set up to automatically download the latest artifacts and start the server. Step 4: Create Systemd Service[​](https://docs.qbox.re/blog/linux-server-tutorial#step-4-create-systemd-service "Direct link to Step 4: Create Systemd Service") ----------------------------------------------------------------------------------------------------------------------------------------------------------------- Exit from the fivem user and create a systemd service as root: # Exit from fivem userexit# Create the service filesudo nano /etc/systemd/system/fivem.service Add the following content: [Unit]Description=FiveM ServerAfter=network.target mariadb.service[Service]Type=simpleUser=fivemGroup=fivemWorkingDirectory=/home/fivem/serverExecStart=/home/fivem/server.shRestart=on-failureRestartSec=5StandardOutput=syslogStandardError=syslogSyslogIdentifier=fivem-server# Environment variablesEnvironment=NODE_ENV=production[Install]WantedBy=multi-user.target ### Enable and Start the Service[​](https://docs.qbox.re/blog/linux-server-tutorial#enable-and-start-the-service "Direct link to Enable and Start the Service") # Reload systemd to recognize the new servicesudo systemctl daemon-reload# Enable the service to start on bootsudo systemctl enable fivem.service# Start the servicesudo systemctl start fivem.service warning After starting the server for the first, you'll need to check the status using `systemctl status fivem.service` to get the txAdmin pin code, which you will use to access the txAdmin web interface. Step 5: Service Management[​](https://docs.qbox.re/blog/linux-server-tutorial#step-5-service-management "Direct link to Step 5: Service Management") ----------------------------------------------------------------------------------------------------------------------------------------------------- Here are useful commands to manage your FiveM server: # Check service statussudo systemctl status fivem.service# View logssudo journalctl -u fivem.service -f# Stop the serversudo systemctl stop fivem.service# Restart the serversudo systemctl restart fivem.service# Disable auto-start on bootsudo systemctl disable fivem.service Step 6: Firewall Configuration (Optional)[​](https://docs.qbox.re/blog/linux-server-tutorial#step-6-firewall-configuration-optional "Direct link to Step 6: Firewall Configuration (Optional)") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Configure your firewall to allow FiveM traffic: # For UFW (Ubuntu Firewall)sudo ufw allow 30120/tcpsudo ufw allow 30120/udpsudo ufw allow 40120/tcpsudo ufw allow 40120/udp# For iptablessudo iptables -A INPUT -p tcp --dport 30120 -j ACCEPTsudo iptables -A INPUT -p udp --dport 30120 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 40120 -j ACCEPTsudo iptables -A INPUT -p udp --dport 40120 -j ACCEPT# Save iptables rules (Debian/Ubuntu)sudo iptables-save > /etc/iptables/rules.v4 Troubleshooting[​](https://docs.qbox.re/blog/linux-server-tutorial#troubleshooting "Direct link to Troubleshooting") --------------------------------------------------------------------------------------------------------------------- ### Common Issues and Solutions[​](https://docs.qbox.re/blog/linux-server-tutorial#common-issues-and-solutions "Direct link to Common Issues and Solutions") **Service won't start:** # Check service status and logssudo systemctl status fivem.servicesudo journalctl -u fivem.service --no-pager# Verify script permissionsls -la /home/fivem/server.sh# Test script manuallysudo su - fivemcd /home/fivem./server.sh **Database connection issues:** # Test database connectionxmysql -u fivem_user -p# Check if MariaDB is runningsudo systemctl status mariadb **Download failures:** # Test artifact URL manuallycurl -s "https://artifacts.jgscripts.com/json" | jq# Check internet connectivityping -c 4 artifacts.jgscripts.com Security Considerations[​](https://docs.qbox.re/blog/linux-server-tutorial#security-considerations "Direct link to Security Considerations") --------------------------------------------------------------------------------------------------------------------------------------------- 1. **Firewall**: Only open necessary ports (30120 for FiveM, 3306 for database if remote access needed) 2. **User permissions**: Run FiveM under a dedicated user with minimal privileges 3. **Database security**: Use strong passwords and limit database user privileges 4. **Updates**: Regularly update your system and FiveM server 5. **Backup**: Implement regular backups of your database and server files Your FiveM server should now be running and accessible! The server will automatically start on boot and restart if it crashes. You can connect to it using the IP address of your server on port 30120. * [Prerequisites](https://docs.qbox.re/blog/linux-server-tutorial#prerequisites) * [Step 1: System Updates and Dependencies](https://docs.qbox.re/blog/linux-server-tutorial#step-1-system-updates-and-dependencies) * [Step 2: Database Setup (MariaDB)](https://docs.qbox.re/blog/linux-server-tutorial#step-2-database-setup-mariadb) * [Method 1: Native MariaDB Installation](https://docs.qbox.re/blog/linux-server-tutorial#method-1-native-mariadb-installation) * [Method 2: Docker MariaDB Installation](https://docs.qbox.re/blog/linux-server-tutorial#method-2-docker-mariadb-installation) * [Step 3: FiveM Server Setup](https://docs.qbox.re/blog/linux-server-tutorial#step-3-fivem-server-setup) * [Create Server Directory and User](https://docs.qbox.re/blog/linux-server-tutorial#create-server-directory-and-user) * [Create the Automated Server Script](https://docs.qbox.re/blog/linux-server-tutorial#create-the-automated-server-script) * [Step 4: Create Systemd Service](https://docs.qbox.re/blog/linux-server-tutorial#step-4-create-systemd-service) * [Enable and Start the Service](https://docs.qbox.re/blog/linux-server-tutorial#enable-and-start-the-service) * [Step 5: Service Management](https://docs.qbox.re/blog/linux-server-tutorial#step-5-service-management) * [Step 6: Firewall Configuration (Optional)](https://docs.qbox.re/blog/linux-server-tutorial#step-6-firewall-configuration-optional) * [Troubleshooting](https://docs.qbox.re/blog/linux-server-tutorial#troubleshooting) * [Common Issues and Solutions](https://docs.qbox.re/blog/linux-server-tutorial#common-issues-and-solutions) * [Security Considerations](https://docs.qbox.re/blog/linux-server-tutorial#security-considerations) --- # How to Set Up VSCode for FiveM and RedM Lua Scripting | Qbox Documentation [Skip to main content](https://docs.qbox.re/blog/vscode-setup#__docusaurus_skipToContent_fallback) Getting VSCode setup for FiveM/RedM scripting is actually really easy. The exentions listed in this blog automatically set most of that up for you! Below we will go over some suggested extensions and addons for VSCode. * * * Overview[​](https://docs.qbox.re/blog/vscode-setup#overview "Direct link to Overview") --------------------------------------------------------------------------------------- The extensions listed below will provide: * Autocompletion for native FiveM/RedM/CFX functions. * Type-checking using Lua LSP (via EmmyLua-style annotations). * In-editor documentation for native functions. * Git functionality like in-editor blame annotations, hovers, CodeLens, and more ![vscode intellisense](https://docs.qbox.re/assets/images/vscode-intellisense-1-739333cc2b6281a5eed702ec00c5df5f.png) ![GitLens](https://docs.qbox.re/assets/images/current-line-blame-8a9cbc444581b39e3dedeefafeb8cbcd.png) * * * Installation[​](https://docs.qbox.re/blog/vscode-setup#installation "Direct link to Installation") --------------------------------------------------------------------------------------------------- ### 1\. Install / Open VSCode[​](https://docs.qbox.re/blog/vscode-setup#1-install--open-vscode "Direct link to 1. Install / Open VSCode") Make sure you have [Visual Studio Code](https://code.visualstudio.com/) installed. ### 2\. Install the suggested extensions[​](https://docs.qbox.re/blog/vscode-setup#2-install-the-suggested-extensions "Direct link to 2. Install the suggested extensions") * [GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) * [Lua Language Server](https://marketplace.visualstudio.com/items?itemName=sumneko.lua) * [EditorConfig](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) * [CfxLua IntelliSense](https://marketplace.visualstudio.com/items?itemName=communityox.cfxlua-vscode-cox) * * * Tips & Tricks[​](https://docs.qbox.re/blog/vscode-setup#tips--tricks "Direct link to Tips & Tricks") ----------------------------------------------------------------------------------------------------- * Hover over native functions (e.g., `GetPlayerRoutingBucket`, `SetEntityCoords`) to view documentation * Improve IntelliSense and type safety by annotating functions * You can download support for export autocompletes of the inventory and core resources * [ox\_types](https://github.com/CommunityOx/ox_types) adds support for export calls from Overextended resources _(ox\_inventory, ox\_doorlock, etc)_ * [qbox\_types](https://github.com/ihyajb/qbox_types) adds support for export calls from QBox resources _(qbx\_core, qbx\_medical, etc)_ warning After downloading either of the addons, store them in a place you will remember (you will need the file path later) #### The below image shows `ox_types` adding autocomplete for inventory exports:[​](https://docs.qbox.re/blog/vscode-setup#the-below-image-shows-ox_types-adding-autocomplete-for-inventory-exports "Direct link to the-below-image-shows-ox_types-adding-autocomplete-for-inventory-exports") ![inventory exports](https://docs.qbox.re/assets/images/inventory-4426bbabae30e70f8d572184fa3a279d.png) #### The below codeblock shows a correctly annotated function:[​](https://docs.qbox.re/blog/vscode-setup#the-below-codeblock-shows-a-correctly-annotated-function "Direct link to The below codeblock shows a correctly annotated function:") * `---@param source Source` tells the intellisense the function expects a source (aka a players server ID) as the first arg * `---@return boolean` tells the intellisense the function will return a boolean (aka `true` or `false`) -- Check if player is whitelisted, kept like this for backwards compatibility or future plans---@param source Source---@return booleanfunction IsWhitelisted(source) if not serverConfig.whitelist then return true end if IsPlayerAceAllowed(source --[[@as string]], serverConfig.whitelistPermission) then return true end return falseend * * * Setup & Configuration[​](https://docs.qbox.re/blog/vscode-setup#setup--configuration "Direct link to Setup & Configuration") ----------------------------------------------------------------------------------------------------------------------------- The below codeblock shows what your library settings should look like after downloading `ox_types`, `qbox_types` or both _(To get to the settings, press `F1` and type `settings`)_ info We add the locally stored `ox_lib` resource path as it automatically adds support for `lib` autocompletes such as `lib.notify` "Lua.workspace.library": [ // EXISTING LIBRARYS HERE "F:/GitHub/ox_types/types", "F:/GitHub/qbox_types/types", "F:/CoolRoleplayServer/resources/[ox]/ox_lib"], * * * You're Ready to Code![​](https://docs.qbox.re/blog/vscode-setup#youre-ready-to-code "Direct link to You're Ready to Code!") ---------------------------------------------------------------------------------------------------------------------------- That’s it! Your VSCode environment is now set up FiveM/RedM Lua development. No more tab-switching to docs. Just clean, typed, and documented code... _hopefully_. * [Overview](https://docs.qbox.re/blog/vscode-setup#overview) * [Installation](https://docs.qbox.re/blog/vscode-setup#installation) * [1\. Install / Open VSCode](https://docs.qbox.re/blog/vscode-setup#1-install--open-vscode) * [2\. Install the suggested extensions](https://docs.qbox.re/blog/vscode-setup#2-install-the-suggested-extensions) * [Tips & Tricks](https://docs.qbox.re/blog/vscode-setup#tips--tricks) * [Setup & Configuration](https://docs.qbox.re/blog/vscode-setup#setup--configuration) * [You're Ready to Code!](https://docs.qbox.re/blog/vscode-setup#youre-ready-to-code) --- # Navigating Qbox Efficiently | Qbox Documentation [Skip to main content](https://docs.qbox.re/blog/navigating#__docusaurus_skipToContent_fallback) Working inside Qbox can sometimes feel overwhelming. Whether you need to remove a bugged item, locate a specific message, or figure out where certain data is stored, this guide will show you how to quickly find what you’re looking for. Why Navigation Matters in Qbox[​](https://docs.qbox.re/blog/navigating#why-navigation-matters-in-qbox "Direct link to Why Navigation Matters in Qbox") ------------------------------------------------------------------------------------------------------------------------------------------------------- A frequent set of questions from the Discord community: > * β€œHow do I remove this message?” > * β€œWhere is this item stored?” > * β€œHow can I change that label?” The solution is almost always the same: πŸ‘‰ **Use your editor’s Global Search.** * * * Using Global Search in VSCode[​](https://docs.qbox.re/blog/navigating#using-global-search-in-vscode "Direct link to Using Global Search in VSCode") ---------------------------------------------------------------------------------------------------------------------------------------------------- Most developers working with Qbox use **Visual Studio Code**. For this guide, we’ll focus on VSCode’s built-in search. The default keybinding to search across the entire project is: CTRL + SHIFT + F This opens a search input where you can type any string to quickly locate references throughout your project. ![VSCode Global Search](https://docs.qbox.re/assets/images/global_search-31eafd6de3a04dce8eb6bece2a3aef88.png) * * * Example: Changing a Message[​](https://docs.qbox.re/blog/navigating#example-changing-a-message "Direct link to Example: Changing a Message") --------------------------------------------------------------------------------------------------------------------------------------------- Let’s say you want to change the message: "You are now on duty!" into: "You started your shift!" 1. Press **CTRL + SHIFT + F** and enter the original text. ![Example search](https://docs.qbox.re/assets/images/example-search-eb2509f5870e17e82fb817a7545d0976.png) 2. VSCode will show you exactly where this text appears. Open the file and update it. ![Example change](https://docs.qbox.re/assets/images/example-change-8f05758bea6817e85b4ff757d455e74b.png) 3. Save your changes and restart the script. Done! Example: Removing a Message[​](https://docs.qbox.re/blog/navigating#example-removing-a-message "Direct link to Example: Removing a Message") --------------------------------------------------------------------------------------------------------------------------------------------- Sometimes you don’t just want to change a message. Instead, you want to remove it entirely. Most Qbox scripts support multiple languages, which means you’ll often be editing **translation files** instead of the direct script. This can feel confusing, because the place where the message is triggered is different from where the text itself is defined. Take this example: ![Example highlight key](data:image/png;base64,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) The blue text is the **translation key**. That’s how the script calls the message. To track down where this key is used, simply **search for the key name** in your project. But sometimes keys are **nested**, like this one with the prefix `info`: ![Example nesting](https://docs.qbox.re/assets/images/example-nesting-68003af7c21ac7404e2b3f8b1f2b6f25.png) In this case, you can add a **dot prefix** before the key when searching, so only this specific value shows up: ![Example dot](https://docs.qbox.re/assets/images/example-dot-2c69e457732bf5b8c320341a3bbcb0a0.png) This way, you can quickly identify exactly where and how the message is being used, and safely remove it. ![Example dot](https://docs.qbox.re/assets/images/example-code-snippet-a5d9b0dc81f6bb23bd7067a9593aa0a8.png) * * * Final Thoughts[​](https://docs.qbox.re/blog/navigating#final-thoughts "Direct link to Final Thoughts") ------------------------------------------------------------------------------------------------------- Mastering global search will save you countless hours and questions in Qbox. Instead of digging through folders manually, you’ll be able to instantly locate and edit the messages, items, or data you need. This concept works for almost anything you’re trying to find in your project but following labels or keys often gives you the clearest path to the right spot. * [Why Navigation Matters in Qbox](https://docs.qbox.re/blog/navigating#why-navigation-matters-in-qbox) * [Using Global Search in VSCode](https://docs.qbox.re/blog/navigating#using-global-search-in-vscode) * [Example: Changing a Message](https://docs.qbox.re/blog/navigating#example-changing-a-message) * [Example: Removing a Message](https://docs.qbox.re/blog/navigating#example-removing-a-message) * [Final Thoughts](https://docs.qbox.re/blog/navigating#final-thoughts) --- # Contributing Guidelines | Qbox Documentation [Skip to main content](https://docs.qbox.re/contributors#__docusaurus_skipToContent_fallback) On this page Thank you for taking the time to contribute! These guidelines will help you help us in the best way possible regardless of your skill level. We ask that you try to read everything related to the way you'd like to contribute and try and use your best judgement for anything not covered. Make sure to also read our [Contributor Code of Conduct](https://github.com/Qbox-Project/github-docs/blob/main/repo-template/.github/CODE_OF_CONDUCT.md) . If you still have further questions after reading be sure to join the [Qbox Discord server](https://discord.gg/Z6Whda5hHA) . Issues[​](https://docs.qbox.re/contributors#issues "Direct link to Issues") ---------------------------------------------------------------------------- Open a new issue to report a bug or request a new feature or improvement. If you want to ask a question, issues are not the place to do so. Please join our [Discord server](https://discord.gg/Z6Whda5hHA) and ask over there instead. Before opening a new issue: * [Search](https://github.com/issues?q=is%3Aissue+org%3AQbox-Project) for existing issues; maybe someone else already experienced the same problem that you're having! Duplicate issues will be closed. * Download the latest release of the resource you are opening the issue for to make sure that it wasn't already fixed. Issues that are already fixed are considered invalid and will be closed. When opening a new issue, make sure to pick the right type of form and fill it out. The more information you provide, the easier it will be for us to work on your new issue. Issues that are invalid or do not follow the correct form may be ignored or even closed. Pull Requests[​](https://docs.qbox.re/contributors#pull-requests "Direct link to Pull Requests") ------------------------------------------------------------------------------------------------- Open a new pull request to contribute code. You can use your own editor of choice, but we recommend using [VSCode](https://code.visualstudio.com/) with these extensions: * [GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) * [Lua Language Server](https://marketplace.visualstudio.com/items?itemName=sumneko.lua) * [EditorConfig](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) * [CfxLua IntelliSense](https://marketplace.visualstudio.com/items?itemName=communityox.cfxlua-vscode-cox) If you are new to contributing code, you can check out and try to fix issues marked with [`good first issue`](https://github.com/issues?q=is%3Aissue+is%3Aopen+org%3AQbox-Project+label%3A%22good+first+issue%22) . If you want to contribute code but don't know what to do, please check out issues marked with [`help wanted`](https://github.com/issues?q=is%3Aissue+is%3Aopen+org%3AQbox-Project+label%3A%22help+wanted%22) as those are issues that we actually _need_ help with. If you want to contribute code unrelated to an existing issue, you should open an issue yourself or ask over on the [Discord server](https://discord.gg/Z6Whda5hHA) to discuss it with our team and ask whether your change is wanted, especially if you are planning on adding new features or large designs. Before opening a pull request: * Make sure that your contribution fits our [code conventions](https://docs.qbox.re/contributors#code-conventions) described below. After opening a pull request your code will be checked according to them. * Make sure that your pull request is small and focused. Break it into multiple smaller pull requests if not (see [Small Pull Request Manifesto](https://github.com/PlaytikaOSS/small-pull-request-manifesto) ). * It is recommended to test your changes to make sure they work and don't break existing functionality. When opening a pull request, make sure to follow the template and explain your changes. If you are trying to contribute something related to a GitHub issue, make sure to mention it as well. Code Conventions[​](https://docs.qbox.re/contributors#code-conventions "Direct link to Code Conventions") ---------------------------------------------------------------------------------------------------------- Below are conventions that you must follow when contributing code. ### Commit Message Conventions[​](https://docs.qbox.re/contributors#commit-message-conventions "Direct link to Commit Message Conventions") * The first line of a commit message must be 72 characters at most. * Commit messages and pull request titles must follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) . * Use `fix:` when patching a bug. * Use `feat:` when introducing a new feature. * Use `refactor:` when altering code without changing functionality. * Use `chore:` when your changes don't alter production code. * Append a `!` after the type/scope of the feature when you change code and introduce a breaking API change. Optionally add a footer to the bottom of your commit message separated by 2 newlines, starting with `BREAKING CHANGE:`, and explaining the breaking change. ### Lua Conventions[​](https://docs.qbox.re/contributors#lua-conventions "Direct link to Lua Conventions") #### General Style[​](https://docs.qbox.re/contributors#general-style "Direct link to General Style") * Use 4 space indentation. * Prefer creating local variables over global ones. * Don't repeat yourself. If you're using the same operations in multiple different places convert them into a flexible function. * Exported functions must be properly annotated (see [LuaLS Annotations](https://luals.github.io/wiki/annotations/) ). * Utilize [ox\_lib](https://coxdocs.dev/ox_lib) to make your life easier. Prefer lib calls over native ones. * Make use of config options where it makes sense to make features optional and/or customizable. Configs should not be modified by other code. #### Optimization & Security[​](https://docs.qbox.re/contributors#optimization--security "Direct link to Optimization & Security") * Consider [this Lua Performance guide](https://springrts.com/wiki/Lua_Performance) . * Don't create unnecessary threads. Always try to find a better method of triggering events. * Set longer `Wait` calls in distance checking loops when the player is out of range. * Don't waste cycles; job specific loops should only run for players with that job. * When possible don't trust the client, _especially_ with transactions. * Balance security and optimizations. * Use `#(vector3 - vector3)` instead of `GetDistanceBetweenCoords()`. * Use `myTable[#myTable + 1] = 'value'` instead of `table.insert(myTable, 'value')`. * Use `myTable['key'] = 'value'` instead of `table.insert(myTable, 'key', 'value')`. #### Naming[​](https://docs.qbox.re/contributors#naming "Direct link to Naming") * Use `camelCase` for local variables and functions. * Use `PascalCase` for global variables and functions. * Avoid acronyms as they can be confusing and context dependant. * Be descriptive; make it easy for the reader. * Booleans may be prefixed with `is`, `has`, `are`, etc. * Arrays should have plural names. ### JavaScript/TypeScript Conventions[​](https://docs.qbox.re/contributors#javascripttypescript-conventions "Direct link to JavaScript/TypeScript Conventions") Consider following the [Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html) and the [Google TypeScript Style Guide](https://google.github.io/styleguide/tsguide.html) . * [Issues](https://docs.qbox.re/contributors#issues) * [Pull Requests](https://docs.qbox.re/contributors#pull-requests) * [Code Conventions](https://docs.qbox.re/contributors#code-conventions) * [Commit Message Conventions](https://docs.qbox.re/contributors#commit-message-conventions) * [Lua Conventions](https://docs.qbox.re/contributors#lua-conventions) * [JavaScript/TypeScript Conventions](https://docs.qbox.re/contributors#javascripttypescript-conventions) --- # Converting from QBCore to Qbox | Qbox Documentation [Skip to main content](https://docs.qbox.re/converting#__docusaurus_skipToContent_fallback) On this page info We highly recommend installing Qbox via the recipe to avoid as many issues as possible. For detailed instructions, refer to [Installation](https://docs.qbox.re/installation) . Installation Steps[​](https://docs.qbox.re/converting#installation-steps "Direct link to Installation Steps") -------------------------------------------------------------------------------------------------------------- ### 1\. Update your server configuration files[​](https://docs.qbox.re/converting#1-update-your-server-configuration-files "Direct link to 1. Update your server configuration files") When installing Qbox via the recipe, the `server.cfg`, `ox.cfg`, `permissions.cfg`, and `voice.cfg` files will be download automatically. If you are not using the recipe, you will need to manually add/update these. See the [Qbox txAdminRecipe repository](https://github.com/Qbox-project/txAdminRecipe) for the latest versions of these files. ### 2\. Update your job grades in `qbx_core/shared/jobs.lua`[​](https://docs.qbox.re/converting#2-update-your-job-grades-in-qbx_coresharedjobslua "Direct link to 2-update-your-job-grades-in-qbx_coresharedjobslua") In Qbox, job grades are numbers without quotations, whereas in QBCore they are strings. These will need to be changed. ### 3\. Configure ox\_inventory and convert your database[​](https://docs.qbox.re/converting#3-configure-ox_inventory-and-convert-your-database "Direct link to 3. Configure ox_inventory and convert your database") Back it up first! ([see ox\_inventory documentation](https://coxdocs.dev/ox_inventory/Frameworks/qb) ) ### 4\. Update qbx\_core's job and gang shared files[​](https://docs.qbox.re/converting#4-update-qbx_cores-job-and-gang-shared-files "Direct link to 4. Update qbx_core's job and gang shared files") In Qbox, the job and gang grades are numbers without quotations whereas in QBCore, they are strings. These will need to be changed. The job and gang shared files are located in `qbx_core/shared/jobs.lua` and `qbx_core/shared/gangs.lua` respectively. ### 5\. Configure qbx\_core's built-in functionalities[​](https://docs.qbox.re/converting#5-configure-qbx_cores-built-in-functionalities "Direct link to 5. Configure qbx_core's built-in functionalities") Qbox has a multicharacter, queue, multijob, and Discord rich presense built into qbx\_core. By default, all of these are enabled. If you wish to disable or customize these, do the following: * To disable the multicharacter system, open `qbx_core/config/client.lua` and set `useExternalCharacters` to `false`. * To disable the queue system, open the `server.cfg` file and set `qbx:enablequeue` to `false`. To customize the queue system further, open `qbx_core/config/queue.lua`. * To disable or customize the Discord rich presents, open `qbx_core/config/client.lua`, scroll all the way down, and edit the `discord` table. * To customize the multijob/multigang system, open the `server.cfg` file and set `qbx:max_jobs_per_player` and `qbx:max_gangs_per_player` to the desired values. This feature **cannot** be disabled. * First, double check that the player.citizenid column in your database has the proper `utf8mb4_unicode_ci` collation. If not, change it. Then, run the `qbx_core.sql` file to create the new player\_groups table. * Start the server and then type `convertjobs` into the txAdmin colsone once the server is running to populare the player\_groups table. * **Do not use external multijob/multigang resources that aren't guaranteed to be Qbox compatible.** Using incompatible multijobs or resources which modify the core's database tables may lead to data corruption! ### 6\. Run the SQL file provided with qbx\_core[​](https://docs.qbox.re/converting#6-run-the-sql-file-provided-with-qbx_core "Direct link to 6. Run the SQL file provided with qbx_core") This will alter the players table in the following ways: * Add to the `players` table to add the new column `last_logged_out` * Change the collation of players.citizenid column to `utf8mb4_unicode_ci` _Note: You may need to manually change the collation of other tables' citizenid column if you get an error that a foreign key constraint was violated._ Migrating a resource from QBCore to Qbox[​](https://docs.qbox.re/converting#migrating-a-resource-from-qbcore-to-qbox "Direct link to Migrating a resource from QBCore to Qbox") -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- info This is optional as Qbox has 99% compatibility with existing QB scripts Within Qbox, the core object no longer exists. Instead, the data can be accessed via a combination of export functions and imported modules. 1. Import the needed modules from qbx\_core to supply replacement functions for ones from QBCore 2. Replace calls to QBCore one by one with calls to the imported modules and exported functions. Both can be used at the same time, so conversion can be done partially, or over time. ### Common replacements[​](https://docs.qbox.re/converting#common-replacements "Direct link to Common replacements") QBCore.Functions. -> exports.qbx_core:QBCore.Functions.GetPlayerData() -> QBX.PlayerData -- requires importing the playerdata moduleQBCore.Functions.GetPlate(vehicle) -> qbx.getVehiclePlate(vehicle) -- requires importing the lib moduleQBCore.Shared.Jobs -> exports.qbx_core:GetJobs()QBCore.Shared.Gangs -> exports.qbx_core:GetGangs()QBCore.Shared.Vehicles -> exports.qbx_core:GetVehiclesByName()QBCore.Shared.Weapons -> exports.qbx_core:GetWeapons()QBCore.Shared.Locations -> exports.qbx_core:GetLocations()QBCore.Shared.Items -> exports.ox_inventory:Items()exports['qb-core']:KeyPressed() -> lib.hideTextUI()exports['qb-core']:HideText() -> lib.hideTextUI()exports['qb-core']:DrawText(text, position) -> lib.showTextUI(text, { position = position })exports['qb-core']:ChangeText(text, position) -> lib.hideTextUI() lib.showTextUI(text, { position = position }) * [Installation Steps](https://docs.qbox.re/converting#installation-steps) * [1\. Update your server configuration files](https://docs.qbox.re/converting#1-update-your-server-configuration-files) * [2\. Update your job grades in `qbx_core/shared/jobs.lua`](https://docs.qbox.re/converting#2-update-your-job-grades-in-qbx_coresharedjobslua) * [3\. Configure ox\_inventory and convert your database](https://docs.qbox.re/converting#3-configure-ox_inventory-and-convert-your-database) * [4\. Update qbx\_core's job and gang shared files](https://docs.qbox.re/converting#4-update-qbx_cores-job-and-gang-shared-files) * [5\. Configure qbx\_core's built-in functionalities](https://docs.qbox.re/converting#5-configure-qbx_cores-built-in-functionalities) * [6\. Run the SQL file provided with qbx\_core](https://docs.qbox.re/converting#6-run-the-sql-file-provided-with-qbx_core) * [Migrating a resource from QBCore to Qbox](https://docs.qbox.re/converting#migrating-a-resource-from-qbcore-to-qbox) * [Common replacements](https://docs.qbox.re/converting#common-replacements) --- # Developer's Guide | Qbox Documentation [Skip to main content](https://docs.qbox.re/developers#__docusaurus_skipToContent_fallback) On this page This guide is intended for those creating scripts using qbx\_core. Following these principles will make it less likely for your script to break in future updates. Do not access database tables owned by core[​](https://docs.qbox.re/developers#do-not-access-database-tables-owned-by-core "Direct link to Do not access database tables owned by core") ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Doing this will break your script if the database schema changes in the future. If the data you need can't be read or written using a qbx\_core/qbx\_vehicles export, create a GitHub issue so we can rectify the problem for everyone. Do not modify core code[​](https://docs.qbox.re/developers#do-not-modify-core-code "Direct link to Do not modify core code") ----------------------------------------------------------------------------------------------------------------------------- Doing this will make it difficult for you to update in the future, and create confusion when debugging issues that may or may not be due to your custom changes. We've attempted to design things with flexibility in mind. However, if you really feel you need to modify core, file a GitHub issue first. We'll see if we can trigger an event for you, surface a config value, or re-design something for the flexibility you need. Do not use deprecated functions/events[​](https://docs.qbox.re/developers#do-not-use-deprecated-functionsevents "Direct link to Do not use deprecated functions/events") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- These are likely to be removed in future updates. Set statebag when spawning an owned vehicle[​](https://docs.qbox.re/developers#set-statebag-when-spawning-an-owned-vehicle "Direct link to Set statebag when spawning an owned vehicle") ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- When spawning a vehicle that is owned by a player, the vehicle's vehicleid statebag should be set to the id from the player\_vehicles table. This allows other resources to look up info about the vehicle in the database using a stable identifier To set vehicle properties when spawning a vehicle, pass the properties into the spawnVehicle function[​](https://docs.qbox.re/developers#to-set-vehicle-properties-when-spawning-a-vehicle-pass-the-properties-into-the-spawnvehicle-function "Direct link to To set vehicle properties when spawning a vehicle, pass the properties into the spawnVehicle function") ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Do not manually set the properties after the vehicle exists. This is an anti-pattern and may cause issues if the client is not the entity owner. Do not rely on unversioned/unreleased resources[​](https://docs.qbox.re/developers#do-not-rely-on-unversionedunreleased-resources "Direct link to Do not rely on unversioned/unreleased resources") ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- We make no guarantees about rapid breaking changes in these resources. They are not stable. * [Do not access database tables owned by core](https://docs.qbox.re/developers#do-not-access-database-tables-owned-by-core) * [Do not modify core code](https://docs.qbox.re/developers#do-not-modify-core-code) * [Do not use deprecated functions/events](https://docs.qbox.re/developers#do-not-use-deprecated-functionsevents) * [Set statebag when spawning an owned vehicle](https://docs.qbox.re/developers#set-statebag-when-spawning-an-owned-vehicle) * [To set vehicle properties when spawning a vehicle, pass the properties into the spawnVehicle function](https://docs.qbox.re/developers#to-set-vehicle-properties-when-spawning-a-vehicle-pass-the-properties-into-the-spawnvehicle-function) * [Do not rely on unversioned/unreleased resources](https://docs.qbox.re/developers#do-not-rely-on-unversionedunreleased-resources) --- # Frequently Asked Questions | Qbox Documentation [Skip to main content](https://docs.qbox.re/faq#__docusaurus_skipToContent_fallback) On this page What are the differences between QBCore and Qbox?[​](https://docs.qbox.re/faq#what-are-the-differences-between-qbcore-and-qbox "Direct link to What are the differences between QBCore and Qbox?") --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- While originally forked from QBCore, many Qbox resources have been refactored to improve code quality, enhance security, lower performance overhead, and integrate with [overextended](https://coxdocs.dev/) resources. Where appropriate Qbox also integrates directly with other open source projects, rather than maintaining subpar resources in-house. Qbox maintains high quality standards, with a strong community of regular contributors. As time goes on, expect greater differences in player facing features. Will my QBCore scripts work with Qbox?[​](https://docs.qbox.re/faq#will-my-qbcore-scripts-work-with-qbox "Direct link to Will my QBCore scripts work with Qbox?") ------------------------------------------------------------------------------------------------------------------------------------------------------------------ TL;DR: Yes (in most cases). We've created a bridge layer for backwards compatibility with the documented and proper ways of using qb-core, and you can continue to use most QBCore scripts without any modifications. An exception to this is resources that use qb-core in undocumented, unsupported, invalid, and/or improper ways, such as: * Direct access to database tables; * Direct access to qb-core files that aren't meant to be used by other resources; * Invalid usages of existing functions; * And other unexpected ways not mentioned here. Who should use Qbox?[​](https://docs.qbox.re/faq#who-should-use-qbox "Direct link to Who should use Qbox?") ------------------------------------------------------------------------------------------------------------ Servers currently using QBCore and servers interested in running QBCore in the future. Is Qbox ready to use?[​](https://docs.qbox.re/faq#is-qbox-ready-to-use "Direct link to Is Qbox ready to use?") --------------------------------------------------------------------------------------------------------------- Since qbx\_core is backwards compatible with qb-core resources, we recommend using only the released Qbox resources for a stable experience. Are multijob resources compatible with Qbox?[​](https://docs.qbox.re/faq#are-multijob-resources-compatible-with-qbox "Direct link to Are multijob resources compatible with Qbox?") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ They can be, but only if calling qbx\_core exports to add/modify/remove player's jobs. The two common issues with multijob resources are: * Directly accessing Qbox's database tables * Maintaining Qbox's core data in a resource's own table Do I need to convert my resources to Qbox to make them work?[​](https://docs.qbox.re/faq#do-i-need-to-convert-my-resources-to-qbox-to-make-them-work "Direct link to Do I need to convert my resources to Qbox to make them work?") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ No, the bridge layer handles the compatibility for resources expecting QBCore style exports and events. Converting resources only helps to improve readability and reduce the memory footprint Are beta releases ready to be used?[​](https://docs.qbox.re/faq#are-beta-releases-ready-to-be-used "Direct link to Are beta releases ready to be used?") --------------------------------------------------------------------------------------------------------------------------------------------------------- If you see a resource with a version less than v1.0.0, it is a beta released resources. Beta releases still meet all of our release standards, except that they may not yet be as optimized or cleaned up as we'd like. To qualify for a beta release we're principally concerned that the resource works well, and the API & dependencies are appropriate. We wouldn't release resources in beta if we didn't think they were stable and ready to be used. Common Problems and Questions[​](https://docs.qbox.re/faq#common-problems-and-questions "Direct link to Common Problems and Questions") ---------------------------------------------------------------------------------------------------------------------------------------- ### No such export GetCoreObject in resource qbx\_core[​](https://docs.qbox.re/faq#no-such-export-getcoreobject-in-resource-qbx_core "Direct link to No such export GetCoreObject in resource qbx_core") Qbox does not have the core object. However, you can continue to use `exports['qb-core']:GetCoreObject()` to get a core object from Qbox's QB bridge layer. ### \[WARN\] This resource is still using the deprecated qbx\_core utils![​](https://docs.qbox.re/faq#warn-this-resource-is-still-using-the-deprecated-qbx_core-utils "Direct link to [WARN] This resource is still using the deprecated qbx_core utils!") If you are receiving this warning then please download the latest release/commit for that resource. With the exception of archived resources this dependency has been resolved. ### Can I use my own multicharacter?[​](https://docs.qbox.re/faq#can-i-use-my-own-multicharacter "Direct link to Can I use my own multicharacter?") Yes, you can. To disable the built in multicharacter change this setting to true in `qbx_core/config/client.lua` useExternalCharacters = false, -- Whether you have an external character management resource. (If true, disables the character management inside the core) Stuck in loading screen? Your multicharacter most likely never calls the loading screen to shutdown. You can fix this 2 ways: 1. Open your `server.cfg` and edit `setr loadscreen:externalShutdown` to be `false` 2. Edit your multicharacter resources to call the `ShutdownLoadingScreen()` and `ShutdownLoadingScreenNui()` natives. Like qbx\_core does [here](https://github.com/Qbox-project/qbx_core/blob/6e50abaf966295a4245c901a37ecb64343d63677/client/character.lua#L387-L388) ### Can I use my own notification system?[​](https://docs.qbox.re/faq#can-i-use-my-own-notification-system "Direct link to Can I use my own notification system?") Yes, you can but you will need to modify `ox_lib` to pass the event to your notification system. ### Vehicle model names starting with a number[​](https://docs.qbox.re/faq#vehicle-model-names-starting-with-a-number "Direct link to Vehicle model names starting with a number") When using vehicle names that start with a number you need to enclose them in square brackets like this ['5vigero'] = ### Keybind changes do not work[​](https://docs.qbox.re/faq#keybind-changes-do-not-work "Direct link to Keybind changes do not work") Changing keybinds via convars or configuration files will not change them for clients that have already connected to the server. You need to clear your binds manually in order them to reset to the defaults ### txAdmin Installation: Task Failed: Response code 403 (rate limit exceeded)[​](https://docs.qbox.re/faq#txadmin-installation-task-failed-response-code-403-rate-limit-exceeded "Direct link to txAdmin Installation: Task Failed: Response code 403 (rate limit exceeded)") This is due to Github rate limits which is outside our control. You can keep trying or change your IP address ### SCRIPT ERROR: failed to load model[​](https://docs.qbox.re/faq#script-error-failed-to-load-model "Direct link to SCRIPT ERROR: failed to load model") This is likely due to a low performance PC. If the error is `qbx_core` you can adjust the timeout in `qbx_core/config/client.lua` under `loadingModelsTimeout` ### Do I need to add items to qbx\_core/shared/items.lua and ox\_inventory?[​](https://docs.qbox.re/faq#do-i-need-to-add-items-to-qbx_coreshareditemslua-and-ox_inventory "Direct link to Do I need to add items to qbx_core/shared/items.lua and ox_inventory?") No you don't need to add items there unless they are being accessed in a resource via the bridge such as a script that is not ox\_inventory compatible. Items added here will be automatically added to `ox_inventory` but you will have to manually add things like client/server exports in the `ox_inventory/data/items.lua` ### Error SQL: Can't create table xyz (Foreign Key Constraint is incorrectly formed)[​](https://docs.qbox.re/faq#error-sql-cant-create-table-xyz-foreign-key-constraint-is-incorrectly-formed "Direct link to Error SQL: Can't create table xyz (Foreign Key Constraint is incorrectly formed)") This is due to a mismatch of collation types between the table being created and existing tables. Add the following to the end of the `CREATE TABLE` parts of the sql you are trying to add and that should fix the issue. You may need to drop the table and readd it for the changes to apply DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; * [What are the differences between QBCore and Qbox?](https://docs.qbox.re/faq#what-are-the-differences-between-qbcore-and-qbox) * [Will my QBCore scripts work with Qbox?](https://docs.qbox.re/faq#will-my-qbcore-scripts-work-with-qbox) * [Who should use Qbox?](https://docs.qbox.re/faq#who-should-use-qbox) * [Is Qbox ready to use?](https://docs.qbox.re/faq#is-qbox-ready-to-use) * [Are multijob resources compatible with Qbox?](https://docs.qbox.re/faq#are-multijob-resources-compatible-with-qbox) * [Do I need to convert my resources to Qbox to make them work?](https://docs.qbox.re/faq#do-i-need-to-convert-my-resources-to-qbox-to-make-them-work) * [Are beta releases ready to be used?](https://docs.qbox.re/faq#are-beta-releases-ready-to-be-used) * [Common Problems and Questions](https://docs.qbox.re/faq#common-problems-and-questions) * [No such export GetCoreObject in resource qbx\_core](https://docs.qbox.re/faq#no-such-export-getcoreobject-in-resource-qbx_core) * [\[WARN\] This resource is still using the deprecated qbx\_core utils!](https://docs.qbox.re/faq#warn-this-resource-is-still-using-the-deprecated-qbx_core-utils) * [Can I use my own multicharacter?](https://docs.qbox.re/faq#can-i-use-my-own-multicharacter) * [Can I use my own notification system?](https://docs.qbox.re/faq#can-i-use-my-own-notification-system) * [Vehicle model names starting with a number](https://docs.qbox.re/faq#vehicle-model-names-starting-with-a-number) * [Keybind changes do not work](https://docs.qbox.re/faq#keybind-changes-do-not-work) * [txAdmin Installation: Task Failed: Response code 403 (rate limit exceeded)](https://docs.qbox.re/faq#txadmin-installation-task-failed-response-code-403-rate-limit-exceeded) * [SCRIPT ERROR: failed to load model](https://docs.qbox.re/faq#script-error-failed-to-load-model) * [Do I need to add items to qbx\_core/shared/items.lua and ox\_inventory?](https://docs.qbox.re/faq#do-i-need-to-add-items-to-qbx_coreshareditemslua-and-ox_inventory) * [Error SQL: Can't create table xyz (Foreign Key Constraint is incorrectly formed)](https://docs.qbox.re/faq#error-sql-cant-create-table-xyz-foreign-key-constraint-is-incorrectly-formed) --- # Installation Guide | Qbox Documentation [Skip to main content](https://docs.qbox.re/installation#__docusaurus_skipToContent_fallback) On this page ### Visual learner? Watch this video instead![​](https://docs.qbox.re/installation#visual-learner-watch-this-video-instead "Direct link to Visual learner? Watch this video instead!") γ…€ info * We highly recommend using **txAdmin** to install your FiveM server. * For detailed instructions, refer to [Setting up a server using txAdmin](https://docs.fivem.net/docs/server-manual/setting-up-a-server-txadmin/) . XAMPP IS NOT SUPPORTED AND SHOULD NEVER EVEN BE USED. * We expect you to already have `MariaDB` installed. * Please download `MariaDB` from the official website: [MariaDB Downloads](https://mariadb.org/download/) . Installation Steps[​](https://docs.qbox.re/installation#installation-steps "Direct link to Installation Steps") ---------------------------------------------------------------------------------------------------------------- ### 1\. Download the server[​](https://docs.qbox.re/installation#1-download-the-server "Direct link to 1. Download the server") Download the latest [FiveM artifacts](https://runtime.fivem.net/artifacts/fivem/build_server_windows/master/) and extract the files. Do not use the buttons at the top. Download directly from the list. ![Latest Artifacts](https://docs.qbox.re/assets/images/artifacts-8c6f7ca461759e47dbea1605876fff76.png) ### 2\. Extract the artifacts[​](https://docs.qbox.re/installation#2-extract-the-artifacts "Direct link to 2. Extract the artifacts") Now extract the `server.7z` with any archive manager of your choosing. We recommend using [7-Zip](https://www.7-zip.org/) . Extract it as `/server` so you keep the server folder name. ### 3\. Starting the server[​](https://docs.qbox.re/installation#3-starting-the-server "Direct link to 3. Starting the server") Open the folder you just extracted it to. It should look a little like this. And then run `FXServer.exe`. ![Server Folder](https://docs.qbox.re/assets/images/artifact-list-7d504a636ce97fc807a32165ffae8ef7.png) ### 4\. Start the recipe installation[​](https://docs.qbox.re/installation#4-start-the-recipe-installation "Direct link to 4. Start the recipe installation") Run `FXServer.exe` to start txAdmin and follow all the steps. ### 5\. Deploy the recipe[​](https://docs.qbox.re/installation#5-deploy-the-recipe "Direct link to 5. Deploy the recipe") When prompted, select `Popular Recipes` and then `QBox Framework`: ![Deployment Type](https://docs.qbox.re/assets/images/txadmin-deployment-type-ac956a7ea39fc4725fda040dc308d149.jpg) ### 6\. Run the server[​](https://docs.qbox.re/installation#6-run-the-server "Direct link to 6. Run the server") Once you have completed all of the installation steps, run the server. * [Visual learner? Watch this video instead!](https://docs.qbox.re/installation#visual-learner-watch-this-video-instead) * [Installation Steps](https://docs.qbox.re/installation#installation-steps) * [1\. Download the server](https://docs.qbox.re/installation#1-download-the-server) * [2\. Extract the artifacts](https://docs.qbox.re/installation#2-extract-the-artifacts) * [3\. Starting the server](https://docs.qbox.re/installation#3-starting-the-server) * [4\. Start the recipe installation](https://docs.qbox.re/installation#4-start-the-recipe-installation) * [5\. Deploy the recipe](https://docs.qbox.re/installation#5-deploy-the-recipe) * [6\. Run the server](https://docs.qbox.re/installation#6-run-the-server) --- # Release Readiness Guidelines | Qbox Documentation [Skip to main content](https://docs.qbox.re/release#__docusaurus_skipToContent_fallback) On this page Guidelines for indicating that a resource is stable and ready for release. Code Quality[​](https://docs.qbox.re/release#code-quality "Direct link to Code Quality") ----------------------------------------------------------------------------------------- 1. No lint errors are present. 2. All `print` statements are replaced with `lib.print`. 3. ox\_lib is used to replace natives where possible. 4. Code uses best practices and follows the contribution guidelines. 5. Code is readable and well organized. 6. No deprecated functions are being invoked. Database Practices[​](https://docs.qbox.re/release#database-practices "Direct link to Database Practices") ----------------------------------------------------------------------------------------------------------- 1. Does not read directly from tables it does not own, and uses exports and functions from the owning resources to get the data instead. 2. Has direct database calls to tables it does own in a designated storage layer of the resource (see `server/storage.lua` in qbx\_core). Config Practices[​](https://docs.qbox.re/release#config-practices "Direct link to Config Practices") ----------------------------------------------------------------------------------------------------- 1. Config is located inside of a config folder and is split between `client.lua`, `shared.lua`, `server.lua`, and optionally more. Each of these are a module (i.e. returns a table). Core Practices[​](https://docs.qbox.re/release#core-practices "Direct link to Core Practices") ----------------------------------------------------------------------------------------------- 1. Client PlayerData is accessed using playerdata module, instead of a qbx\_core export. 2. Lib module is used to replace duplicate code like DrawText. Resource Quality[​](https://docs.qbox.re/release#resource-quality "Direct link to Resource Quality") ----------------------------------------------------------------------------------------------------- 1. Resource features provide a good experience for players/devs/owners/admins. 2. Resource is scoped appropriately (i.e. it shouldn't be split, or combined with another resource). 3. README is not outdated. 4. No known bugs. Stability[​](https://docs.qbox.re/release#stability "Direct link to Stability") -------------------------------------------------------------------------------- 1. No breaking changes are planned in the near future. 2. Resource has been tested or unchanged for long enough to give confidence that major bugs are not present. Dependencies[​](https://docs.qbox.re/release#dependencies "Direct link to Dependencies") ----------------------------------------------------------------------------------------- 1. Dependencies are declared and enforced using [lib.checkDependency](https://coxdocs.dev/ox_lib/Modules/Version/Shared) . fxmanifest dependencies should be used intentionally; understanding the behavior of restarting a resource. 2. Dependencies are stable. Release Automation & Documentation[​](https://docs.qbox.re/release#release-automation--documentation "Direct link to Release Automation & Documentation") ---------------------------------------------------------------------------------------------------------------------------------------------------------- 1. The first line of code executed by the server is [lib.versionCheck](https://coxdocs.dev/ox_lib/Modules/Version/Server#libversioncheck) . 2. The resource has a `.github` folder with bug/suggestion templates, automated version updater & release script. 3. The resource has a README which contains marketing material about the resource and it's features. Note that this is not technical documentation. 4. The resource's public API (events & exports) are documented on the technical docs (here). * [Code Quality](https://docs.qbox.re/release#code-quality) * [Database Practices](https://docs.qbox.re/release#database-practices) * [Config Practices](https://docs.qbox.re/release#config-practices) * [Core Practices](https://docs.qbox.re/release#core-practices) * [Resource Quality](https://docs.qbox.re/release#resource-quality) * [Stability](https://docs.qbox.re/release#stability) * [Dependencies](https://docs.qbox.re/release#dependencies) * [Release Automation & Documentation](https://docs.qbox.re/release#release-automation--documentation) --- # Server Events | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_diving/events/server#__docusaurus_skipToContent_fallback) On this page warning These events **MUST NOT** be triggered by any other scripts. Non-Networked Events[​](https://docs.qbox.re/resources/qbx_diving/events/server#non-networked-events "Direct link to Non-Networked Events") -------------------------------------------------------------------------------------------------------------------------------------------- ### qbx\_diving:server:coralTaken[​](https://docs.qbox.re/resources/qbx_diving/events/server#qbx_divingserver "Direct link to qbx_divingserver") Triggered when a player has collected coral from the sea bed. AddEventHandler('qbx_diving:server:coralTaken', function(coords) end) * coords: `vector3` Networked Events[​](https://docs.qbox.re/resources/qbx_diving/events/server#networked-events "Direct link to Networked Events") -------------------------------------------------------------------------------------------------------------------------------- ### qbx\_diving:server:sellCoral[​](https://docs.qbox.re/resources/qbx_diving/events/server#qbx_divingserver-1 "Direct link to qbx_divingserver-1") Triggered when a player attempts to sell coral. Does not guarantee that the player has any coral in their inventory. RegisterNetEvent('qbx_diving:server:sellCoral', function() end) * [Non-Networked Events](https://docs.qbox.re/resources/qbx_diving/events/server#non-networked-events) * [qbx\_diving:server](https://docs.qbox.re/resources/qbx_diving/events/server#qbx_divingserver) * [Networked Events](https://docs.qbox.re/resources/qbx_diving/events/server#networked-events) * [qbx\_diving:server](https://docs.qbox.re/resources/qbx_diving/events/server#qbx_divingserver-1) --- # Server Exports | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_garages/exports/server#__docusaurus_skipToContent_fallback) On this page RegisterGarage[​](https://docs.qbox.re/resources/qbx_garages/exports/server#registergarage "Direct link to RegisterGarage") ---------------------------------------------------------------------------------------------------------------------------- Registers a garage at runtime. This is an alternative to defining them in the qbx\_garages config. exports.qbx_garages:RegisterGarage(name, config) SetVehicleGarage[​](https://docs.qbox.re/resources/qbx_garages/exports/server#setvehiclegarage "Direct link to SetVehicleGarage") ---------------------------------------------------------------------------------------------------------------------------------- Sets the vehicle's garage. Only affects the database. exports.qbx_garages:SetVehicleGarage(vehicleId, garageName) SetVehicleDepotPrice[​](https://docs.qbox.re/resources/qbx_garages/exports/server#setvehicledepotprice "Direct link to SetVehicleDepotPrice") ---------------------------------------------------------------------------------------------------------------------------------------------- Sets the price to take the car out of the depot exports.qbx_garages:SetVehicleDepotPrice(vehicleId, depotPrice) GetGarages[​](https://docs.qbox.re/resources/qbx_garages/exports/server#getgarages "Direct link to GetGarages") ---------------------------------------------------------------------------------------------------------------- Returns the registered garages exports.qbx_garages:GetGarages() * [RegisterGarage](https://docs.qbox.re/resources/qbx_garages/exports/server#registergarage) * [SetVehicleGarage](https://docs.qbox.re/resources/qbx_garages/exports/server#setvehiclegarage) * [SetVehicleDepotPrice](https://docs.qbox.re/resources/qbx_garages/exports/server#setvehicledepotprice) * [GetGarages](https://docs.qbox.re/resources/qbx_garages/exports/server#getgarages) --- # Client Callbacks | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_garages/callbacks/client#__docusaurus_skipToContent_fallback) On this page Can be used to support a custom UI. Called from the client. getGarages[​](https://docs.qbox.re/resources/qbx_garages/callbacks/client#getgarages "Direct link to getGarages") ------------------------------------------------------------------------------------------------------------------ Get the currently registered garages lib.callback.await('qbx_garages:server:getGarages') getGarageVehicles[​](https://docs.qbox.re/resources/qbx_garages/callbacks/client#getgaragevehicles "Direct link to getGarageVehicles") --------------------------------------------------------------------------------------------------------------------------------------- Get vehicles that the player has access to in the given garage. Does not return vehicles currently spawned in the world. lib.callback.await('qbx_garages:server:getGarageVehicles', false, garageName) isParkable[​](https://docs.qbox.re/resources/qbx_garages/callbacks/client#isparkable "Direct link to isParkable") ------------------------------------------------------------------------------------------------------------------ Returns true if the player can access the garage and the vehicle matches the garage filters lib.callback.await('qbx_garages:server:isParkable', false, garageName, netId) parkVehicle[​](https://docs.qbox.re/resources/qbx_garages/callbacks/client#parkvehicle "Direct link to parkVehicle") --------------------------------------------------------------------------------------------------------------------- Stores the vehicle in the garage and deletes the entity from the world lib.callback.await('qbx_garages:server:parkVehicle', false, netId, props, garageName) payDepotPrice[​](https://docs.qbox.re/resources/qbx_garages/callbacks/client#paydepotprice "Direct link to payDepotPrice") --------------------------------------------------------------------------------------------------------------------------- Takes vehicle's depot price from cash or bank and returns true if player paid. Does not update the vehicle's depot price after payment. lib.callback.await('qbx_garages:server:payDepotPrice', false, vehicleId) spawnVehicle[​](https://docs.qbox.re/resources/qbx_garages/callbacks/client#spawnvehicle "Direct link to spawnVehicle") ------------------------------------------------------------------------------------------------------------------------ Spawns the vehicle entity in the world at the given garage's access point. Checks that the player has required access permissions to do so. Attempts to give the player vehicle keys. lib.callback.await('qbx_garages:server:spawnVehicle', false, vehicleId, garageName, accessPointIndex) * [getGarages](https://docs.qbox.re/resources/qbx_garages/callbacks/client#getgarages) * [getGarageVehicles](https://docs.qbox.re/resources/qbx_garages/callbacks/client#getgaragevehicles) * [isParkable](https://docs.qbox.re/resources/qbx_garages/callbacks/client#isparkable) * [parkVehicle](https://docs.qbox.re/resources/qbx_garages/callbacks/client#parkvehicle) * [payDepotPrice](https://docs.qbox.re/resources/qbx_garages/callbacks/client#paydepotprice) * [spawnVehicle](https://docs.qbox.re/resources/qbx_garages/callbacks/client#spawnvehicle) --- # Convars | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_core/convars#__docusaurus_skipToContent_fallback) On this page Below is a list of convars used within qbx\_core. The value shown in the example is the default value for each convar. enableBridge[​](https://docs.qbox.re/resources/qbx_core/convars#enablebridge "Direct link to enableBridge") ------------------------------------------------------------------------------------------------------------ Enables or disables the qb-core bridge for compatibility with QBCore resources. setr qbx:enableBridge "true" Type: `boolean` enableQueue[​](https://docs.qbox.re/resources/qbx_core/convars#enablequeue "Direct link to enableQueue") --------------------------------------------------------------------------------------------------------- Enables or disables the built-in qbx\_core queuing system. set qbx:enableQueue "true" Type: `boolean` bucketLockdownMode[​](https://docs.qbox.re/resources/qbx_core/convars#bucketlockdownmode "Direct link to bucketLockdownMode") ------------------------------------------------------------------------------------------------------------------------------ Sets entity lockdown mode for bucket 0. See [`SET_ROUTING_BUCKET_ENTITY_LOCKDOWN_MODE`](https://docs.fivem.net/natives/?_0xA0F2201F) for more information. set qbx:bucketLockdownMode "inactive" Type: `'inactive' | 'relaxed' | 'strict'` discordLink[​](https://docs.qbox.re/resources/qbx_core/convars#discordlink "Direct link to discordLink") --------------------------------------------------------------------------------------------------------- Sets the Discord link for kick messages. warning This convar is only used by the qb-core bridge, and the deprecated `utils` module. set qbx:discordLink "discord.gg/qbox" Type: `string` max\_jobs\_per\_player[​](https://docs.qbox.re/resources/qbx_core/convars#max_jobs_per_player "Direct link to max_jobs_per_player") ------------------------------------------------------------------------------------------------------------------------------------ Sets the maximum number of jobs a player can have with the built-in multijob. set qbx:max_jobs_per_player 1 Type: `integer` max\_gangs\_per\_player[​](https://docs.qbox.re/resources/qbx_core/convars#max_gangs_per_player "Direct link to max_gangs_per_player") --------------------------------------------------------------------------------------------------------------------------------------- Sets the maximum number of gangs a player can have with the built-in multigang. set qbx:max_gangs_per_player 1 Type: `integer` setjob\_replaces[​](https://docs.qbox.re/resources/qbx_core/convars#setjob_replaces "Direct link to setjob_replaces") ---------------------------------------------------------------------------------------------------------------------- Controls if the `/setjob` command replaces or adds a job to a player. set qbx:setjob_replaces "true" Type: `boolean` setgang\_replaces[​](https://docs.qbox.re/resources/qbx_core/convars#setgang_replaces "Direct link to setgang_replaces") ------------------------------------------------------------------------------------------------------------------------- Controls if the `/setgang` command replaces or adds a gang to a player. set qbx:setgang_replaces "true" Type: `boolean` cleanPlayerGroups[​](https://docs.qbox.re/resources/qbx_core/convars#cleanplayergroups "Direct link to cleanPlayerGroups") --------------------------------------------------------------------------------------------------------------------------- Controls if the `player_groups` SQL table is automatically cleaned of invalid groups (jobs/gangs) on startup. set qbx:cleanPlayerGroups "true" Type: `boolean` allowMethodOverrides[​](https://docs.qbox.re/resources/qbx_core/convars#allowmethodoverrides "Direct link to allowMethodOverrides") ------------------------------------------------------------------------------------------------------------------------------------ Enables or disables the ability of resources to override existing methods in player object. set qbx:allowMethodOverrides "true" Type: `boolean` disableOverrideWarning[​](https://docs.qbox.re/resources/qbx_core/convars#disableoverridewarning "Direct link to disableOverrideWarning") ------------------------------------------------------------------------------------------------------------------------------------------ Enables or disables warning from resources overriding existing methods in player object. set qbx:disableOverrideWarning "false" Type: `boolean` enableVehiclePersistence[​](https://docs.qbox.re/resources/qbx_core/convars#enablevehiclepersistence "Direct link to enableVehiclePersistence") ------------------------------------------------------------------------------------------------------------------------------------------------ When enabled, player owned vehicles deleted by the server which have persistence enabled on them (either via having spawned using `qbx.spawnVehicle` or through `exports.qbx_core:EnablePersistence`), will be respawned with the same properties as when the vehicle was deleted. This is a fix to a FiveM bug which can result in vehicles randomly being deleted; ensuring that vehicles that players leave, will be there when they return. setr qbx:enableVehiclePersistence "false" Type: `boolean` vehiclePersistenceType[​](https://docs.qbox.re/resources/qbx_core/convars#vehiclepersistencetype "Direct link to vehiclePersistenceType") ------------------------------------------------------------------------------------------------------------------------------------------ When set to "full", will also spawn back player owned vehicles after server restarts. setr qbx:vehiclePersistenceType "semi" Type: `string` acknowledge[​](https://docs.qbox.re/resources/qbx_core/convars#acknowledge "Direct link to acknowledge") --------------------------------------------------------------------------------------------------------- Enables or disabled the Qbox documentation console message. set qbx:acknowledge "false" Type: `boolean` motd[​](https://docs.qbox.re/resources/qbx_core/convars#motd "Direct link to motd") ------------------------------------------------------------------------------------ The message displayed to players in the chat after loading in. set qbx:motd "

Welcome to Qbox!
Learn more at docs.qbox.re

" * [enableBridge](https://docs.qbox.re/resources/qbx_core/convars#enablebridge) * [enableQueue](https://docs.qbox.re/resources/qbx_core/convars#enablequeue) * [bucketLockdownMode](https://docs.qbox.re/resources/qbx_core/convars#bucketlockdownmode) * [discordLink](https://docs.qbox.re/resources/qbx_core/convars#discordlink) * [max\_jobs\_per\_player](https://docs.qbox.re/resources/qbx_core/convars#max_jobs_per_player) * [max\_gangs\_per\_player](https://docs.qbox.re/resources/qbx_core/convars#max_gangs_per_player) * [setjob\_replaces](https://docs.qbox.re/resources/qbx_core/convars#setjob_replaces) * [setgang\_replaces](https://docs.qbox.re/resources/qbx_core/convars#setgang_replaces) * [cleanPlayerGroups](https://docs.qbox.re/resources/qbx_core/convars#cleanplayergroups) * [allowMethodOverrides](https://docs.qbox.re/resources/qbx_core/convars#allowmethodoverrides) * [disableOverrideWarning](https://docs.qbox.re/resources/qbx_core/convars#disableoverridewarning) * [enableVehiclePersistence](https://docs.qbox.re/resources/qbx_core/convars#enablevehiclepersistence) * [vehiclePersistenceType](https://docs.qbox.re/resources/qbx_core/convars#vehiclepersistencetype) * [acknowledge](https://docs.qbox.re/resources/qbx_core/convars#acknowledge) * [motd](https://docs.qbox.re/resources/qbx_core/convars#motd) --- # Getting Started | Qbox Documentation [Skip to main content](https://docs.qbox.re/tebex/cdn/getting-started#__docusaurus_skipToContent_fallback) The moment you support us on [Ko-fi](https://ko-fi.com/qbox) you will receive the appropriate roles in Discord (make sure to link your Discord account to your Ko-fi account so you actually receive your Discord benefits). Now head to [https://cdn.qbox.re/](https://cdn.qbox.re/) and authenticate with your Discord account. From here on out you will have access to all the dashboards. * The main dashboard will show you your current storage usage, the amount of files you have uploaded, and your API token (if generated at all). * Next we have the file management section. Where you can upload new files, delete existing files, and view your files in either a list or grid view with filters for file types. * And lastly we have the organization management section. Where you can create new organizations, view existing organizations, and manage your organization users. ![](https://media.qbox.re/image/-1zYTdrhkxnk6odFDgGt38VqAZOKkTMEZs.png) ![](https://media.qbox.re/image/uLIxugsi6T_0j4tUmqOWrWmlMgJRfFqevt.png) ![](https://media.qbox.re/image/U2gqmKoo5okD0G-yACuqImTgTz33JGKN.png) --- # πŸ–ΌοΈ CDN | Qbox Documentation [Skip to main content](https://docs.qbox.re/tebex/cdn#__docusaurus_skipToContent_fallback) On this page ![](https://media.qbox.re/image/xyw_jHWnWJ1DQgzeEXYRnqbtsx7LyL9PrrOiXs.png) ![](https://media.qbox.re/image/QbhneL95Gzgm7DOXGdpON4V9t-H20Peu2fHvroOFx.gif) [Get it on Ko-fi](https://ko-fi.com/qbox) γ…€ The Qbox CDN is a powerful content delivery network powered by Cloudflare. Deliver your static assets with lightning speed and reliability worldwide. Who is this for?[​](https://docs.qbox.re/tebex/cdn#who-is-this-for "Direct link to Who is this for?") ------------------------------------------------------------------------------------------------------ Anyone running a "phone" script that has the ability to take in-game pictures. Or similar scripts that need to upload images and the like to a permanent location. What do I get?[​](https://docs.qbox.re/tebex/cdn#what-do-i-get "Direct link to What do I get?") ------------------------------------------------------------------------------------------------ You'll get 20 | 60 | 120 GB of storage space, depending on your Ko-fi tier. With a complete dashboard to manage your files, you can easily upload, delete, and view your assets. And at the time of writing, limited organizational support. * [Who is this for?](https://docs.qbox.re/tebex/cdn#who-is-this-for) * [What do I get?](https://docs.qbox.re/tebex/cdn#what-do-i-get) --- # Discord Rich Presence | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_core/discord#__docusaurus_skipToContent_fallback) On this page info The config file that we will be editing is inside `qbx_core/configs/client.lua`. See [https://github.com/Qbox-project/qbx\_core/blob/424541030f1d60548d55a2172e4f1e310a9503b2/config/client.lua#L54-L78](https://github.com/Qbox-project/qbx_core/blob/424541030f1d60548d55a2172e4f1e310a9503b2/config/client.lua#L54-L78) 1\. Create a Discord Application[​](https://docs.qbox.re/resources/qbx_core/discord#1-create-a-discord-application "Direct link to 1. Create a Discord Application") --------------------------------------------------------------------------------------------------------------------------------------------------------------------- **First you need to create a Discord application. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and create a new application.** ![Create a new application](https://docs.qbox.re/assets/images/step_1-1b70e2dafc87b4082987e0b40f8d7bf4.png) **Now copy the Application ID and paste it the config file.** ![Copy the Application ID](https://docs.qbox.re/assets/images/step_2-a052ff3e644ccc58946143c10b9ca62b.png) ![Paste the Application ID](https://docs.qbox.re/assets/images/step_3-b57f8b03b36d80e6a9dd58f286a259cd.png) 2\. Upload an Image[​](https://docs.qbox.re/resources/qbx_core/discord#2-upload-an-image "Direct link to 2. Upload an Image") ------------------------------------------------------------------------------------------------------------------------------ **Discord rich presence makes use of images to display on the rich presence. You can upload images in the `Rich Presence` tab of your application. Then click on `Add Image(s)`.** ![Upload an image](https://docs.qbox.re/assets/images/step_4-749bf0f2e0675779229fd8c8b86eccd5.png) 3\. Edit the Config File[​](https://docs.qbox.re/resources/qbx_core/discord#3-edit-the-config-file "Direct link to 3. Edit the Config File") --------------------------------------------------------------------------------------------------------------------------------------------- Now all that is left to do for you is editing the config file however you like. `icon` will be the image name. In our case `duck`. And the text will be what is displayed on Discord when you hover over the image. You can also change the contents of the buttons or delete them entirely. Just remove [these lines](https://github.com/Qbox-project/qbx_core/blob/424541030f1d60548d55a2172e4f1e310a9503b2/client/discord.lua#L17-L18) in your core ![Edit the config file](https://docs.qbox.re/assets/images/step_5-b528633cbe9519189c1b9c9158672758.png) ![Result](https://docs.qbox.re/assets/images/result-c74b1d6c507c353f6c4fa8d5593e99bf.png) warning There is now a setting in FiveM where you can disable the Discord Rich Presence. If you have this enabled, the Discord Rich Presence will not show up. ![Disable Discord Rich Presence](https://docs.qbox.re/assets/images/warning-67c3332a61e844ed9aa3de67956d42af.png) * [1\. Create a Discord Application](https://docs.qbox.re/resources/qbx_core/discord#1-create-a-discord-application) * [2\. Upload an Image](https://docs.qbox.re/resources/qbx_core/discord#2-upload-an-image) * [3\. Edit the Config File](https://docs.qbox.re/resources/qbx_core/discord#3-edit-the-config-file) --- # Convars | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_management/convars#__docusaurus_skipToContent_fallback) On this page Below is a list of convars used within qbx\_management. The value shown in the example is the default value for each convar. enableGroupManagement[​](https://docs.qbox.re/resources/qbx_management/convars#enablegroupmanagement "Direct link to enableGroupManagement") --------------------------------------------------------------------------------------------------------------------------------------------- Set to `"true"` to allow bosses to manage job/gang grades. Specifically the grade name. setr qbx:enableGroupManagement "false" Type: `boolean` * [enableGroupManagement](https://docs.qbox.re/resources/qbx_management/convars#enablegroupmanagement) --- # Commands | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_core/commands#__docusaurus_skipToContent_fallback) On this page Below is a list of commands available from qbx\_core. These commands are located at `qbx-core/server/commands.lua` for further inspection Teleport[​](https://docs.qbox.re/resources/qbx_core/commands#teleport "Direct link to Teleport") ------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group TP To Player or Coords (Admin Only) Command: `/tp` Parameters: * `ID of player or X position` * required * Type: `integer` * `Y position` * optional * Type: `integer` * `Z position` * optional * Type: `integer` Example: /tp 2835.24, 1505.68, 24.72 -- Teleport to coordinates/tp 23 -- Teleport to location of player with id 23 * * * Teleport to Marker[​](https://docs.qbox.re/resources/qbx_core/commands#teleport-to-marker "Direct link to Teleport to Marker") ------------------------------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group TP To Marker (Admin Only) Command: `/tpm` Example: /tpm -- Teleport to your waypoint marker * * * Toggle PVP[​](https://docs.qbox.re/resources/qbx_core/commands#toggle-pvp "Direct link to Toggle PVP") ------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Toggle PVP on the server (Admin Only) Command: `/togglepvp` Example: /togglepvp -- Enable or disable server‑wide PVP * * * Add Permission[​](https://docs.qbox.re/resources/qbx_core/commands#add-permission "Direct link to Add Permission") ------------------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Give Player Permissions (God Only) Command: `/addpermission` Parameters: * `ID of player` * required * Type: `integer` * `Permission level` * required * Type: `string` Example: /addpermission 23 god -- Grant the player with ID 23 the β€œgod” permission * * * Remove Permission[​](https://docs.qbox.re/resources/qbx_core/commands#remove-permission "Direct link to Remove Permission") ---------------------------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Remove Player Permissions (God Only) Command: `/removepermission` Parameters: * `ID of player` * required * Type: `integer` * `Permission level` * required * Type: `string` Example: /removepermission 23 god -- Revoke the β€œgod” permission from player 23 * * * Open Server[​](https://docs.qbox.re/resources/qbx_core/commands#open-server "Direct link to Open Server") ---------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Open the server for everyone (Admin Only) Command: `/openserver` Example: /openserver -- Lift the server lock and allow all players to join * * * Close Server[​](https://docs.qbox.re/resources/qbx_core/commands#close-server "Direct link to Close Server") ------------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Close the server for people without permissions (Admin Only) Command: `/closeserver` Parameters: * `Reason for closing (optional)` * optional * Type: `string` Example: /closeserver Maintenance restart in 5 minutes * * * Spawn Vehicle[​](https://docs.qbox.re/resources/qbx_core/commands#spawn-vehicle "Direct link to Spawn Vehicle") ---------------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Spawn Vehicle (Admin Only) Command: `/car` Parameters: * `Model name of the vehicle` * required * Type: `string` * `Keep the vehicle you\'re in right now` * optional * Type: `boolean` Example: /car sultan -- Spawn a Sultan and delete your current vehicle/car sultan true -- Spawn a Sultan but keep your current vehicle * * * Delete Vehicle[​](https://docs.qbox.re/resources/qbx_core/commands#delete-vehicle "Direct link to Delete Vehicle") ------------------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Delete Vehicle (Admin Only) Command: `/dv` Parameters: * `Radius to delete vehicles in (meters)` * optional * Type: `number` Example: /dv -- Delete the vehicle you are in/dv 20 -- Delete all vehicles within a 20 meter radius * * * Give Money[​](https://docs.qbox.re/resources/qbx_core/commands#give-money "Direct link to Give Money") ------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Give a Player Money (Admin Only) Command: `/givemoney` Parameters: * `Player ID` * required * Type: `integer` * `Type of money (cash, bank, crypto)` * required * Type: `string` * `Amount of money` * required * Type: `number` Example: /givemoney 23 cash 1000 -- Give player 23 $1,000 in cash * * * Set Money[​](https://docs.qbox.re/resources/qbx_core/commands#set-money "Direct link to Set Money") ---------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Set Player Money Amount (Admin Only) Command: `/setmoney` Parameters: * `Player ID` * required * Type: `integer` * `Type of money (cash, bank, crypto)` * required * Type: `string` * `Amount of money` * required * Type: `number` Example: /setmoney 23 bank 5000 -- Set player 23’s bank balance to $5,000 * * * Job Info[​](https://docs.qbox.re/resources/qbx_core/commands#job-info "Direct link to Job Info") ------------------------------------------------------------------------------------------------- Check Your Job Command: `/job` Example: /job -- Display your current job, grade, and duty status * * * Set Job[​](https://docs.qbox.re/resources/qbx_core/commands#set-job "Direct link to Set Job") ---------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Set a Player’s Job (Admin Only) Command: `/setjob` Parameters: * `Player ID` * required * Type: `integer` * `Job name` * required * Type: `string` * `Job grade` * optional * Type: `number` Example: /setjob 23 police 3 -- Make player 23 a Police Sergeant (grade 3) * * * Change Job[​](https://docs.qbox.re/resources/qbx_core/commands#change-job "Direct link to Change Job") ------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Change Active Job of Player (Admin Only) Command: `/changejob` Parameters: * `Player ID` * required * Type: `integer` * `Job name` * required * Type: `string` Example: /changejob 23 tow -- Switch player 23’s active job to Tow Truck Driver * * * Add Job[​](https://docs.qbox.re/resources/qbx_core/commands#add-job "Direct link to Add Job") ---------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Add Job to Player (Admin Only) Command: `/addjob` Parameters: * `Player ID` * required * Type: `integer` * `Job name` * required * Type: `string` * `Job grade` * optional * Type: `number` Example: /addjob 23 mechanic -- Give player 23 the Mechanic job at grade 0 * * * Remove Job[​](https://docs.qbox.re/resources/qbx_core/commands#remove-job "Direct link to Remove Job") ------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Remove Job from Player (Admin Only) Command: `/removejob` Parameters: * `Player ID` * required * Type: `integer` * `Job name` * required * Type: `string` Example: /removejob 23 mechanic -- Remove the Mechanic job from player 23 * * * Gang Info[​](https://docs.qbox.re/resources/qbx_core/commands#gang-info "Direct link to Gang Info") ---------------------------------------------------------------------------------------------------- Check Your Gang Command: `/gang` Example: /gang -- Display your current gang and grade * * * Set Gang[​](https://docs.qbox.re/resources/qbx_core/commands#set-gang "Direct link to Set Gang") ------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Set a Player’s Gang (Admin Only) Command: `/setgang` Parameters: * `Player ID` * required * Type: `integer` * `Gang name` * required * Type: `string` * `Gang grade` * optional * Type: `number` Example: /setgang 23 ballas 2 -- Put player 23 in the Ballas gang at grade 2 * * * Out of Character Chat[​](https://docs.qbox.re/resources/qbx_core/commands#out-of-character-chat "Direct link to Out of Character Chat") ---------------------------------------------------------------------------------------------------------------------------------------- OOC Chat Message Command: `/ooc` Parameters: * `Message to send` * required * Type: `string` Example: /ooc Anyone selling a car? -- Send an OOC message within 20 meters * * * Me Action[​](https://docs.qbox.re/resources/qbx_core/commands#me-action "Direct link to Me Action") ---------------------------------------------------------------------------------------------------- Show local message Command: `/me` Parameters: * `Message to send` * required * Type: `string` Example: /me checks the engine -- Role‑play action text visible to nearby players * * * Check ID[​](https://docs.qbox.re/resources/qbx_core/commands#check-id "Direct link to Check ID") ------------------------------------------------------------------------------------------------- Check your server ID Command: `/id` Example: /id -- Display your current player ID * * * Logout[​](https://docs.qbox.re/resources/qbx_core/commands#logout "Direct link to Logout") ------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Log out of your current character (Admin Only) Command: `/logout` Example: /logout -- Force your character to log out * * * Delete Character[​](https://docs.qbox.re/resources/qbx_core/commands#delete-character "Direct link to Delete Character") ------------------------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group Delete a player’s character (Admin Only) Command: `/deletechar` Parameters: * `Player ID` * required * Type: `integer` Example: /deletechar 23 -- Permanently delete the character belonging to player 23 * [Teleport](https://docs.qbox.re/resources/qbx_core/commands#teleport) * [Teleport to Marker](https://docs.qbox.re/resources/qbx_core/commands#teleport-to-marker) * [Toggle PVP](https://docs.qbox.re/resources/qbx_core/commands#toggle-pvp) * [Add Permission](https://docs.qbox.re/resources/qbx_core/commands#add-permission) * [Remove Permission](https://docs.qbox.re/resources/qbx_core/commands#remove-permission) * [Open Server](https://docs.qbox.re/resources/qbx_core/commands#open-server) * [Close Server](https://docs.qbox.re/resources/qbx_core/commands#close-server) * [Spawn Vehicle](https://docs.qbox.re/resources/qbx_core/commands#spawn-vehicle) * [Delete Vehicle](https://docs.qbox.re/resources/qbx_core/commands#delete-vehicle) * [Give Money](https://docs.qbox.re/resources/qbx_core/commands#give-money) * [Set Money](https://docs.qbox.re/resources/qbx_core/commands#set-money) * [Job Info](https://docs.qbox.re/resources/qbx_core/commands#job-info) * [Set Job](https://docs.qbox.re/resources/qbx_core/commands#set-job) * [Change Job](https://docs.qbox.re/resources/qbx_core/commands#change-job) * [Add Job](https://docs.qbox.re/resources/qbx_core/commands#add-job) * [Remove Job](https://docs.qbox.re/resources/qbx_core/commands#remove-job) * [Gang Info](https://docs.qbox.re/resources/qbx_core/commands#gang-info) * [Set Gang](https://docs.qbox.re/resources/qbx_core/commands#set-gang) * [Out of Character Chat](https://docs.qbox.re/resources/qbx_core/commands#out-of-character-chat) * [Me Action](https://docs.qbox.re/resources/qbx_core/commands#me-action) * [Check ID](https://docs.qbox.re/resources/qbx_core/commands#check-id) * [Logout](https://docs.qbox.re/resources/qbx_core/commands#logout) * [Delete Character](https://docs.qbox.re/resources/qbx_core/commands#delete-character) --- # Server Exports | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_management/exports/server#__docusaurus_skipToContent_fallback) On this page RegisterBossMenu[​](https://docs.qbox.re/resources/qbx_management/exports/server#registerbossmenu "Direct link to RegisterBossMenu") ------------------------------------------------------------------------------------------------------------------------------------- Creates a boss menu. warning This is a runtime-only change. This won't persist across restarts and won't modify files. exports.qbx_management:RegisterBossMenu(menuInfo) * menuInfo: `table` * groupName: `string` * type: `'gang' | 'job'` * coords: `vector3` * size?: `vector3` * Default: `vec3(1.5, 1.5, 1.5)` * rotation?: `number` * Default: `0.0` * [RegisterBossMenu](https://docs.qbox.re/resources/qbx_management/exports/server#registerbossmenu) --- # Client Exports | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_management/exports/client#__docusaurus_skipToContent_fallback) On this page OpenBossMenu[​](https://docs.qbox.re/resources/qbx_management/exports/client#openbossmenu "Direct link to OpenBossMenu") ------------------------------------------------------------------------------------------------------------------------- Open the primary job or gang boss menu as long as you have the proper permissions. exports.qbx_management:OpenBossMenu(groupType) * groupType: `'gang' | 'job'` * [OpenBossMenu](https://docs.qbox.re/resources/qbx_management/exports/client#openbossmenu) --- # Client Exports | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_vehiclekeys/exports/client#__docusaurus_skipToContent_fallback) On this page HasKeys[​](https://docs.qbox.re/resources/qbx_vehiclekeys/exports/client#haskeys "Direct link to HasKeys") ----------------------------------------------------------------------------------------------------------- Returns whether the player has keys to the given vehicle entity exports.qbx_vehiclekeys:HasKeys(vehicle) * vehicle: `number` * [HasKeys](https://docs.qbox.re/resources/qbx_vehiclekeys/exports/client#haskeys) --- # Commands | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_vehiclekeys/commands#__docusaurus_skipToContent_fallback) On this page Below is a list of commands available from qbx\_vehiclekeys. These commands are located at `qbx-vehiclekeys/server/commands.lua` for further inspection * * * Give Keys[​](https://docs.qbox.re/resources/qbx_vehiclekeys/commands#give-keys "Direct link to Give Keys") ----------------------------------------------------------------------------------------------------------- info This command is available to **all players** (no special permission group required). Hand over the keys of your current vehicle to someone. If you omit the `id` parameter, the keys go to the closest playerβ€”or to every occupant of the vehicle if you’re all inside the same car. Command: `/givekeys` Parameters: Parameters: * `ID of player` * optional * Type: `integer` Example: /givekeys 42 -- give the keys to player ID 42/givekeys -- give the keys to the closest player (or everyone in the vehicle) * * * Give permanent keys[​](https://docs.qbox.re/resources/qbx_vehiclekeys/commands#give-permanent-keys "Direct link to Give permanent keys") ----------------------------------------------------------------------------------------------------------------------------------------- info This command is restricted to players in the `group.admin` permission group. Grant a player a permanent set of keys for the vehicle you’re currently inside (or last used). Command: `/addkeys` Parameters: Parameters: * `ID of player` * optional * Type: `integer` Example: /addkeys 23 -- give a key to player 23/addkeys -- give yourself a key for the current vehicle * * * * [Give Keys](https://docs.qbox.re/resources/qbx_vehiclekeys/commands#give-keys) * [Give permanent keys](https://docs.qbox.re/resources/qbx_vehiclekeys/commands#give-permanent-keys) --- # Client Events | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_core/events/client#__docusaurus_skipToContent_fallback) On this page warning These events **MUST NOT** be triggered by any other scripts. info Some of these events use custom types. You can learn more about those in the Types section of this resource. Non-Networked Events[​](https://docs.qbox.re/resources/qbx_core/events/client#non-networked-events "Direct link to Non-Networked Events") ------------------------------------------------------------------------------------------------------------------------------------------ ### OnPlayerLoaded[​](https://docs.qbox.re/resources/qbx_core/events/client#onplayerloaded "Direct link to OnPlayerLoaded") Triggered when the player finishes spawning. AddEventHandler('QBCore:Client:OnPlayerLoaded', function() end) Networked Events[​](https://docs.qbox.re/resources/qbx_core/events/client#networked-events "Direct link to Networked Events") ------------------------------------------------------------------------------------------------------------------------------ ### SetDuty[​](https://docs.qbox.re/resources/qbx_core/events/client#setduty "Direct link to SetDuty") Triggered when the player's job duty is updated. RegisterNetEvent('QBCore:Client:SetDuty', function(onDuty) end) * onDuty: `boolean` ### OnPermissionUpdate[​](https://docs.qbox.re/resources/qbx_core/events/client#onpermissionupdate "Direct link to OnPermissionUpdate") Triggered when the player's permissions are updated. Only works for permissions set via Qbox. RegisterNetEvent('QBCore:Client:OnPermissionUpdate', function() end) ### playerLoggedOut[​](https://docs.qbox.re/resources/qbx_core/events/client#playerloggedout "Direct link to playerLoggedOut") Triggered when the player logs out and no longer exists in qbx\_core's memory. RegisterNetEvent('qbx_core:client:playerLoggedOut', function() end) ### OnJobUpdate[​](https://docs.qbox.re/resources/qbx_core/events/client#onjobupdate "Direct link to OnJobUpdate") Triggered when the player's job is updated. RegisterNetEvent('QBCore:Client:OnJobUpdate', function(job) end) * job: [`PlayerJob`](https://docs.qbox.re/resources/qbx_core/types/player#playerjob) ### OnGangUpdate[​](https://docs.qbox.re/resources/qbx_core/events/client#ongangupdate "Direct link to OnGangUpdate") Triggered when the player's gang is updated. RegisterNetEvent('QBCore:Client:OnGangUpdate', function(gang) end) * gang: [`PlayerGang`](https://docs.qbox.re/resources/qbx_core/types/player#playergang) ### onGroupUpdate[​](https://docs.qbox.re/resources/qbx_core/events/client#ongroupupdate "Direct link to onGroupUpdate") Triggered when the player's groups are updated. If grade is nil then group was removed otherwise group was added RegisterNetEvent('qbx_core:client:onGroupUpdate', function(groupName, groupGrade) end) * groupName: `string` * groupGrade?: `number` ### OnMoneyChange[​](https://docs.qbox.re/resources/qbx_core/events/client#onmoneychange "Direct link to OnMoneyChange") Triggered when the player's cash/bank balance is updated. RegisterNetEvent('QBCore:Client:OnMoneyChange', function(moneytype, amount, operation, reason) end) * moneyType: `'cash' | 'bank' | 'crypto'` * amount: `number` * operation: `'add' | 'remove' | 'set'` * reason: `string` ### onSetMetaData[​](https://docs.qbox.re/resources/qbx_core/events/client#onsetmetadata "Direct link to onSetMetaData") Triggered when player.Functions.setMetaData() is used. RegisterNetEvent('qbx_core:client:onSetMetaData', function(key, oldValue, newValue) end) * key: `string` * oldValue: `any` * newValue: `any` * [Non-Networked Events](https://docs.qbox.re/resources/qbx_core/events/client#non-networked-events) * [OnPlayerLoaded](https://docs.qbox.re/resources/qbx_core/events/client#onplayerloaded) * [Networked Events](https://docs.qbox.re/resources/qbx_core/events/client#networked-events) * [SetDuty](https://docs.qbox.re/resources/qbx_core/events/client#setduty) * [OnPermissionUpdate](https://docs.qbox.re/resources/qbx_core/events/client#onpermissionupdate) * [playerLoggedOut](https://docs.qbox.re/resources/qbx_core/events/client#playerloggedout) * [OnJobUpdate](https://docs.qbox.re/resources/qbx_core/events/client#onjobupdate) * [OnGangUpdate](https://docs.qbox.re/resources/qbx_core/events/client#ongangupdate) * [onGroupUpdate](https://docs.qbox.re/resources/qbx_core/events/client#ongroupupdate) * [OnMoneyChange](https://docs.qbox.re/resources/qbx_core/events/client#onmoneychange) * [onSetMetaData](https://docs.qbox.re/resources/qbx_core/events/client#onsetmetadata) --- # Server Exports | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_vehiclekeys/exports/server#__docusaurus_skipToContent_fallback) On this page HasKeys[​](https://docs.qbox.re/resources/qbx_vehiclekeys/exports/server#haskeys "Direct link to HasKeys") ----------------------------------------------------------------------------------------------------------- Returns whether the player has keys to the given vehicle entity exports.qbx_vehiclekeys:HasKeys(source, vehicle) * source: `number` * vehicle: `number` GiveKeys[​](https://docs.qbox.re/resources/qbx_vehiclekeys/exports/server#givekeys "Direct link to GiveKeys") -------------------------------------------------------------------------------------------------------------- Gives keys to a player so that they can unlock/lock the doors and toggle the engine. Notifies the player unless skipNotification is true. exports.qbx_vehiclekeys:GiveKeys(source, vehicle, skipNotification) * source: `number` * vehicle: `number` * skipNotification?: `boolean` RemoveKeys[​](https://docs.qbox.re/resources/qbx_vehiclekeys/exports/server#removekeys "Direct link to RemoveKeys") -------------------------------------------------------------------------------------------------------------------- Removes keys from the player. Notifies the player unless skipNotification is true. exports.qbx_vehiclekeys:RemoveKeys(source, vehicle, skipNotification) * source: `number` * vehicle: `number` * skipNotification?: `boolean` * [HasKeys](https://docs.qbox.re/resources/qbx_vehiclekeys/exports/server#haskeys) * [GiveKeys](https://docs.qbox.re/resources/qbx_vehiclekeys/exports/server#givekeys) * [RemoveKeys](https://docs.qbox.re/resources/qbx_vehiclekeys/exports/server#removekeys) --- # LB Phone | Qbox Documentation [Skip to main content](https://docs.qbox.re/tebex/cdn/setup/lb-phone#__docusaurus_skipToContent_fallback) On this page This guide will go over how to set up the Qbox CDN with [LB Phone](https://store.lbscripts.com/package/5356987) Whitelisting the CDN Domain[​](https://docs.qbox.re/tebex/cdn/setup/lb-phone#whitelisting-the-cdn-domain "Direct link to Whitelisting the CDN Domain") ------------------------------------------------------------------------------------------------------------------------------------------------------- First we'll need to whitelist the qbox domain. Navigate to `config > config.lua` and search for the following `Config.UploadWhitelistedDomains`. In this table you'll need to add `qbox.re` to the list of domains. It should look like this: -- Set to false/empty to disableConfig.UploadWhitelistedDomains = { -- domains that are allowed to upload images to the phone (prevent using devtools to upload images) "fivemanage.com", "fmfile.com", "qbox.re", "cfx.re" -- lb-upload} Changing upload method[​](https://docs.qbox.re/tebex/cdn/setup/lb-phone#changing-upload-method "Direct link to Changing upload method") ---------------------------------------------------------------------------------------------------------------------------------------- In the same config file we will search for `Config.UploadMethod`. This will give you 3 different options for all the file types. Change them all to `qbox` like so: Config.UploadMethod.Video = "Qbox" -- "Fivemanage" or "LBUpload" or "Custom"Config.UploadMethod.Image = "Qbox" -- "Fivemanage" or "LBUpload" or "Custom"Config.UploadMethod.Audio = "Qbox" -- "Fivemanage" or "LBUpload" or "Custom" Adding the Qbox upload method[​](https://docs.qbox.re/tebex/cdn/setup/lb-phone#adding-the-qbox-upload-method "Direct link to Adding the Qbox upload method") ------------------------------------------------------------------------------------------------------------------------------------------------------------- Now we are done in the config file. Next we will go to `shared > upload.lua`. Here you will see a big table with all kinds of upload methods for different services. We will be adding one for Qbox in here. danger Add this **inside** the `UploadMethods` table, alongside all the other options! Qbox = { Default = { url = "https://cdn.qbox.re/api/storage/upload", field = "file", headers = { ["Authorization"] = "API_KEY" }, success = { path = "url" }, },}, This is what your complete table would look like ![](https://media.qbox.re/image/i5KoiHvZGwAgAhDJBebLsLSxxwD0ZCu5Xhlek5v.png) Adding your API key[​](https://docs.qbox.re/tebex/cdn/setup/lb-phone#adding-your-api-key "Direct link to Adding your API key") ------------------------------------------------------------------------------------------------------------------------------- Navigate to `server > apiKeys.lua`. Here you will see a table with all the API keys for the different upload methods. Simply add the same API key that you generated in the Qbox CDN dashboard. API_KEYS = { Video = "API_KEY_HERE", Image = "API_KEY_HERE", Audio = "API_KEY_HERE",} * [Whitelisting the CDN Domain](https://docs.qbox.re/tebex/cdn/setup/lb-phone#whitelisting-the-cdn-domain) * [Changing upload method](https://docs.qbox.re/tebex/cdn/setup/lb-phone#changing-upload-method) * [Adding the Qbox upload method](https://docs.qbox.re/tebex/cdn/setup/lb-phone#adding-the-qbox-upload-method) * [Adding your API key](https://docs.qbox.re/tebex/cdn/setup/lb-phone#adding-your-api-key) --- # Hooks | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_vehicles/exports/hooks#__docusaurus_skipToContent_fallback) On this page Event hooks allow 3rd party resources to define new behavior without modifying qbx\_vehicles code directly. registerHook[​](https://docs.qbox.re/resources/qbx_vehicles/exports/hooks#registerhook "Direct link to registerHook") ---------------------------------------------------------------------------------------------------------------------- Registers a callback function to be triggered by a resource. Returning false from the callback function cancels the event exports.qbx_vehicles:registerHook(eventName, function(payload) end) * eventName: `string` * payload: `table` Return: * hookId: `number` ### createPlayerVehicle[​](https://docs.qbox.re/resources/qbx_vehicles/exports/hooks#createplayervehicle "Direct link to createPlayerVehicle") Triggered when a new vehicle is created. Return `false` to cancel the creation * payload: `table` * citizenid: `string` * garage: `string` * props: table ### changeVehicleOwner[​](https://docs.qbox.re/resources/qbx_vehicles/exports/hooks#changevehicleowner "Direct link to changeVehicleOwner") Triggered when a vehicle's owner changes. Return `false` to cancel the change. * payload: `table` * vehicleId: `integer` * newCitizenId: `string` removeHooks[​](https://docs.qbox.re/resources/qbx_vehicles/exports/hooks#removehooks "Direct link to removeHooks") ------------------------------------------------------------------------------------------------------------------- Remove a previously registered hook by it's id. If no id is provided then all hooks registered by the resource are removed. exports.qbx_vehicles:removeHooks(id) * id?: `number` * [registerHook](https://docs.qbox.re/resources/qbx_vehicles/exports/hooks#registerhook) * [createPlayerVehicle](https://docs.qbox.re/resources/qbx_vehicles/exports/hooks#createplayervehicle) * [changeVehicleOwner](https://docs.qbox.re/resources/qbx_vehicles/exports/hooks#changevehicleowner) * [removeHooks](https://docs.qbox.re/resources/qbx_vehicles/exports/hooks#removehooks) --- # Server Events | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_core/events/server#__docusaurus_skipToContent_fallback) On this page warning These events **MUST NOT** be triggered by any other scripts. info Some of these events use custom types. You can learn more about those in the Types section of this resource. Non-Networked Events[​](https://docs.qbox.re/resources/qbx_core/events/server#non-networked-events "Direct link to Non-Networked Events") ------------------------------------------------------------------------------------------------------------------------------------------ ### OnPlayerUnload[​](https://docs.qbox.re/resources/qbx_core/events/server#onplayerunload "Direct link to OnPlayerUnload") Triggered when aplayer begins the process of logging out. There is no guarantee that the player still exists in qbx\_core's memory at the time this event is triggered. AddEventHandler('QBCore:Server:OnPlayerUnload', function(source) end) * source: `integer` ### OnPermissionUpdate[​](https://docs.qbox.re/resources/qbx_core/events/server#onpermissionupdate "Direct link to OnPermissionUpdate") Triggered when the player's permissions are updated. Only applies to permissions created through QB permission functions. AddEventHandler('QBCore:Server:OnPermissionUpdate', function(source) end) * source: `integer` ### OnJobUpdate[​](https://docs.qbox.re/resources/qbx_core/events/server#onjobupdate "Direct link to OnJobUpdate") Triggered when a player's job updates. AddEventHandler('QBCore:Server:OnJobUpdate', function(source, job) end) * source: `integer` * job: [`PlayerJob`](https://docs.qbox.re/resources/qbx_core/types/player#playerjob) ### OnGangUpdate[​](https://docs.qbox.re/resources/qbx_core/events/server#ongangupdate "Direct link to OnGangUpdate") Triggered when a player's gang updates. AddEventHandler('QBCore:Server:OnGangUpdate', function(source, gang) end) * source: `integer` * gang: [`PlayerGang`](https://docs.qbox.re/resources/qbx_core/types/player#playergang) ### SetDuty[​](https://docs.qbox.re/resources/qbx_core/events/server#setduty "Direct link to SetDuty") Triggered when a player's job duty updates. AddEventHandler('QBCore:Server:SetDuty', function(source, onDuty) end) * source: `integer` * onDuty: `boolean` ### onGroupUpdate[​](https://docs.qbox.re/resources/qbx_core/events/server#ongroupupdate "Direct link to onGroupUpdate") Triggered when the player's groups are updated. If grade is nil then group was removed otherwise group was added AddEventHandler('qbx_core:server:onGroupUpdate', function(source, groupName, groupGrade) end) * source: `integer` * groupName: `string` * groupGrade?: `number` ### OnMoneyChange[​](https://docs.qbox.re/resources/qbx_core/events/server#onmoneychange "Direct link to OnMoneyChange") Triggered when a player's cash/bank balance updates. AddEventHandler('QBCore:Server:OnMoneyChange', function(source, moneyType, amount, operation, reason) end) * source: `integer` * moneyType: `'cash' | 'bank' | 'crypto'` * amount: `number` * operation: `'add' | 'remove' | 'set'` * reason: `string` ### onSetMetaData[​](https://docs.qbox.re/resources/qbx_core/events/server#onsetmetadata "Direct link to onSetMetaData") Triggered when player.Functions.setMetaData() is used. AddEventHandler('qbx_core:server:onSetMetaData', function(key, oldValue, newValue, source) end) * key: `string` * oldValue: `any` * newValue: `any` * source: `number` Networked Events[​](https://docs.qbox.re/resources/qbx_core/events/server#networked-events "Direct link to Networked Events") ------------------------------------------------------------------------------------------------------------------------------ ### OnPlayerLoaded[​](https://docs.qbox.re/resources/qbx_core/events/server#onplayerloaded "Direct link to OnPlayerLoaded") Triggered when a player has finished loading. RegisterNetEvent('QBCore:Server:OnPlayerLoaded', function() end) * [Non-Networked Events](https://docs.qbox.re/resources/qbx_core/events/server#non-networked-events) * [OnPlayerUnload](https://docs.qbox.re/resources/qbx_core/events/server#onplayerunload) * [OnPermissionUpdate](https://docs.qbox.re/resources/qbx_core/events/server#onpermissionupdate) * [OnJobUpdate](https://docs.qbox.re/resources/qbx_core/events/server#onjobupdate) * [OnGangUpdate](https://docs.qbox.re/resources/qbx_core/events/server#ongangupdate) * [SetDuty](https://docs.qbox.re/resources/qbx_core/events/server#setduty) * [onGroupUpdate](https://docs.qbox.re/resources/qbx_core/events/server#ongroupupdate) * [OnMoneyChange](https://docs.qbox.re/resources/qbx_core/events/server#onmoneychange) * [onSetMetaData](https://docs.qbox.re/resources/qbx_core/events/server#onsetmetadata) * [Networked Events](https://docs.qbox.re/resources/qbx_core/events/server#networked-events) * [OnPlayerLoaded](https://docs.qbox.re/resources/qbx_core/events/server#onplayerloaded) --- # Server Exports | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_vehicles/exports/server#__docusaurus_skipToContent_fallback) On this page CreatePlayerVehicle[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#createplayervehicle "Direct link to CreatePlayerVehicle") -------------------------------------------------------------------------------------------------------------------------------------------- Sets the owner of the vehicle, or if citizenid is nil, sets the vehicle to have no owner. exports.qbx_vehicles:CreatePlayerVehicle(request) * request: `table` * model: `string` * citizenid?: `string` * garage?: `string` * props?: [ox\_lib vehicle properties](https://github.com/CommunityOx/ox_lib/blob/master/resource/vehicleProperties/client.lua#L3) Returns: * vehicleId?: `integer` * errorResult?: `{code: string, message: string}` Error Codes: N/A DeletePlayerVehicles[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#deleteplayervehicles "Direct link to DeletePlayerVehicles") ----------------------------------------------------------------------------------------------------------------------------------------------- Delete player vehicles matching some identifier. Only handles deleting from the database. exports.qbx_vehicles:DeletePlayerVehicles(idType, idValue) * idType: `'citizenid' | 'license' | 'plate' | 'vehicleId'` * idValue: `string | number` Returns: * success: `boolean` * errorResult?: `{code: string, message: string}` Error Codes: N/A DoesPlayerVehiclePlateExist[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#doesplayervehicleplateexist "Direct link to DoesPlayerVehiclePlateExist") -------------------------------------------------------------------------------------------------------------------------------------------------------------------- Returns whether a player owned vehicle has the matching plate exports.qbx_vehicles:DoesPlayerVehiclePlateExist(plate) * plate: `string` Returns: `boolean` GetPlayerVehicle[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#getplayervehicle "Direct link to GetPlayerVehicle") ----------------------------------------------------------------------------------------------------------------------------------- Queries a player vehicle by vehicleId. Can optionally pass filter criteria. exports.qbx_vehicles:GetPlayerVehicle(vehicleId, filters) * vehicleId: `number` * filters?: [PlayerVehiclesFilters](https://docs.qbox.re/resources/qbx_vehicles/exports/server#playervehiclesfilters) Returns: [PlayerVehicle](https://docs.qbox.re/resources/qbx_vehicles/exports/server#playervehicle) ? GetPlayerVehicles[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#getplayervehicles "Direct link to GetPlayerVehicles") -------------------------------------------------------------------------------------------------------------------------------------- Queries player vehicles by various filter criteria. If no filters are set, queries all vehicles. exports.qbx_vehicles:GetPlayerVehicles(filters) * filters?: [PlayerVehiclesFilters](https://docs.qbox.re/resources/qbx_vehicles/exports/server#playervehiclesfilters) Returns: [PlayerVehicle](https://docs.qbox.re/resources/qbx_vehicles/exports/server#playervehicle) \[\] SetPlayerVehicleOwner[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#setplayervehicleowner "Direct link to SetPlayerVehicleOwner") -------------------------------------------------------------------------------------------------------------------------------------------------- Sets the owner of the vehicle, or if citizenid is nil, sets the vehicle to have no owner. exports.qbx_vehicles:SetPlayerVehicleOwner(vehicleId, citizenid) * vehicleId: `integer` * citizenid?: `string` Returns: * success: `boolean` * errorResult?: `{code: string, message: string}` Error Codes: N/A GetVehicleIdByPlate[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#getvehicleidbyplate "Direct link to GetVehicleIdByPlate") -------------------------------------------------------------------------------------------------------------------------------------------- Looks up the vehicleId with the given plate exports.qbx_vehicles:GetVehicleIdByPlate(plate) * plate: `string` Returns vehicleId?: `integer` SaveVehicle[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#savevehicle "Direct link to SaveVehicle") -------------------------------------------------------------------------------------------------------------------- Update an existing vehicle's attributes exports.qbx_vehicles:SaveVehicle(vehicle, options) * vehicle: `number` entity * options: `table` * garage?: `string` * state?: [VehicleState](https://docs.qbox.re/resources/qbx_vehicles/exports/server#vehiclestate) * depotPrice?: `integer` * props?: [ox\_lib vehicle properties](https://github.com/CommunityOx/ox_lib/blob/master/resource/vehicleProperties/client.lua#L3) Returns: * success: `boolean` * errorResult?: `{code: string, message: string}` Error Codes: * not\_owned: unable to locate the vehicle's row in the player\_vehicles table Common Types[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#common-types "Direct link to Common Types") ----------------------------------------------------------------------------------------------------------------------- ### VehicleState[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#vehiclestate "Direct link to VehicleState") * OUT = 0 * GARAGED = 1 * IMPOUNDED = 2 ### PlayerVehicle[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#playervehicle "Direct link to PlayerVehicle") * id: `integer` * citizenid?: `string` * modelName: `string` * garage: `string` * state: [VehicleState](https://docs.qbox.re/resources/qbx_vehicles/exports/server#vehiclestate) * depotPrice: `integer` * props: [ox\_lib vehicle properties](https://github.com/CommunityOx/ox_lib/blob/master/resource/vehicleProperties/client.lua#L3) ### PlayerVehiclesFilters[​](https://docs.qbox.re/resources/qbx_vehicles/exports/server#playervehiclesfilters "Direct link to PlayerVehiclesFilters") * citizenid?: `string` * states?: `VehicleState | VehicleState[]` * garage?: `string` * [CreatePlayerVehicle](https://docs.qbox.re/resources/qbx_vehicles/exports/server#createplayervehicle) * [DeletePlayerVehicles](https://docs.qbox.re/resources/qbx_vehicles/exports/server#deleteplayervehicles) * [DoesPlayerVehiclePlateExist](https://docs.qbox.re/resources/qbx_vehicles/exports/server#doesplayervehicleplateexist) * [GetPlayerVehicle](https://docs.qbox.re/resources/qbx_vehicles/exports/server#getplayervehicle) * [GetPlayerVehicles](https://docs.qbox.re/resources/qbx_vehicles/exports/server#getplayervehicles) * [SetPlayerVehicleOwner](https://docs.qbox.re/resources/qbx_vehicles/exports/server#setplayervehicleowner) * [GetVehicleIdByPlate](https://docs.qbox.re/resources/qbx_vehicles/exports/server#getvehicleidbyplate) * [SaveVehicle](https://docs.qbox.re/resources/qbx_vehicles/exports/server#savevehicle) * [Common Types](https://docs.qbox.re/resources/qbx_vehicles/exports/server#common-types) * [VehicleState](https://docs.qbox.re/resources/qbx_vehicles/exports/server#vehiclestate) * [PlayerVehicle](https://docs.qbox.re/resources/qbx_vehicles/exports/server#playervehicle) * [PlayerVehiclesFilters](https://docs.qbox.re/resources/qbx_vehicles/exports/server#playervehiclesfilters) --- # Custom Permissions | Qbox Documentation [Skip to main content](https://docs.qbox.re/tebex/loki-logging/custom-permissions#__docusaurus_skipToContent_fallback) The moment you invite someone to your Grafana organization, they will have access to all dashboards. However, you can restrict their access to specific dashboards by creating teams. This way we can create dedicated log searching teams or restrict which logs a certain someone can see. ![](https://media.qbox.re/image/sBZx1BJ9YgBrEUm-CJA57BQUtQZ4SzPVu-tk2BPyJg0wt-.png) What an invited user with the `Viewer` role would see γ…€ First we'll remove all roles from all dashboards. For this you'll need to open each dashboard manually and click on the `Edit` button in the top right corner. And then the `Settings` button. Here you can open the tab called `Permissions` and remove all roles. This will make sure that no one has access to any dashboard by default. ![](https://media.qbox.re/image/9wGnu86mJe3iUKH8sP0HXVZv6fzMLBp1d9Wf.png) Now the invited user won't see anything γ…€ Next, we can create a team that will have access to the dashboard. To do this, go to `Administration > Users and access` tab in the left sidebar and click on `Teams`. Here you can create a new team by clicking on the `New team` button. Now just give it a descriptive name and add all the users you want to this team. Now go back to the `permissions` tab of the dashboard and add the team you just created. For this example we will just give this team the `Viewer` role. ![](https://media.qbox.re/image/98yyye6YeVKe0S4C8Gwm6L1c0yCnqrX5sv5nlsEufeA3.png) ![](https://media.qbox.re/image/sBZx1BJ9YgBrEUm-CJA57BQUtQZ4SzPVu-tk2BPyJg0wt-.png) Now the invited user will be able to see the dashboard again because they are a member of the team we just created γ…€ This way you can create multiple teams with different roles and permissions. For example, you can create a team for developers that have access to all dashboards, and a team for moderators that only have access to specific dashboards. This allows you to have complete control over who can see what in your Grafana organization. Just like Discord roles and adding or removing people from channels. --- # Inviting People | Qbox Documentation [Skip to main content](https://docs.qbox.re/tebex/loki-logging/inviting-people#__docusaurus_skipToContent_fallback) Want to invite your staff team to your Grafana organization? This is done super easily through their e-mail. Simply navigate to `Administration > Users and access > Users`. Here you will find an invite button in the top right corner. Click it and enter the e-mail address of the person you want to invite. Don't forget to change the role of the user however you like! ![](https://media.qbox.re/image/u-j78ax9YCUmTC_gERVzKK9Bpf92OqTFT.png) ![](https://media.qbox.re/image/4Mp6VL42Or2Rb25v1cKQ2vLYFRimsxw8vRnRr.png) --- # Getting Started | Qbox Documentation [Skip to main content](https://docs.qbox.re/tebex/loki-logging/getting-started#__docusaurus_skipToContent_fallback) On this page The moment you support us on [Ko-fi](https://ko-fi.com/qbox) you will receive the appropriate roles in Discord (make sure to link your Discord account to your Ko-fi account so you actually receive your Discord benefits). Now head to [https://logging.qbox.re/](https://logging.qbox.re/) and authenticate with your Discord account. You will see a small dashboard, but this won't be used for anything besides regenerating your API key. The moment you authenticate for the first time, a new Grafana organization will be created for you at [https://grafana.qbox.re/](https://grafana.qbox.re/) . Your login credentials will be your Discord ID as username and `admin` as password. Afterwhich it will ask you to change your password. danger It goes without saying, but please actually do so. Change your password πŸ™ Once done, you will now have full control and access to your very own Grafana organization. Everything will be installed for you already to get you started. But I would recommend you to go through the [Grafana documentation](https://grafana.com/docs/grafana/latest/) to get a better understanding of how Grafana works and how to use it. ![](https://media.qbox.re/image/8QAdwCAXrELugkqEeQ_nhR1A7lJsdTjssFc.png) Setting up ox\_lib[​](https://docs.qbox.re/tebex/loki-logging/getting-started#setting-up-ox_lib "Direct link to Setting up ox_lib") ------------------------------------------------------------------------------------------------------------------------------------ If you are using Qbox and ran our recipe deployer, you will have a file called `ox.cfg`. Otherwise just use `server.cfg`. Either way, search if you have already set the `ox:logger` convar. If not, you can copy the following lines into your `server.cfg` or `ox.cfg` file: set ox:logger "loki"set loki:endpoint "logging.qbox.re"set loki:tenant "tenant-id" Replace `tenant-id` with your actual tenant ID, which you can find in the small dashboard at [https://logging.qbox.re/](https://logging.qbox.re/) . Now if you start your server and connect with it. You should already see a few default logs showing up in Grafana. Don't know where? Navigate to `Dashboards > All Logs` inside Grafana. This will be your main dashboard for viewing all logs. And that is it. Don't forget to bookmark both the URLs above for quick access. * [Setting up ox\_lib](https://docs.qbox.re/tebex/loki-logging/getting-started#setting-up-ox_lib) --- # GTA V Map | Qbox Documentation [Skip to main content](https://docs.qbox.re/tebex/loki-logging/geomap#__docusaurus_skipToContent_fallback) On this page Another great feature of Grafana is the ability to visualize your data on a map. This is especially useful for FiveM in case you want to visually see where something happened. info Out of the box, this resource will log all player disconnections. This includes normal ones and crashes etc. It will also log all explosions on your server. warning There is also a piece of commented out code to log **all** player's locations every 15 seconds. Depending on your server size, this can lead to a **ton** of logs and thus more than likely degraded performance. Use at your own risk! ![Preview Example](https://media.qbox.re/image/qJeZjKiL8aGnUiXNvzngid9uwqicgpdJ6KR0.png) Setup[​](https://docs.qbox.re/tebex/loki-logging/geomap#setup "Direct link to Setup") -------------------------------------------------------------------------------------- We have a premade resource for the example above to get you started. You can find it on our [GitHub](https://github.com/Qbox-project/qbx_grafana_map) . You can install it anywhere you want. But in this case just drop it in the `[qbx]` folder with the rest! Now to actually visualize the logs this resource produces, we will need to make a new dashboard in Grafana. If you haven't noticed already, the resource also includes a `geomap.json` file. Copy the contents of this file and go to your Grafana Dashboards tab. In the top right corner you'll see a big blue button `New`. Click it and select `Import` from the dropdown menu. Now paste the contents of the `geomap.json` file into the text area and click `Load` and `Import`. And there it is! Your brand new geomap dashboard. Alternative Usage[​](https://docs.qbox.re/tebex/loki-logging/geomap#alternative-usage "Direct link to Alternative Usage") -------------------------------------------------------------------------------------------------------------------------- Like anything, these are just some examples on how you can use the geomap. Since everything is open source and customizable, you can change the resource to your liking, change the Grafana dashboard, everything! Yippie! As you may have noticed, there is an event filter at the top of the page. So if you are going to use this dashboard for different use cases, you'll need to add your events in this filter. 1. Enter edit mode in the top right 2. Click on the `settings` button 3. Go to the `Variables` tab 4. Under `Custom Options` add your custom events, separated by a comma ![Preview Example](https://media.qbox.re/image/Jrmbwa8Q-yQKWRJHMJHZ8U7Te9W2HU68MZM7WOAk.png) Now for actually logging your event, we'll have to add a little something to the `ox_lib` logger function. The world coordinates don't overlap with the geomap coordinates. You have to convert them first, for this we have exposed a small function in the `qbx_grafana_map` resource to convert them for you. local coords = GetEntityCoords(PlayerPedId()) local lon, lat = exports.qbx_grafana_map:gameToMap(coords.x, coords.y) lib.logger(playerSource, 'custom_event', 'custom_message', ('lon:%s'):format(lon), ('lat:%s'):format(lat)) The important part is the `lon` and `lat` values. These are the converted coordinates that you can use in your logger function. Always include these as extra arguments! Otherwise the geomap will not know where the log took place. I want a different map![​](https://docs.qbox.re/tebex/loki-logging/geomap#i-want-a-different-map "Direct link to I want a different map!") ------------------------------------------------------------------------------------------------------------------------------------------- Luckily for you this is possible and we have 3 maps to choose from! Hover over the map and click on the 3 dots and then `Edit`. Now on the right side under `Basemap layer` you can change the URL template to the following 3 options. ![Preview Example](https://media.qbox.re/image/GMl5STcVpsl_vQZA0o0QyidyYkrVWJ5pvrI.png) ![Preview Example](https://media.qbox.re/image/FcYKuE6-zWQhcZYimn0EhITy3EvdaY3F9GPigbbHKh4Yhbe.png) `https://s.rsg.sc/sc/images/games/GTAV/map/render/{z}/{x}/{y}.jpg` ![](https://media.qbox.re/image/tUcW4OwJbbSuRa0bvbjUAE4o6b0lEOkulAlTVU1OwShY.png) `https://s.rsg.sc/sc/images/games/GTAV/map/game/{z}/{x}/{y}.jpg` ![](https://media.qbox.re/image/aIrx9DVQj-Kk9lRRCeP-BubhmKLb_WYI.png) `https://s.rsg.sc/sc/images/games/GTAV/map/print/{z}/{x}/{y}.jpg` ![](https://media.qbox.re/image/6la89HhcEFqsRMTcAbREQlWrahcyvs6YXffRPBeZwFhn3.png) * [Setup](https://docs.qbox.re/tebex/loki-logging/geomap#setup) * [Alternative Usage](https://docs.qbox.re/tebex/loki-logging/geomap#alternative-usage) * [I want a different map!](https://docs.qbox.re/tebex/loki-logging/geomap#i-want-a-different-map) --- # πŸ”« Weapon Audio | Qbox Documentation [Skip to main content](https://docs.qbox.re/tebex/weapon-audio#__docusaurus_skipToContent_fallback) On this page [Get it on Tebex](https://tebex.qbox.re/weaponaudio) γ…€ Bring your FiveM server to life with immersive, custom weapon audio! This FiveM script streams unique, high-quality weapon sounds server-sided, creating an enhanced audio experience for your players. With realistic, powerful sound effects for every shot. Easy to install, this script ensures all players hear the same, thrilling sounds without needing individual downloads. Perfect for any RP server looking to elevate gameplay realism and engagement. Make every firefight unforgettable. Add custom weapon audio to your FiveM server today! Features[​](https://docs.qbox.re/tebex/weapon-audio#features "Direct link to Features") ---------------------------------------------------------------------------------------- * **Multiple Sound Options**: There are 13 unique audio items to choose from. Divided into 7 pistol; 2 LMG; 2 SMG and 1 rifle sound. * **Server-Sided Streaming**: All audio is streamed directly from the server, so no client-side downloads are required, ensuring every player hears the same high-quality sounds. * **Seamless Installation**: Straightforward setup with clear instructions, making it easy to integrate on any FiveM server. * **Optimized**: This uses the native audio engine from GTA 5. So no fake 3D audio from resources like xsound or interact-sound. * **Fully Customizable**: Easily adjust and swap out weapon sounds per weapon. All the original XML files are included so you can change or add as many sounds as you want! * **Free Updates**: Whenever I add more sounds I won't make a new package. All new sounds will be included in the same package. So you can get grandfathered without having to pay extra when the price increases! * [Features](https://docs.qbox.re/tebex/weapon-audio#features) --- # MultiCharacter | Qbox Documentation [Skip to main content](https://docs.qbox.re/resources/qbx_core/multichar#__docusaurus_skipToContent_fallback) On this page ### Can I use my own multicharacter?[​](https://docs.qbox.re/resources/qbx_core/multichar#can-i-use-my-own-multicharacter "Direct link to Can I use my own multicharacter?") Yes, you can. To disable the built in multicharacter change this setting to true in `qbx_core/config/client.lua` -- Whether you have an external character management resource. (If true, disables the character management inside the core)useExternalCharacters = false, Stuck in loading screen? Your multicharacter most likely never calls the loading screen to shutdown. You can fix this 2 ways: 1. Open your `server.cfg` and edit `setr loadscreen:externalShutdown` to be `false` 2. Edit your multicharacter resources to call the `ShutdownLoadingScreen()` and `ShutdownLoadingScreenNui()` natives. Like qbx\_core does [here](https://github.com/Qbox-project/qbx_core/blob/6e50abaf966295a4245c901a37ecb64343d63677/client/character.lua#L387-L388) * [Can I use my own multicharacter?](https://docs.qbox.re/resources/qbx_core/multichar#can-i-use-my-own-multicharacter) --- # Prevent Usage | Qbox Documentation [Skip to main content](https://docs.qbox.re/tebex/slots/canuse#__docusaurus_skipToContent_fallback) Have your own casino membership logic? Want to add some other requirements before a player can use the slot machine? No problem! Simply navigate to `server/utils.lua` and find the following function: function CanUse(source) return trueend Here you can add your own logic. To prevent the player from using the slot machine, simply return `false`. function CanUse(source) local player = exports.qbx_core:GetPlayer(source) if not player.PlayerData.metadata.casino_member then return false end return trueend --- # Installation | Qbox Documentation [Skip to main content](https://docs.qbox.re/tebex/weapon-audio/installation#__docusaurus_skipToContent_fallback) On this page Downloading the resource[​](https://docs.qbox.re/tebex/weapon-audio/installation#downloading-the-resource "Direct link to Downloading the resource") ----------------------------------------------------------------------------------------------------------------------------------------------------- Any and all resources escrowed or not will be delivered using the Cfx.re asset system. You can find the asset manager hub at the following link: [https://portal.cfx.re/assets/granted-assets](https://portal.cfx.re/assets/granted-assets) Starting the Script on FiveM[​](https://docs.qbox.re/tebex/weapon-audio/installation#starting-the-script-on-fivem "Direct link to Starting the Script on FiveM") ----------------------------------------------------------------------------------------------------------------------------------------------------------------- 1. Place the script anywhere at the same level as your `server.cfg` or make any kind of subdirectory. You will more likely than not have a folder called `resources` where all your currently used scripts reside. You can put `chat_weaponaudio` in here as well. 2. Add the following codeblock to your `server.cfg` or any other `.cfg` that is read on server startup: ensure chat_weaponaudio Editing weapons.meta file[​](https://docs.qbox.re/tebex/weapon-audio/installation#editing-weaponsmeta-file "Direct link to Editing weapons.meta file") ------------------------------------------------------------------------------------------------------------------------------------------------------- Now all you need to do is go into your `weapons.meta` file and replace the `