# Welcome

Welcome to Qubit Studios, the go-to destination for **next-level FiveM scripts** that truly stand out from the crowd.

Here, every product is designed to feel **fresh**, **bold**, and **ready to blow your mind.** While all scripts are protected with escrow, we keep as many functions **open-source as possible**, because we believe creativity and freedom should never be limited.

Our scripts are tested multiple times on widely used frameworks and fully adapted for the latest **ESX** and **QB/QBX** versions, ensuring smooth, stable, and reliable performance for your server. Whether you want to elevate gameplay, improve UI, or **unlock new features**, **Qubit Studios has exactly what you need.**

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Car Crafting</td><td>The Qubit 3D Printer is an item production machine that uses a resin capable of printing metal, plastic, and rubber materials.</td><td><a href="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FLszYjO0Y3UnoXfwuLdgS%2Fcarcrafting.jpg?alt=media&amp;token=4d5552be-5531-4715-9d18-e14d77b99be8">carcrafting.jpg</a></td><td><a href="/fivem-scripts/car-crafting">Car Crafting</a></td></tr><tr><td>3D Printer</td><td>You can use Qubit Car Crafting with your players in a completely unique and customizable way</td><td><a href="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FiHRfrXZ3urMakLtbVFDm%2F3dprinter.jpg?alt=media&amp;token=0a4439fd-a9f0-49f5-b65b-b7f2237de1fb">3dprinter.jpg</a></td><td><a href="/fivem-scripts/3d-printer">3D Printer</a></td></tr><tr><td>Honor System</td><td>A dynamic morality and reputation framework designed specifically for FiveM</td><td><a href="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FQnynDQdOYXI9pnzu4D2u%2Fhonorsystem.jpg?alt=media&amp;token=08f15127-7434-46a8-a359-4fed0840e58e">honorsystem.jpg</a></td><td><a href="/fivem-scripts/honor-system">Honor System</a></td></tr></tbody></table>


# Car Crafting

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FLszYjO0Y3UnoXfwuLdgS%2Fcarcrafting.jpg?alt=media&amp;token=4d5552be-5531-4715-9d18-e14d77b99be8" alt=""><figcaption></figcaption></figure>

Since you are here, it means you are looking for information on how to use **Qubit Car Crafting**. First of all, we are grateful that you purchased the product and supported us. Below, you will find detailed information on how to install it. If you continue to experience problems with the installation, please reach out to us through our [Discord](http://discord.qubitstudios.net).


# Installation & Configuration

## ⚒️ Car Crafting 2.0

Qubit's Car Crafting 2.0 brings a fully standalone in-game management panel, animated vehicle crafting, job-restricted zones, and database-driven configuration all without touching a single config file after initial setup.

**Extra Support:** [Discord](https://discord.gg/M4ms6RyxMW)

***

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FBmeUECvBbpr3uY3xWuO4%2Fv2.jpg?alt=media&amp;token=b50ac598-d095-44b8-99bf-a67b0e01402f" alt=""><figcaption></figcaption></figure>

### &#x20;What's New in 2.0

| Feature                    | Description                                                 |
| -------------------------- | ----------------------------------------------------------- |
| **Standalone Manager UI**  | Full in-game management panel no config editing needed      |
| **Database-Driven Config** | All vehicles, items, areas, and types stored in MySQL       |
| **Vehicle Types**          | Group vehicles by type (Sedan, Helicopter, Boat, etc.)      |
| **Animated Crafting**      | Per-part installation with animations, sounds & particles   |
| **Job-Based Zones**        | Restrict craft areas to specific jobs or open to everyone   |
| **Multiple Locations**     | Add unlimited locations per craft area anywhere on the map  |
| **Craft Chance System**    | Set success percentage per vehicle                          |
| **Cinematic Camera**       | Dynamic camera angles based on vehicle class                |
| **Multi-Language**         | Built-in English, Turkish, German, French support           |
| **Live Reload**            | Initialize button reloads all config without server restart |

***

## Installation & Configuration

### Dependencies

Install the following resources before starting `qubit-carcrafting`:

| Dependency     | Required | Download                                                       |
| -------------- | -------- | -------------------------------------------------------------- |
| **oxmysql**    | ✅        | Included with most frameworks                                  |
| **ox\_lib**    | ✅        | [Download](https://github.com/overextended/ox_lib/releases)    |
| **xsound**     | ✅        | [Download](https://github.com/Xogy/xsound/releases)            |
| **ox\_target** | Optional | [Download](https://github.com/overextended/ox_target/releases) |
| **qb-target**  | Optional | Included with QBCore                                           |

> **\[NOTE]** You must use either `ox_target` or `qb-target`. The script supports both.

***

### 1. Framework Configuration

Open `config.lua` and set your framework options:

#### QBCore Settings

```lua
Config.Framework = "QB"
Config.CoreName = 'qb-core'
Config.MenuName = 'qb-menu'
Config.Target = "ox_target"       -- or "qb-target"
Config.CustomLicenseColumn = 'license'
```

#### ESX Settings

```lua
Config.Framework = "ESX"          -- or "oldESX" for legacy ESX
Config.CoreName = 'es_extended'
Config.MenuName = 'ox_lib'
Config.Target = "ox_target"
Config.CustomLicenseColumn = 'owner'
```

#### fxmanifest.lua - MySQL Driver

By default the script uses `oxmysql`. If you use `mysql-async`, open `fxmanifest.lua` and swap the comment:

```lua
server_scripts {
    "server.lua",
    "server_functions.lua",
    '@oxmysql/lib/MySQL.lua',
    --'@mysql-async/lib/MySQL.lua',  -- Uncomment for mysql-async
}
```

***

### 2. Importing Items

All crafting items in Car Crafting 2.0 are **managed from the in-game panel**. However, you still need to register the item definitions in your inventory system so players can hold them.

#### QBCore - `qb-core/shared/items.lua`

Add these at the bottom of the file:

```lua
['toolkit']        = { ['name'] = 'toolkit',        ['label'] = 'Toolkit',        ['weight'] = 100, ['type'] = 'item', ['image'] = 'toolkit.png',        ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['description'] = 'It is used to produce some things.' },
['car_door']           = { ['name'] = 'door',            ['label'] = 'Car Door',       ['weight'] = 100, ['type'] = 'item', ['image'] = 'door.png',           ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['description'] = 'Vehicle door for crafting.' },
['car_battery']    = { ['name'] = 'car_battery',     ['label'] = 'Car Battery',    ['weight'] = 100, ['type'] = 'item', ['image'] = 'car_battery.png',    ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['description'] = 'Vehicle battery for crafting.' },
['sparkplug']      = { ['name'] = 'sparkplug',       ['label'] = 'Sparkplug',      ['weight'] = 100, ['type'] = 'item', ['image'] = 'sparkplug.png',      ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['description'] = 'Sparkplug for engine crafting.' },
['wheel']          = { ['name'] = 'wheel',           ['label'] = 'Car Wheel',      ['weight'] = 100, ['type'] = 'item', ['image'] = 'wheel.png',          ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['description'] = 'Vehicle wheel for crafting.' },
['car_glass']      = { ['name'] = 'car_glass',       ['label'] = 'Car Glass',      ['weight'] = 100, ['type'] = 'item', ['image'] = 'car_glass.png',      ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['description'] = 'Vehicle glass for crafting.' },
['car_blueprint']  = { ['name'] = 'car_blueprint',   ['label'] = 'Car Blueprint',  ['weight'] = 100, ['type'] = 'item', ['image'] = 'car_blueprint.png',  ['unique'] = false, ['useable'] = false, ['shouldClose'] = false, ['description'] = 'Blueprint for vehicle crafting.' },
```

#### ESX - SQL Import

```sql
INSERT INTO `items` (`name`, `label`, `weight`) VALUES
  ('toolkit', 'Toolkit', 100),
  ('car_door', 'Car Door', 100),
  ('car_battery', 'Car Battery', 100),
  ('sparkplug', 'Sparkplug', 100),
  ('wheel', 'Car Wheel', 100),
  ('car_glass', 'Car Glass', 100),
  ('car_blueprint', 'Car Blueprint', 100);
```

#### OX Inventory - `ox_inventory/data/items.lua`

```lua
['toolkit']       = { label = 'Toolkit',       weight = 100 },
['car_door']          = { label = 'Car Door',      weight = 100 },
['car_battery']   = { label = 'Car Battery',   weight = 100 },
['sparkplug']     = { label = 'Sparkplug',     weight = 100 },
['wheel']         = { label = 'Car Wheel',     weight = 100 },
['car_glass']     = { label = 'Car Glass',     weight = 100 },
['car_blueprint'] = { label = 'Car Blueprint', weight = 100 },
```

> **\[IMPORTANT]** These are the **default items** that come with the script. You can add any custom items later via the Manager Panel but you must also register them in your inventory system.

***

### 3. Add Item Photos to Inventory

Copy the images from the `items_photo` folder into your inventory's image directory.

* **QBCore:** `qb-inventory/html/images/`
* **OX Inventory:** `ox_inventory/web/images/`
* **ESX:** Your inventory's image folder

Then update the path in `config.lua`:

```lua
Config.InventoryItemImagePath = 'ox_inventory/web/images/'
```

***

### Setup Finished 🎉

Start your server. The script will automatically:

1. Create all required database tables
2. Insert default data (items, vehicles, areas, types)
3. Load runtime configuration

You're ready to use the in-game manager panel!

***

## Manager Panel

The Manager Panel is the core feature of Car Crafting 2.0. It provides a full CRUD interface for managing all crafting data directly from the game **no config files, no server restarts**.

### Opening the Panel

Use the command configured in `config.lua`:

```
/carCraftingManage
```

> **\[NOTE]** Only players with **admin permissions** can access the manager panel. For QBCore, this requires `admin` permission or ace `command` access. For ESX, the player must be in the `admin` or `superadmin` group.

The panel toggle key (default `F9`) can be used to hide/show the manager while it's open.

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FXxyPhEiNJaZj0Y9KZEp5%2Fimage.png?alt=media&amp;token=ea977dd3-320e-4f6c-af88-bde9539dbcdf" alt=""><figcaption></figcaption></figure>

### Panel Sections

The manager has **4 main sections** accessible from the left sidebar:

| Section            | Purpose                                          |
| ------------------ | ------------------------------------------------ |
| **Crafting Items** | Define parts/materials required for crafting     |
| **Craft Areas**    | Configure zones, job access, and locations       |
| **Vehicles**       | Manage craftable vehicles with parts and chances |
| **Vehicle Types**  | Create categories to group vehicles              |

#### Workflow Order

For a fresh setup, follow this order:

```
1. Vehicle Types → 2. Crafting Items → 3. Vehicles → 4. Craft Areas
```

After making changes, click the **INITIALIZE** button at the bottom of the panel to reload the runtime configuration.

***

## Vehicle Types

Vehicle Types are used to categorize vehicles in the crafting menus. When a player opens the crafting UI at a location, vehicles are grouped by their assigned type.

### Creating a Vehicle Type

1. Navigate to **Vehicle Types** in the manager panel
2. Click **+ New Type**
3. Enter a **Label** (e.g., "Helicopters", "Sedans", "Off-Road")
4. Click **Save**

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2Fjp9a7E8quB88S9xB9aTi%2Fimage.png?alt=media&amp;token=acfd0e98-be0e-4e01-8d9b-477793be874c" alt=""><figcaption></figcaption></figure>

### Default Types

The script comes with these default types:

| Type        | Slug          |
| ----------- | ------------- |
| Helicopters | `helicopters` |
| Sedans      | `sedans`      |
| Off-Road    | `off-road`    |
| Planes      | `planes`      |
| Motorcycles | `motorcycles` |
| Boats       | `boats`       |

> **\[TIP]** You can create any custom types like "Luxury Cars", "Emergency Vehicles", "Military", etc.

***

## Crafting Items

Crafting Items are the parts/materials that players need in their inventory to craft a vehicle. Each item has its own animation, sound effect, particle effect, and installation time.

### Managing Items

Navigate to **Crafting Items** in the manager panel.

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2Fr8QqviyKLif181yTEA2k%2Fimage.png?alt=media&amp;token=94d148a4-a88b-49cb-bf55-62757de1b9ca" alt=""><figcaption></figcaption></figure>

### Creating a New Item

Click **+ New Item** and fill in the form:

| Field              | Description                                | Example                          |
| ------------------ | ------------------------------------------ | -------------------------------- |
| **Item Name**      | Technical name (must match inventory item) | `car_battery`                    |
| **Label**          | Display name shown to players              | `Car Battery`                    |
| **Color**          | Color tag for the UI                       | `#013e5d`                        |
| **Description**    | Item description                           | `Provides power for the vehicle` |
| **Install Time**   | Duration of installation animation (ms)    | `5000`                           |
| **Stage Label**    | Text shown during installation             | `Installing Car Battery`         |
| **Sound URL**      | YouTube/audio URL played during install    | `https://youtube.com/...`        |
| **Sound Volume**   | Volume level (0.0 - 1.0)                   | `0.4`                            |
| **Animation Dict** | GTA animation dictionary                   | `mini@repair`                    |
| **Animation Name** | GTA animation name                         | `fixing_a_ped`                   |
| **Particle Core**  | Particle effect core                       | `core`                           |
| **Particle Name**  | Particle effect name                       | `ent_amb_foundry_arc_heat`       |
| **Default Part**   | Auto-select for new vehicles               | ✅ / ❌                            |

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FbLvcdqDMRqcI7LS8g0Xf%2Fimage.png?alt=media&amp;token=03e30471-304a-40a2-9e6c-e10fc537ecc3" alt=""><figcaption></figcaption></figure>

#### Default Parts

When **Default Part** is enabled, this item will be automatically added to the parts list when creating a new vehicle. This saves time when most vehicles use the same base materials.

***

## Vehicles

Vehicles are the craftable models that players can build at craft areas.

### Managing Vehicles

Navigate to **Vehicles** in the manager panel.

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FLP1vYFjbC5MvdwPmtcTg%2Fimage.png?alt=media&amp;token=86863b27-2261-4b74-9ac9-8a10f0c3bab5" alt=""><figcaption></figcaption></figure>

### Creating a New Vehicle

Click **+ New Vehicle** and fill in the form:

| Field                  | Description                             | Example     |
| ---------------------- | --------------------------------------- | ----------- |
| **Vehicle Name**       | Display name                            | `Sultan RS` |
| **Model Name**         | GTA spawn model name                    | `sultanrs`  |
| **Vehicle Type**       | Assign to a type category               | `Sedans`    |
| **Success Chance (%)** | Probability of successful craft (1-100) | `20`        |
| **Required Parts**     | Items needed + quantities               | Various     |

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FhKUVDFBasxXqvrYv4Oc1%2Fimage.png?alt=media&amp;token=268cd790-6dd8-495b-a109-bacc31f827a4" alt=""><figcaption></figcaption></figure>

#### Adding Required Parts

Use the **+ Add Part** button to add crafting requirements. Each part consists of:

* **Item** Select from your defined Crafting Items
* **Quantity** How many of this item is needed

> **\[NOTE]** If you have **Default Parts** configured, they will be pre-populated when creating a new vehicle. You can add, remove, or change quantities as needed.

#### Craft Chance System

The **Success Chance** determines the probability of a successful craft:

* **100%** Always succeeds
* **50%** 50/50 chance
* **20%** Very rare, high-value vehicles

When crafting fails, the player loses all materials and receives a failure notification. In the player UI, vehicles are sorted by craft chance (highest to lowest).

***

## Craft Areas

Craft Areas are the zones on the map where players can craft vehicles. Each area can have multiple locations, job restrictions, and custom music settings.

### Managing Craft Areas

Navigate to **Craft Areas** in the manager panel.

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FFMtlAdKBGrHhMDinZNdC%2Fimage.png?alt=media&amp;token=d555b266-6ebf-4b97-b4d8-c604de63cbb0" alt=""><figcaption></figcaption></figure>

### Creating a New Craft Area

Click **+ New Area** and fill in the form:

| Field                 | Description                       | Example                   |
| --------------------- | --------------------------------- | ------------------------- |
| **Area Name**         | Technical/display name            | `General Mechanic`        |
| **Job Access**        | Restrict to jobs or everyone      | `mechanic` or `EVERYONE`  |
| **Music Enabled**     | Enable crafting background music  | ✅                         |
| **Craft Music URL**   | YouTube/audio URL for crafting    | `https://youtube.com/...` |
| **Music Volume**      | Crafting music volume (0.0 - 1.0) | `0.1`                     |
| **Success Music URL** | Music played on successful craft  | `https://youtube.com/...` |
| **Success Volume**    | Success music volume (0.0 - 1.0)  | `0.1`                     |

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FMXHrvKri0WC72mgqpVFa%2Fimage.png?alt=media&amp;token=949c27c7-aabc-457a-9247-7d08c94e83a9" alt=""><figcaption></figcaption></figure>

#### Job Access

* Set to **EVERYONE** to allow all players
* Enter specific job names (e.g., `mechanic`, `police`) to restrict access
* Multiple jobs can be added separated by commas

> **\[TIP]** Use this to create themed areas: "Mechanic Workshop" (mechanic only), "Military Base" (military only), "Public Garage" (everyone).

***

### Locations

Each Craft Area can have **multiple locations** on the map. This means you can create one area like "Mechanic Workshop" and place it in different parts of the city.

#### Adding a Location

1. Click the **(location icon)** on a craft area row
2. In the locations popup, click **+ New Location**
3. Fill in the location form:

| Field                    | Description                                       | Example                         |
| ------------------------ | ------------------------------------------------- | ------------------------------- |
| **Location Name**        | Name shown on blip                                | `Benny's Car Crafting`          |
| **Show Blip**            | Display on the map                                | ✅                               |
| **Blip Sprite**          | Map icon ID                                       | `326`                           |
| **Blip Color**           | Map icon color ID                                 | `47`                            |
| **Blip Scale**           | Map icon size                                     | `0.7`                           |
| **Blip Coordinates**     | Map blip position (x,y,z)                         | `-222.87,-1331.65,31.62`        |
| **Debug Mode**           | Show PolyZone borders in-game                     | ❌                               |
| **Thickness**            | Zone height                                       | `4.0`                           |
| **PolyZone Coordinates** | Border points of the crafting area                | Multiple vec3 points            |
| **Spawn Coordinates**    | Where the crafted vehicle appears (x,y,z,heading) | `-205.97,-1323.87,30.28,356.76` |

#### Getting Coordinates In-Game

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2F9GJ3lVjJFFxAeZ0JEzBu%2Fimage.png?alt=media&amp;token=e5470b4b-580d-4252-9122-11925e2a7340" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2F7BIJZHwZyOthPHInmMZo%2Fimage.png?alt=media&amp;token=83fdfe97-2e5c-4fe8-b239-3c3fbcb835a8" alt=""><figcaption></figcaption></figure>

You can use the manager panel to get your current coordinates:

* Use the coordinate copy buttons in the location edit form
* Or use any coordinate display script to get exact positions

#### Vehicle Spawn Points

Each location needs **Vehicle Spawn Points** the positions where unfinished vehicles appear for crafting interaction.

1. In the location form, go to **Vehicle Coordinates** section
2. Click **+ New Vehicle Coordinate**
3. Select a **Vehicle** from the dropdown
4. Enter **Coordinates** (x,y,z,heading)

You can add multiple spawn points per location with different vehicles.

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2Fqb9j4Y5haYy75mm8r5ft%2Fimage.png?alt=media&amp;token=904de1f1-b75b-4ff1-9d86-fb20ae545c7f" alt=""><figcaption></figcaption></figure>

#### Location Sub-Categories

Each location can have **Sub-Categories** to organize vehicles within the crafting UI. For example, a mechanic location might have:

* 🚗 Sedan Cars
* 🏍️ Motorcycles
* 🚙 SUVs & Off-Roads

Sub-categories include:

* **Name** - Technical identifier
* **Label** - Display name
* **Icon** - Material Symbols icon name
* **Order** - Display order
* **Vehicles** - Which vehicles appear in this category

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FkwQWpvcarlLiVVwzdSBA%2Fimage.png?alt=media&amp;token=1a3e4e42-0066-4b43-a30b-590edec3dbe2" alt=""><figcaption></figcaption></figure>

***

## Player Crafting Experience

This section describes what players see and experience during the crafting process.

### Entering a Craft Zone

When a player enters a PolyZone area:

1. Pre-crafted vehicle models spawn at configured positions (damaged, no wheels, no doors)
2. A creeper prop appears under each vehicle
3. Spawn particle effects play

### Starting a Craft

1. Player approaches a vehicle and uses the **target interaction** (ox\_target or qb-target)
2. The crafting UI opens with a **cinematic camera** focused on the vehicle
3. The UI shows:
   * Vehicle name and model
   * Craft success chance percentage
   * Required parts list with color-coded availability (✅ owned / ❌ missing)
4. Player clicks **START CRAFT**

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FS00VDRomIwnV3xUhQeci%2Fimage.png?alt=media&amp;token=0766e12c-65f8-4cb6-872e-4e825d38d03f" alt=""><figcaption></figcaption></figure>

### Crafting Process

After starting, the crafting process is **interactive and animated**:

1. **Item Check** Server validates all required items in player inventory
2. **Part-by-Part Installation** For each part:
   * A **green marker** appears at the installation point
   * Text shows `[E] Part Name x1 (2/7)`
   * Player walks to the marker and presses **E**
   * The item is removed from inventory
   * The character plays the configured animation
   * Sound effects and particles play
3. **Special Animations:**
   * **Wheels** → Player goes to each wheel bone position
   * **Doors** → Player goes to each door bone position
   * **Other Parts** → Player goes to the driver-side door area
4. **Progress Bar** Updates in real-time as each part is installed

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FoN8FIU1Fiu5sQGvwyCdf%2Fimage.png?alt=media&amp;token=c732f3c5-ed23-432b-9c39-956cadf775cd" alt=""><figcaption></figcaption></figure>

### Craft Completion

When all parts are installed:

1. **Craft Chance Roll** Server rolls against the vehicle's success chance
2. **On Success:**
   * Screen fades out
   * Old vehicle is replaced with a clean, fully working vehicle
   * The vehicle is registered to the player in the database
   * Cinematic camera showcase plays (if enabled)
   * Success music plays
   * Screen fades back in
   * Player receives success notification
3. **On Failure:**
   * All materials are lost
   * Player receives a failure notification
   * Vehicle returns to its pre-craft state

### Discord Webhook

If configured, a Discord webhook sends a log message for every successful craft including:

* Player ID and name
* Vehicle model
* License identifier

***

## Config Reference

### config.lua - Full Reference

| Option                                      | Type        | Default                      | Description                              |
| ------------------------------------------- | ----------- | ---------------------------- | ---------------------------------------- |
| `Config.Language`                           | string      | `'en'`                       | Language: `en`, `tr`, `de`, `fr`         |
| `Config.Debug`                              | boolean     | `false`                      | Enable debug prints                      |
| `Config.Framework`                          | string      | `"QB"`                       | Framework: `QB`, `ESX`, `oldESX`         |
| `Config.CoreName`                           | string      | `'qb-core'`                  | Core resource name                       |
| `Config.MenuName`                           | string      | `'qb-menu'`                  | Menu resource: `qb-menu`, `ox_lib`       |
| `Config.Target`                             | string      | `"ox_target"`                | Target system: `qb-target`, `ox_target`  |
| `Config.CustomLicenseColumn`                | string      | `'license'`                  | DB column for vehicle ownership          |
| `Config.ManageCommand`                      | string      | `'carCraftingManage'`        | Admin panel open command                 |
| `Config.ManagerToggleKey`                   | string      | `'F9'`                       | Key to toggle manager visibility         |
| `Config.Webhook`                            | string\|nil | `nil`                        | Discord webhook URL                      |
| `Config.InventoryItemImagePath`             | string      | `'ox_inventory/web/images/'` | Path to inventory item images            |
| `Config.EnableCinematicShowOnCraftFinished` | boolean     | `true`                       | Enable cinematic camera on craft success |
| `Config.CameraDistance`                     | float       | `7.0`                        | Cinematic camera distance                |
| `Config.CameraPov`                          | float       | `25.0`                       | Camera point of view angle               |
| `Config.CameraTurnSpeed`                    | float       | `0.001`                      | Camera rotation speed                    |
| `Config.CameraAngle`                        | float       | `0.0`                        | Camera starting angle                    |
| `Config.CameraHeight`                       | float       | `0.4`                        | Camera height offset                     |
| `Config.CustomSteamIdentifier`              | boolean     | `false`                      | Use Steam ID instead of license (QB)     |
| `Config.EnableCraftParticle`                | boolean     | `true`                       | Show particles during crafting           |
| `Config.EnableCarSpawnParticle`             | boolean     | `true`                       | Show particles when vehicles spawn       |
| `Config.CraftFadeOutTime`                   | integer     | `1000`                       | Screen fade out duration (ms)            |
| `Config.CraftFadeInTime`                    | integer     | `12000`                      | Screen fade in duration (ms)             |
| `Config.PlateLetters`                       | integer     | `3`                          | Number of letters in generated plates    |
| `Config.PlateNumbers`                       | integer     | `3`                          | Number of numbers in generated plates    |
| `Config.PlateUseSpace`                      | boolean     | `true`                       | Add space between letters and numbers    |
| `Config.JapaneseStylePlate`                 | boolean     | `false`                      | Use Japanese format (XX-XX) plates       |

***

## Customization

### Custom Functions `functions.lua`

The script provides several events you can customize:

#### Notification

```lua
RegisterNetEvent('qubit-carcrafting:notification', function(msg, type)
    -- type: "error", "success", "info"
    -- Replace with your own notification system
    TriggerEvent('qubit-carcrafting:client:notification', msg, type)
end)
```

#### Fuel System

```lua
RegisterNetEvent('qubit-carcrafting:fuel', function(veh)
    -- Set fuel on the spawned vehicle
    -- Replace with your fuel system export
    TriggerEvent('qubit-carcrafting:client:fuel', veh, 100)
end)
```

#### Screen Fade Events

```lua
RegisterNetEvent('qubit-carcrafting:screenFadeIn', function()
    -- Called when screen fades in after craft
    -- Example: exports['vms_hud']:Display(true)
end)

RegisterNetEvent('qubit-carcrafting:screenFadeOut', function()
    -- Called when screen fades out during craft
    -- Example: exports['vms_hud']:Display(false)
end)
```

#### Vehicle Key System

```lua
RegisterNetEvent('qubit-carcrafting:vehicleLockSave', function(veh)
    -- Give vehicle keys to the player
    -- Automatically detects framework
end)
```

### Localization

Edit `locales.lua` to add or modify languages. The script supports:

* 🇬🇧 English (`en`)
* 🇹🇷 Turkish (`tr`)
* 🇩🇪 German (`de`)
* 🇫🇷 French (`fr`)

Set your language in config:

```lua
Config.Language = 'en'
```

***

## Database Schema

Car Crafting 2.0 automatically creates and manages these tables:

| Table                                      | Purpose                                                   |
| ------------------------------------------ | --------------------------------------------------------- |
| `qubit_carcrafting_craft_areas`            | Craft area definitions with job access and music settings |
| `qubit_carcrafting_items`                  | Crafting item definitions with animations and effects     |
| `qubit_carcrafting_area_locations`         | Physical locations for each craft area (blips, zones)     |
| `qubit_carcrafting_area_car_coords`        | Vehicle spawn positions within locations                  |
| `qubit_carcrafting_vehicles`               | Craftable vehicle definitions with craft chance           |
| `qubit_carcrafting_vehicle_parts`          | Required items per vehicle                                |
| `qubit_carcrafting_vehicle_types`          | Vehicle type/category definitions                         |
| `qubit_carcrafting_location_subcategories` | Sub-categories per location for UI grouping               |
| `qubit_carcrafting_subcategory_vehicles`   | Vehicle assignments to sub-categories                     |

> **\[NOTE]** All tables are created automatically on first start. Default data is inserted only when tables are empty. You do **not** need to import any SQL manually.

***

### File Structure

```
qubit-carcrafting/
├── config.lua              # Main configuration
├── functions.lua           # Customizable client events
├── locales.lua             # Multi-language support (en, tr, de, fr)
├── client.lua              # Client-side logic (zones, camera, crafting)
├── server.lua              # Server-side logic (DB, admin panel, craft logic)
├── server_functions.lua    # Framework-specific helper functions
├── fxmanifest.lua          # Resource manifest
├── items_photo/            # Default item images for inventory
└── html/
    ├── index.html          # NUI page
    ├── script.js           # UI logic (manager + player crafting)
    ├── style.css           # UI styling
    └── img/                # UI assets
```

***

> **Need help?** Join our [Discord](https://discord.gg/M4ms6RyxMW) for support.


# Installation & Configuration

First, you need to install the scripts **required** for **Qubit Car Crafting** to work. After installing these scripts, you can put qubit-carcrafting into your resources folder and run it.

* oxmysql / mysql-async
* PolyZone - [**Download here**](https://github.com/qbcore-framework/PolyZone/archive/refs/heads/master.zip)
* xsound - [**Download here**](https://github.com/Xogy/xsound/archive/refs/tags/1.4.1.zip)
* ox\_lib - [**Download Here**](https://github.com/overextended/ox_lib/releases/download/v3.11.0/ox_lib.zip)
* ox\_target ( Optional for QBCore ) - [**Download Here**](https://github.com/overextended/ox_target/releases/download/v1.13.1/ox_target.zip)

## 1. Framework Configration

Qubit Car Crafting supports ESX and QB frameworks. If you're using a different framework, unfortunately you won't be able to run Qubit Car Crafting.

Open the `config.lua` and `fxmanifest.lua` change framework setttings for your needs

<details>

<summary>QBCore Settings</summary>

If you're using the qbcore framework, you should configure the framework settings in the config as follows

&#x20;Open `config.lua` and change these lines

```lua
Config.Framework = "QB" -- QB, oldESX, ESX
Config.CoreName = 'qb-core' -- qb-core, es_extended
Config.MenuName = 'qb-menu' -- qb-menu, ox_lib
Config.Target = "qb-target" -- qb-target, ox_target
Config.CustomLicenseColumn = 'license' 
```

</details>

<details>

<summary>ESX Settings</summary>

If you're using the qbcore framework, you should configure the framework settings in the config as follows

&#x20;Open `config.lua` and change these lines

```lua
Config.Framework = "ESX" -- QB, oldESX, ESX
Config.CoreName = 'es_extended' -- qb-core, es_extended
Config.MenuName = 'ox_lib' -- qb-menu, ox_lib
Config.Target = "ox_target" -- qb-target, ox_target
Config.CustomLicenseColumn = 'license' 
```

</details>

## 2. Importing Items

All items in car crafting are fully customizable. We have included a few items for crafting a vehicle, but you can change all of these or add any others you want.

{% hint style="info" %}
If you are using QBCore or OX, you don't need to import the SQL.
{% endhint %}

<details>

<summary>QBCore Item Configration</summary>

Go to the **qb-core** folder, open `qb-core/shared/items.lua`, and add the crafting items line at the bottom

```lua
 -- Car Crafting
['toolkit']  = {
    ['name'] = 'toolkit',
    ['label'] = 'Toolkit',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'toolkit.png',
    ['unique'] = false,
    ['useable'] = false,
    ['shouldClose'] = false,
    ['combinable'] = nil,
    ['description'] = 'It is used to produce some things.'
},

['car_door']  = {
    ['name'] = 'door',
    ['label'] = 'Car Doors',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'door.png',
    ['unique'] = false,
    ['useable'] = false,
    ['shouldClose'] = false,
    ['combinable'] = nil,
    ['description'] = 'Vehicle door can be used in vehicle crafting.'
},

['car_battery']  = {
    ['name'] = 'car_battery',
    ['label'] = 'Car Battery',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'car_battery.png',
    ['unique'] = false,
    ['useable'] = false,
    ['shouldClose'] = false,
    ['combinable'] = nil,
    ['description'] = 'Vehicle battery can be used in vehicle crafting.'
},

['sparkplug']  = {
    ['name'] = 'sparkplug',
    ['label'] = 'Car Sparkplug',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'sparkplug.png',
    ['unique'] = false,
    ['useable'] = false,
    ['shouldClose'] = false,
    ['combinable'] = nil,
    ['description'] = 'Vehicle sparkplug can be used in vehicle crafting.'
},

['wheel']  = {
    ['name'] = 'wheel',
    ['label'] = 'Car Wheel',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'wheel.png',
    ['unique'] = false,
    ['useable'] = false,
    ['shouldClose'] = false,
    ['combinable'] = nil,
    ['description'] = 'Vehicle wheel can be used in vehicle crafting.'
},

['car_glass']  = {
    ['name'] = 'car_glass',
    ['label'] = 'Car Glass',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'car_glass.png',
    ['unique'] = false,
    ['useable'] = false,
    ['shouldClose'] = false,
    ['combinable'] = nil,
    ['description'] = 'Vehicle glass can be used in vehicle crafting.'
},

['car_blueprint']  = {
    ['name'] = 'car_blueprint',
    ['label'] = 'Car Blueprint',
    ['weight'] = 100,
    ['type'] = 'item',
    ['image'] = 'car_blueprint.png',
    ['unique'] = false,
    ['useable'] = false,
    ['shouldClose'] = false,
    ['combinable'] = nil,
    ['description'] = 'Vehicle blueprint can be used in vehicle crafting.'
},
```

</details>

<details>

<summary>ESX Item Configration</summary>

Open your database and import these SQL lines for inventory.

```sql
INSERT INTO `items`(`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('toolkit','Toolkit','1','1','1');
INSERT INTO `items`(`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('car_door','Car Doors','1','1','1');
INSERT INTO `items`(`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('car_battery','Car Battery','1','1','1');
INSERT INTO `items`(`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('sparkplug','Car Sparkplug','1','1','1');
INSERT INTO `items`(`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('wheel','Car Wheel','1','1','1');
INSERT INTO `items`(`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('car_glass','Car Glass','1','1','1');
INSERT INTO `items`(`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('car_blueprint','Car Blueprint','1','1','1');
```

</details>

<details>

<summary>OX Item Configration</summary>

Go to `ox_inventory/data/items.lua` and copy & paste these items in bottom

```lua
	["toolkit"] = {
		label = "Toolkit",
		weight = 1,
		stack = true,
		close = true,
	},

	["car_door"] = {
		label = "Car Door",
		weight = 1,
		stack = true,
		close = true,
	},
	
	["car_battery"] = {
		label = "Car Battery",
		weight = 1,
		stack = true,
		close = true,
	},

	["car_blueprint"] = {
		label = "Car Blueprint",
		weight = 1,
		stack = true,
		close = true,
	},

	["car_glass"] = {
		label = "Car Glass",
		weight = 1,
		stack = true,
		close = true,
	},

	["sparkplug"] = {
		label = "Car Sparkplug",
		weight = 1,
		stack = true,
		close = true,
	},

	["wheel"] = {
		label = "Car Wheel",
		weight = 1,
		stack = true,
		close = true,
	},
```

</details>

## 3. Add Item Photos to Inventory

Place the item images you downloaded into the img or images folder of the inventory script you are using.

{% file src="/files/SVNWJWtrGoeqnW2Is0NM" %}

## Setup Finished 🎉

Our setup is now complete, and from this point on, our tasks will be related to customizations. qubit-car crafting comes with 3 default craft areas, which cover cars, helicopters, and marine vehicles. If you wish, you can completely remove these areas and add your own types of zones. The image below details what each area is used for.<br>

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FPZW7d5CaJtcIoTYDdrHp%2Fimage.avif?alt=media&amp;token=eb0ba643-cab8-4f0f-9817-ac6fddd16547" alt=""><figcaption><p>Craftzone illustrated configration</p></figcaption></figure>

{% hint style="danger" %} <mark style="color:red;">**Red Plane**</mark> crafting cars spawning with **PolyZone** function if you are enter this red plane.
{% endhint %}

{% hint style="warning" %} <mark style="color:orange;">**Orange Box**</mark> it's defining height of the red plane.
{% endhint %}

{% hint style="success" %} <mark style="color:green;">**Green Zone**</mark> it's defining craftable car positions, must be in the red plane, can be multiple.
{% endhint %}

{% hint style="info" %} <mark style="color:blue;">**Blue Zone**</mark> it's defining crafted car spawn location.
{% endhint %}


# Prop Search

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FIrSCxXryNgCfYdlMmWZx%2Fprop_search.jpg?alt=media&amp;token=10a82230-b37c-408a-8ad0-271dfb834cbb" alt=""><figcaption></figcaption></figure>

Since you are here, it means you are looking for information on how to use **Qubit Prop Search** First of all, we are grateful that you purchased the product and supported us. Below, you will find detailed information on how to install it. If you continue to experience problems with the installation, please reach out to us through our [Discord](http://discord.qubitstudios.net).


# Installation & Configuration

First, you need to install the scripts **required** for **Qubit Looting** to work. After installing these scripts, you can put **qubit-looting** into your resources folder and run it.

* oxmysql / mysql-async
* ox\_lib - [**Download Here**](https://github.com/overextended/ox_lib/releases/download/v3.11.0/ox_lib.zip)
* ox\_target - [**Download Here**](https://github.com/overextended/ox_target/releases/download/v1.13.1/ox_target.zip)

Qubit Looting comes with a ready-made loot meta, with loot configured for a long-lasting survival experience. If you want, you can remove these default loots and create your own loot meta. To protect copyright, we cannot share the image of the items

## 1. Framework Configration

**Qubit Looting** supports ESX and QB frameworks. If you're using a different framework, unfortunately you won't be able to run **Qubit Looting**.

Open the `config.lua` and `fxmanifest.lua` change framework setttings for your needs

<details>

<summary>QBCore Settings</summary>

If you're using the QBCore / QBX framework, you should configure the framework settings in the config as follows

&#x20;Open `config.lua` and change these lines

```lua
Config.Framework = "QB" -- QB, oldESX, ESX
Config.CoreName = 'qb-core' -- qb-core, es_extended
```

</details>

<details>

<summary>ESX Settings</summary>

If you're using the ESX framework, you should configure the framework settings in the config as follows

&#x20;Open `config.lua` and change these lines

```lua
Config.Framework = "ESX" -- QB, oldESX, ESX
Config.CoreName = 'es_extended' -- qb-core, es_extended
```

</details>

## 2. Item Definition

All items in **Config.Items** are fully customizable. we will define the items to be placed inside the loots. You can set their rarity color, label, and the scale they will have in the inventory.

{% hint style="info" %}
**rarityColor** field is only change color, you can change from **Config.rarity**
{% endhint %}

```lua
["garbage"] = { -- Item Inventory Name
  label = "Garbage", -- UI Name
  description = "Recyclable waste material", -- UI Description
  fullscale = false, -- UI Fullscale or Compact view
  rarityColor = "verycommon", -- UI Rarity color
},
```

## 3. Rarity Definition

You can edit all rarity rates here with the names and rarity colors you want to set, and you can also change their rates as you wish. Please make sure that the total equals 100% and distribute the rates from highest to lowest. 100% <> %0

```lua
-- Rarity Drop Rates (Percentage based)
Config.rarity = {
    verycommon = {0, 50, '#ffffff'},    -- 50% Chance
    common = {50, 75, '#1eff00'},       -- 25% Chance
    uncommon = {75, 90, '#0070dd'},     -- 15% Chance
    rare = {90, 97, '#a335ee'},         -- 7% Chance
    veryrare = {97, 99, '#ff8000'},     -- 2% Chance
    legendary = {99, 100, '#ffd700'}    -- 1% Chance
}

```

## 4. Lootable Definition

In this area, we will make the props we want lootable. You can define as many Lootables as you want according to the schema below.

```lua
{
    name = "verylow", -- Custom Lootable Name ( Example : "bad,good,super" )
    description = "Trash bins, small boxes", -- Description for understanding, not in-game only config.
    props = { -- Lootable Prop Hash List
        -838860344, -1543210774, -756152956, -1340926540, 153748523
    },
    loots = { -- Loot Search Configration, all rarity is changeable
        -- if you want you can remove any category like "verycommon" or "rare"
        verycommon = { -- 50% Chance
            {name = "garbage", min = 1, max = 2},
            {name = "scrapofclothing", min = 1, max = 2},
            {name = "fabric", min = 1, max = 2},
            {name = "plastic", min = 1, max = 2},
            {name = "glass", min = 1, max = 2}
        },
        common = { -- 25% Chance
            {name = "scrapofclothing", min = 1, max = 2},
            {name = "fabric", min = 1, max = 2},
            {name = "plastic", min = 1, max = 2},
            {name = "glass", min = 1, max = 2}
        },
        uncommon = { -- 15% Chance
            {name = "fabric", min = 1, max = 3},
            {name = "plastic", min = 1, max = 3},
            {name = "glass", min = 1, max = 3}
        },
        rare = { -- 7% Chance
            {name = "fabric", min = 1, max = 4},
            {name = "glass", min = 1, max = 4},
            {name = "plastic", min = 1, max = 4},
            {name = "weapon_bat", min = 0, max = 1},
        },
        veryrare = { -- 2% Chance
            {name = "fabric", min = 1, max = 5},
            {name = "glass", min = 1, max = 5},
            {name = "weapon_bat", min = 0, max = 1},
            {name = "weapon_crowbar", min = 0, max = 1},
        },
        legendary = { -- 1% Chance
            {name = "weapon_knife", min = 1, max = 1},
            {name = "weapon_crowbar", min = 1, max = 1},
        }
    }
},
```


# 3D Printer

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FiHRfrXZ3urMakLtbVFDm%2F3dprinter.jpg?alt=media&amp;token=0a4439fd-a9f0-49f5-b65b-b7f2237de1fb" alt=""><figcaption></figcaption></figure>

Since you are here, it means you are looking for information on how to use **Qubit 3D Printer**. First of all, we are grateful that you purchased the product and supported us. Below, you will find detailed information on how to install it. If you continue to experience problems with the installation, please reach out to us through our [Discord](http://discord.qubitstudios.net).


# Installation & Configuration

First, you need to install the scripts **required** for **Qubit 3D Printer** to work. After installing these scripts, you can put **qubit-3dprinter** into your resources folder and run it.

* oxmysql / mysql-async
* ox\_lib - [**Download Here**](https://github.com/overextended/ox_lib/releases/download/v3.11.0/ox_lib.zip)
* ox\_target - [**Download Here**](https://github.com/overextended/ox_target/releases/download/v1.13.1/ox_target.zip)
* bzZzi 3D Prop **( Optional for Big Printer )**  -[ **Download Here**](https://forum.cfx.re/uploads/short-url/oCBJlT6BUwaro9wAbL6nsBhbdNB.zip)
* Gizmo Object **( Optional )** - [**Download Here**](https://github.com/Demigod916/object_gizmo/releases/download/v2.0.2/object_gizmo.zip)

## 1. Framework Configration

Qubit Vehicle Crafting supports ESX and QB frameworks. If you're using a different framework, unfortunately you won't be able to run Qubit Car Crafting.

Open the `config.lua` and `fxmanifest.lua` change framework setttings for your needs

<details>

<summary>QBCore Settings</summary>

If you're using the qbcore framework, you should configure the framework settings in the config as follows

&#x20;Open `config.lua` and change these lines

```lua
Config.Framework = "QB" -- QB, oldESX, ESX
Config.CoreName = 'qb-core' -- qb-core, es_extended
```

</details>

<details>

<summary>ESX Settings</summary>

If you're using the qbcore framework, you should configure the framework settings in the config as follows

&#x20;Open `config.lua` and change these lines

```lua
Config.Framework = "ESX" -- QB, oldESX, ESX
Config.CoreName = 'es_extended' -- qb-core, es_extended
```

</details>

## 2. Defining Items

You can produce any item with a 3D Printer. All you need to do is add the item you want to produce to `Config.PrintItems`

{% hint style="success" %}
**Here is example 3D Print item definition**&#x20;
{% endhint %}

```lua
["weapon_pistol"] = { -- Item Name
    title = "9mm Pistol", -- Menu Name
    description = "Start process of 3D object", -- Menu Description
    visual_value = "w_pi_pistol", -- Object Name
    visual_value_type = "object",  -- "object" or "image"  (IT'S UNDER DEVELOPMENT, USE ONLY "OBJECT"),
    printingTime = 120, -- Printing Seconds
    batteryConsumeRate = 1.0, -- This value determines how much resources will be consumed in 5 seconds.
    resinConsumeRate = 1.0, -- This value determines how much resources will be consumed in 5 seconds.
},
```

## 3. Importing Items

To use the Qubit 3D Printer, you need to integrate the printer, battery, and resin items into your framework. Follow these steps to add the items

{% hint style="info" %}
If you are using QBCore or OX, you don't need to import the SQL.
{% endhint %}

<details>

<summary>QBCore Item Configration</summary>

Go to the **qb-core** folder, open `qb-core/shared/items.lua`, and add the crafting items line at the bottom

```lua
['3d_printer'] 					 = {['name'] = '3d_printer', 			 	  	  	['label'] = '3D FX Printer', 	['weight'] = 0, 		['type'] = 'item', 		['image'] = '3d_printer.png', 				['unique'] = true, 	['useable'] = true, 	['shouldClose'] = true,   ['combinable'] = nil,   ['description'] = '3D Metal object printer.'},
['3d_resin'] 					 = {['name'] = '3d_resin', 			 	  	  	['label'] = '3D Printer Resin Mix', 	['weight'] = 0, 		['type'] = 'item', 		['image'] = '3d_resin.png', 				['unique'] = true, 	['useable'] = true, 	['shouldClose'] = true,   ['combinable'] = nil,   ['description'] = '3D FX Printer Resin.'},
['3d_battery'] 					 = {['name'] = '3d_battery', 			 	  	  	['label'] = '3D Printer Battery', 	['weight'] = 0, 		['type'] = 'item', 		['image'] = '3d_battery.png', 				['unique'] = true, 	['useable'] = true, 	['shouldClose'] = true,   ['combinable'] = nil,   ['description'] = '3D FX Printer Battery.'},
```

</details>

<details>

<summary>ESX Item Configration</summary>

Open your database and import these SQL lines for inventory.

```sql
INSERT INTO `items`(`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('3d_printer','3D FX Printer','1','1','1');
INSERT INTO `items`(`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('3d_resin','3D Printer Resin Mix','1','1','1');
INSERT INTO `items`(`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('3d_battery','3D Printer Battery','1','1','1');
```

</details>

<details>

<summary>OX Item Configration</summary>

Go to `ox_inventory/data/items.lua` and copy & paste these items in bottom

```lua
	["3d_printer"] = {
		label = "3D FX Printer",
		weight = 1,
		stack = true,
		close = true,
	},

	["3d_resin"] = {
		label = "3D Printer Resin Mix",
		weight = 1,
		stack = true,
		close = true,
	},
	
	["3d_battery"] = {
		label = "3D Printer Battery",
		weight = 1,
		stack = true,
		close = true,
	},
```

</details>

## Setup Finished 🎉

After configuring your items, you can start using the 3D Printer. If you encounter any issues during the setup process, please visit our Discord for more comprehensive support.


# Honor System

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2FQnynDQdOYXI9pnzu4D2u%2Fhonorsystem.jpg?alt=media&amp;token=08f15127-7434-46a8-a359-4fed0840e58e" alt=""><figcaption></figcaption></figure>

Since you are here, it means you are looking for information on how to use **Qubit Honor System**. First of all, we are grateful that you purchased the product and supported us. Below, you will find detailed information on how to install it. If you continue to experience problems with the installation, please reach out to us through our [Discord](http://discord.qubitstudios.net).


# Installation & Configuration

First, you need to install the scripts **required** for **Qubit Honor System** to work. After installing these scripts, you can put **qubit-honorsystem** into your resources folder and run it.

* oxmysql / mysql-async

## 1. Framework Configration

Qubit Honor System supports ESX and QB frameworks. If you're using a different framework, unfortunately you won't be able to run **Qubit Honor System.**

Open the `config.lua` and `fxmanifest.lua` change framework setttings for your needs

<details>

<summary>QBCore Settings</summary>

If you're using the qbcore framework, you should configure the framework settings in the config as follows

&#x20;Open `config.lua` and change these lines

```lua
Config.Framework = "QB" -- QB, oldESX, ESX
Config.CoreName = 'qb-core' -- qb-core, es_extended
```

</details>

<details>

<summary>ESX Settings</summary>

If you're using the qbcore framework, you should configure the framework settings in the config as follows

&#x20;Open `config.lua` and change these lines

```lua
Config.Framework = "ESX" -- QB, oldESX, ESX
Config.CoreName = 'es_extended' -- qb-core, es_extended
```

</details>

## 2. Max Honor Pool

The value of `Config.MaxHonorPool` determines the minimum and maximum point levels a player can reach. The number you set will also define the negative limit. For example, if you set a limit of 10,000, it means the neutral level is 0, and the honor value can drop as low as -10,000. You can assign levels as percentage values through the config. If you set a wider range of values, you can provide users with less honor, allowing for a longer-lasting progression flow.

## 3. Honor Levels

`Config.HonorLevels` determines how many levels a player can reach. A value of 50% represents the NEUTRAL level — someone who is neither good nor bad, essentially the balance point of honor. 0% is the lowest possible honor (the worst), and 100% is the highest honor. Following the rules, you can define 3 levels or expand it to 10 levels — the range is fully dynamic, and you can add as many levels as you like. For example, if you want to create 3 levels, you can define them as shown below.

**Example Three Level Config**

```lua
Config.HonorLevels = { -- based on percentage 0% means - Honor Pool Value like (-10000) - 100% means - Honor Pool Value like (10000)
    Lowest = {
        min = 0, -- min honor for the honor level
        max = 33, -- min and max honor for the honor level
        icon = "bad100.png", -- icon for the honor level
        title = "BAD LEVEL", -- title for the honor level
        subtitle = "YOU ARE GANGSTER", -- subtitle for the honor level
        levelSoundtrack = "bad100", -- soundtrack for the honor level
        levelSoundtrackVolume = 0.6 -- volume for the honor level
    },
    Neutral = {
        min = 33,
        max = 66,
        icon = "zero.png",
        title = "NEUTRAL CITIZEN",
        subtitle = "UNKNOWN REPUTATION",
        levelSoundtrack = nil,
        levelSoundtrackVolume = 0.2
    },
    Highest = {
        min = 66,
        max = 100,
        icon = "good100.png",
        title = "GOOD LEVEL",
        subtitle = "YOU ARE HERO",
        levelSoundtrack = "good100",
        levelSoundtrackVolume = 0.2
    }
}
```

## 5. Decrease & Increase on Killing

You can make it so that when players kill someone with the jobs you specified in the config, their honor value decreases. If a player kills someone with the police job or any of the defined jobs, their honor will decrease. Conversely, if they kill someone not belonging to those jobs, their honor will increase. You can also set how often the honor value changes upon killing using `Config.KillCooldown`.

```lua
Config.NPCKillingDecrease = true -- If true, NPCs will decrease the honor of the player
Config.NPCKillingDecreaseCooldown = 60000 -- Cooldown for NPC killing decrease
Config.NPCKillingDecreaseAmount = 1000 -- How much honor to decrease when an NPC is killed
Config.NPCKillingDecreaseReason = "YOU KILLED AN INNOCENT CIVILIAN!" -- Reason for honor decrease when killing an NPC

Config.KillCooldown = 60000 -- Cooldown for decrease/increase on kill
Config.DecreaseOnKilled = {
    ['police'] = {
        decreaseAmount = 800,
        reason = "YOU GUNNED DOWN A POLICE OFFICER! CITY ON ALERT"
    },
    ['sheriff'] = {
        decreaseAmount = 850,
        reason = "YOU ELIMINATED A SHERIFF! SEVERE LEGAL CONSEQUENCES"
    },
    ['highway'] = {
        decreaseAmount = 750,
        reason = "YOU TOOK OUT A HIGHWAY PATROL! STATEWIDE WANTED"
    },
    ['swat'] = {
        decreaseAmount = 1000,
        reason = "YOU NEUTRALIZED A SWAT OFFICER! MOST WANTED LIST"
    },
    ['bcso'] = {
        decreaseAmount = 850,
        reason = "YOU DISPATCHED A BCSO DEPUTY! HUNTED IN RURAL AREAS"
    },
    ['doj'] = {
        decreaseAmount = 900,
        reason = "YOU KILLED A DOJ! FEDERALS HUNTS YOU SOON!"
    },
    ['ambulance'] = {
        decreaseAmount = 700,
        reason = "YOU ATTACKED A PARAMEDIC! SOCIETY IS OUTRAGED"
    },
    ['judge'] = {
        decreaseAmount = 950,
        reason = "YOU ASSASSINATED A JUDGE! JUSTICE SHOWS NO MERCY"
    }
}

Config.IncreaseIfPlayerHaveDecreasedJobs = true -- If a player has decreased jobs like police or etc, they will be increased if they kill a Increased Job
Config.IncreaseOnKilled = {
    ['ballas'] = {
        increaseAmount = 300,
        reason = "YOU NEUTRALIZED A BALLAS MEMBER! CITY IS SAFER"
    },
    ['vagos'] = {
        increaseAmount = 280,
        reason = "YOU TOOK DOWN A VAGOS MEMBER! CLEANER STREETS"
    },
    ['families'] = {
        increaseAmount = 290,
        reason = "YOU ELIMINATED A FAMILIES MEMBER! SAFER HOODS"
    },
    ['mafia'] = {
        increaseAmount = 450,
        reason = "YOU EXECUTED A MAFIA MEMBER! BLOW TO CRIME"
    },
    ['cartel'] = {
        increaseAmount = 500,
        reason = "YOU DISMANTLED A CARTEL MEMBER! DRUG TRADE HIT"
    },
    ['triads'] = {
        increaseAmount = 400,
        reason = "YOU WIPED OUT A TRIAD! ASIAN CRIME ALERTED"
    },
    ['biker'] = {
        increaseAmount = 350,
        reason = "YOU HANDLED A BIKER GANG MEMBER! SAFER ROADS"
    }
}
```

## 6. Setup Database

To run `qubit-honorsystem`you need to import the following SQL file.

{% file src="/files/Hc6jxAEXDrCId9rGukzk" %}

## Setup Finished 🎉

After configuring your items, you can start using the **Qubit Honor System** If you encounter any issues during the setup process, please visit our Discord for more comprehensive support.


# Usage & Integration

You can easily integrate the Qubit Honor system into any desired job using the client-side and server-side exports. You can find the exports below.

<details>

<summary>Client Side Usage</summary>

```lua
exports['qubit-honorsystem']:IncreaseHonor(amount, reason)
exports['qubit-honorsystem']:DecreaseHonor(amount, reason)
exports['qubit-honorsystem']:GetHonor()
exports['qubit-honorsystem']:GetHonorPercentage()
exports['qubit-honorsystem']:GetHonorLevel()
```

</details>

<details>

<summary>Server Side Usage</summary>

```lua
exports['qubit-honorsystem']:IncreaseHonor(source, amount, reason)
exports['qubit-honorsystem']:DecreaseHonor(source, amount, reason)
exports['qubit-honorsystem']:GetHonor(source)
exports['qubit-honorsystem']:GetHonorPercentage(source)
exports['qubit-honorsystem']:GetHonorLevel(source)
```

</details>

### Decrease/Increase Honor Export

The "Increase Honor" export is used in both server and client Lua files to increase a user's honor value. Here are a few real usage examples:

Example Script snippet <mark style="color:yellow;">**qbx\_truckrobbery/client/main.lua**</mark>

<pre class="language-lua" data-line-numbers><code class="lang-lua">local function lootTruck()
    local looting = true
	CreateThread(function()
        if lib.progressBar({
            duration = config.lootDuration,
            label = locale('info.looting_truck'),
            useWhileDead = false,
            canCancel = true,
            disable = {
                move = true,
                car = true,
                combat = true,
                mouse = false,
            },
            anim = {
                dict = 'anim@heists@ornate_bank@grab_cash_heels',
                clip = 'grab',
                flag = 1,
            },
            prop = {
                model = `prop_cs_heist_bag_02`,
                bone = 57005,
                pos = vec3(0.0, 0.0, -0.16),
                rot = vec3(250.0, -30.0, 0.0),
            }
        }) then
            local success = lib.callback.await('qbx_truckrobbery:server:giveReward')
            -- WE ARE DECREASE HONOR FOR TRUCK ROBBERY ON CLIENT SIDE
<strong>            exports['qubit-honorsystem']:DecreaseHonor(500, "BANK TRUCK ROBBED")
</strong>            -- exports['qubit-honorsystem']:IncreaseHonor(500, "BANK TRUCK ROBBED")
            if not success then return end
            SetPedComponentVariation(cache.ped, 5, 45, 0, 2)
            resetMission()
        end
        looting = false
    end)
    while looting do
        if #(GetEntityCoords(cache.ped) - GetEntityCoords(truck)) > 6 and lib.progressActive() then
            lib.cancelProgress()
        end
        Wait(1000)
    end
end
</code></pre>

Let's do the same example for the server side:

Example Script snippet <mark style="color:yellow;">**qbx\_truckrobbery/server/main.lua**</mark>

<pre class="language-lua" data-line-numbers><code class="lang-lua">lib.callback.register('qbx_truckrobbery:server:giveReward', function(source)
    if Entity(truck).state.truckstate ~= TruckState.LOOTABLE then return end
    Entity(truck).state:set('truckstate', TruckState.LOOTED, true)
    local cantCarryRewards = {}
    local cantCarryRewardsSize = 0
    for i = 1, #config.rewards do
        local reward = config.rewards[i]
        if not reward.probability or math.random() &#x3C;= reward.probability then
            local amount = math.random(reward.minAmount or 1, reward.maxAmount or 1)
            if exports.ox_inventory:CanCarryItem(source, reward.item, amount) then
                exports.ox_inventory:AddItem(source, reward.item, amount)
            else
                cantCarryRewardsSize += 1
                cantCarryRewards[cantCarryRewardsSize] = {reward.item, amount}
            end
        end
    end
    -- WE ARE DECREASE HONOR FOR TRUCK ROBBERY ON SERVER SIDE
<strong>    exports['qubit-honorsystem']:DecreaseHonor(source, 500, "BANK TRUCK ROBBED")
</strong>    -- exports['qubit-honorsystem']:IncreaseHonor(source, 500, "BANK TRUCK ROBBED")
    if cantCarryRewardsSize > 0 then
        exports.ox_inventory:CustomDrop('Loot', cantCarryRewards, GetEntityCoords(GetPlayerPed(source)))
    end
	exports.qbx_core:Notify(source, locale('success.looted'), 'success')
	return true
end)
</code></pre>

### GetHonorLevel Honor Export

In this way, we can grant or reduce honor for the user within any profession. Now, for example, we want to adjust the user's earnings based on their honor level. To do this, we will use the `GetHonorLevel` export and, depending on the level, define what they will receive using the desired variable.

Example Script snippet <mark style="color:yellow;">**qbx\_truckrobbery/server/main.lua**</mark>

<pre class="language-lua" data-line-numbers><code class="lang-lua">lib.callback.register('qbx_truckrobbery:server:giveReward', function(source)
    if Entity(truck).state.truckstate ~= TruckState.LOOTABLE then return end
    Entity(truck).state:set('truckstate', TruckState.LOOTED, true)
    local cantCarryRewards = {}
    local cantCarryRewardsSize = 0
    for i = 1, #config.rewards do
        local reward = config.rewards[i]
        if not reward.probability or math.random() &#x3C;= reward.probability then
            local amount = math.random(reward.minAmount or 1, reward.maxAmount or 1)

	    -- Start Honor Decrease &#x26; Change Reward Amount
	    ---- We are maked amount multiplie by the honor level
	    ---- This is to make it so the lower your honor level, the more you get because this job is illegal
<strong>	    local currentLevel = exports['qubit-honorsystem']:GetHonorLevel(source)
</strong><strong>	    amount = amount * currentLevel.levelData['qbx_truckrobbery:rewardMultiplier']
</strong>	    -- End Honor Decrease &#x26; Change Reward Amount

            if exports.ox_inventory:CanCarryItem(source, reward.item, amount) then
                exports.ox_inventory:AddItem(source, reward.item, amount)
            else
                cantCarryRewardsSize += 1
                cantCarryRewards[cantCarryRewardsSize] = {reward.item, amount}
            end
        end
    end

    if cantCarryRewardsSize > 0 then
        exports.ox_inventory:CustomDrop('Loot', cantCarryRewards, GetEntityCoords(GetPlayerPed(source)))
    end
	exports.qbx_core:Notify(source, locale('success.looted'), 'success')
	return true
end)
</code></pre>

In the example above, I used the `GetHonorLevel` export to retrieve the user's current level data. This level data includes the following values, which come from `config.lua`

<mark style="color:yellow;">**GetHonorLevel**</mark> Export Response;

<pre class="language-lua"><code class="lang-lua">min = 15,
max = 30,
icon = "bad50.png",
title = "NOTORIOUS OUTLAW",
subtitle = "THREAT TO SOCIETY",
levelSoundtrack = "bad50",
levelSoundtrackVolume = 0.2,
levelData = {
<strong>    ['qbx_truckrobbery:rewardMultiplier'] = 1.4
</strong>}
level = "SlightlyBad"
</code></pre>

Here, I created a custom variable inside the `levelData` variable in `config.lua` by using the script's name, and I named it `rewardMultiplier`. You can define anything you want—this value doesn't have to be a number; it can also be an array or a string, depending on what you want to store for a specific job. Then, I set this value to `1.4` in `config.lua` so that players with the `SlightlyBad` level will receive 1.4 times more items from this heist. The current `config.lua` looks like the following:

{% code lineNumbers="true" %}

```lua
Config.HonorLevels = { -- based on percentage 0% means - Honor Pool Value like (-10000) - 100% means - Honor Pool Value like (10000)
    VeryBad = {
        min = 0, -- min honor for the honor level
        max = 5, -- min and max honor for the honor level
        icon = "bad100.png", -- icon for the honor level
        title = "THE SCARFACE", -- title for the honor level
        subtitle = "THE WORLD IS YOURS", -- subtitle for the honor level
        levelSoundtrack = "bad100", -- soundtrack for the honor level
        levelSoundtrackVolume = 0.6, -- volume for the honor level
        levelData = {
          -- EXAMPLE: 
          -- ['script_name:variable_name'] = 'value',
        } -- You can add more variables for specific job or script integration
    },
    Bad = {
        min = 5,
        max = 15,
        icon = "bad75.png",
        title = "MOST WANTED",
        subtitle = "MOST DANGEROUS CRIMINAL",
        levelSoundtrack = "bad75",
        levelSoundtrackVolume = 0.2,
        levelData = {
            ['qbx_truckrobbery:rewardMultiplier'] = 1.8
        }
    },
    SlightlyBad = {
        min = 15,
        max = 30,
        icon = "bad50.png",
        title = "NOTORIOUS OUTLAW",
        subtitle = "THREAT TO SOCIETY",
        levelSoundtrack = "bad50",
        levelSoundtrackVolume = 0.2,
        levelData = {
            ['qbx_truckrobbery:rewardMultiplier'] = 1.4
        }
    },
    AlmostNeutral = {
        min = 30,
        max = 50,
        icon = "bad25.png",
        title = "STREET THUG",
        subtitle = "CRIMINAL ACTIVITIES",
        levelSoundtrack = "bad25",
        levelSoundtrackVolume = 0.2,
        levelData = {
            ['qbx_truckrobbery:rewardMultiplier'] = 1.2
        }
    },
    Neutral = {
        min = 50,
        max = 50,
        icon = "zero.png",
        title = "NEUTRAL CITIZEN",
        subtitle = "UNKNOWN REPUTATION",
        levelSoundtrack = nil,
        levelSoundtrackVolume = 0.2,
        levelData = {
            ['qbx_truckrobbery:rewardMultiplier'] = 1.0
        }
    },
    SlightlyGood = {
        min = 50,
        max = 70,
        icon = "good25.png",
        title = "TRUSTED FRIEND",
        subtitle = "GAINING RESPECT",
        levelSoundtrack = "good25",
        levelSoundtrackVolume = 0.3,
        levelData = {
            ['qbx_truckrobbery:rewardMultiplier'] = 0.8
        }
    },
    Good = {
        min = 70,
        max = 85,
        icon = "good50.png",
        title = "RESPECTED CITIZEN",
        subtitle = "VALUED MEMBER OF SOCIETY",
        levelSoundtrack = "good50",
        levelSoundtrackVolume = 0.2,
        levelData = {
            ['qbx_truckrobbery:rewardMultiplier'] = 0.6
        }
    },
    VeryGood = {
        min = 85,
        max = 95,
        icon = "good75.png",
        title = "FAMOUS PERSON",
        subtitle = "WELL-KNOWN IN THE COMMUNITY",
        levelSoundtrack = "good75",
        levelSoundtrackVolume = 0.2,
        levelData = {
            ['qbx_truckrobbery:rewardMultiplier'] = 0.4
        }
    },
    Legendary = {
        min = 95,
        max = 100,
        icon = "good100.png",
        title = "SAINT OF THE CITY",
        subtitle = "YOU ARE A LEGENDARY HERO",
        levelSoundtrack = "good100",
        levelSoundtrackVolume = 0.2,
        levelData = {
            ['qbx_truckrobbery:rewardMultiplier'] = 0.2
        }
    }
}
```

{% endcode %}


# Native Alert

<figure><img src="https://2065585120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fq7HrDnyk8Su9fbU8m4ZV%2Fuploads%2F0bevAVeKbrSmjQCJ6DLv%2Ftest.jpg?alt=media&amp;token=6efc9f2f-911d-43db-9b66-bcf34ed62e83" alt=""><figcaption></figcaption></figure>

Since you are here, it means you are looking for information on how to use **Qubit Notification**. First of all, we are grateful that you purchased the product and supported us. Below, you will find detailed information on how to install it. If you continue to experience problems with the installation, please reach out to us through our [Discord](http://discord.qubitstudios.net).


# Installation & Configuration

First, you need to install the scripts **required** for **Qubit Notification** to work. After installing these scripts, you can put **qubit-notification** into your resources folder and run it.

* xsound - [**Download here**](https://github.com/Xogy/xsound/archive/refs/tags/1.4.1.zip)

## 1. Framework Configration

This script is completely standalone; you can use it with all frameworks. You don't need to make any extra adjustments.

## 2. Edit xSound fxmanifest.lua

Qubit Notification has separate sound effects for each different notification type. We need to load these sound effects into xSound, so we need to update the fxmanifest.lua as follows.

## 3. Add Sound files to xSound

You need download and add sound fx file to `xsound/html/sounds` folder,

{% file src="/files/N1OMzKIZ6glLeTu4ZGdR" %}

{% file src="/files/tGY8KO4uhGxYbnowyYZk" %}

{% file src="/files/KlqxniGttowhaJPrpBCp" %}

## Setup Finished 🎉

Our setup is complete, and now Qubit Notification is fully ready to use. Below, you can find a few example codes that you can run on both the client and server side.

{% hint style="success" %}
**Server-Side Usage Examples**
{% endhint %}

```lua
TriggerClientEvent('qubit-alert:client:send', src, 'TELEGRAPH', 'WE NEED HELP ON TUMBLEWEED', 'MESSAGE', 6000)
TriggerClientEvent('qubit-alert:client:send', src, 'ALERT', 'VALENTINE MARKET IS ROBBERING', 'ROBBERY', 6000)
TriggerClientEvent('qubit-alert:client:send', src, 'INFO', 'SERVER IS RESTARTIN IN 5 MINUTES', 'ANNOUNCEMENT', 6000)
```

```lua
TriggerClientEvent("qubit-alert:client:send", src, type, message, title, timeout)
```

{% hint style="success" %}
**Client-Side Usage Examples**
{% endhint %}

```lua
TriggerEvent('qubit-alert:client:send', 'TELEGRAPH', 'WE NEED HELP ON TUMBLEWEED', 'MESSAGE', 6000)
TriggerEvent('qubit-alert:client:send', 'ALERT', 'VALENTINE MARKET IS ROBBERING', 'ROBBERY', 6000)
TriggerEvent('qubit-alert:client:send', 'INFO', 'SERVER IS RESTARTIN IN 5 MINUTES', 'ANNOUNCEMENT', 6000)
```

```lua
TriggerEvent('qubit-alert:client:send', type, type, message, title, timeout)
```


