# Features

***

### Custom vehicle models

{% stepper %}
{% step %}

#### **Step 1 - Introduction**

In the `cd_dispatch3d/configs/config_ui.js` file you will find a list of jobs with their associated models.

<details>

<summary>A single entry in the list looks like this:</summary>

```javascript
police: // Job name. Change this to the name of your job. This is used in the code and should be unique.
        {
            car:{ // Car model configuration. Do not change the name "car" as it is used in the code.
                file_name: "police.glb", // File name of the vehicle/ped model inside the models/placeable folder.
                scale: 2, // Scale of the model. 1 is default scale. Adjust as needed. Can use decimals (E.g. 0.01 or 0.1 and so on)
                position_adjustment: { // Position adjustment for the model. Adjust as needed. Shifts the model in the X, Y and Z axis.
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: { // Rotation adjustment for the model in DEGREES. Adjust as needed. Correct rotation enables heading tracking.
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            foot: {
                file_name: "s_m_y_cop_01.glb",
                scale: 3,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            helicopter : {
                file_name: "polmav.glb",
                scale: 2,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            boat : {
                file_name: "predator.glb",
                scale: 2,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            motorcycle: {
                file_name: "policeb.glb",
                scale: 2,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            }
    },
```

</details>

The model files are located under `cd_dispatch3d/models/placeable/`

{% hint style="info" %}
The models we provide by default are GTA 5's default low quality models.

In case you are looking to implement your own models make sure they are not high poly count since it will make an impact on lower spec machines.
{% endhint %}

The job can have the next vehicle / transport types

* car
* foot
* helicopter
* boat
* motorcycle

You can either provide your own, use already existing models, or if you omit any from the list the script will use default models.
{% endstep %}

{% step %}

#### **Step 2 - Models**

**Getting your models**

Our best recommendation is getting the models from the game itself in their low quality version. These models are already optimized for the game, will work the best, as well as respect FiveM's terms of service.

Here are some interesting links which can have explanations on extracting game models:

* Codewalker - <https://github.com/dexyfex/CodeWalker>
* Sollumz - <https://github.com/Sollumz/Sollumz>
* Blender - <https://www.blender.org/>

\*Alternatively you can grab models from websites like [Sketchfab](https://sketchfab.com/), however it might be difficult finding game optimized models with correct licensing.

{% hint style="info" %}
Please note that we will not provide support with extracting models, since it is a customization of the resource.
{% endhint %}

**Installing models**

Prepare your model files and paste them into `cd_dispatch3d/models/placeable/`

{% hint style="warning" %}
The model files must be in a `.glb` format, otherwise the resource won't recognize the files and will fail to load them.
{% endhint %}

Keep a note of the file names, since you will need them for the next step.
{% endstep %}

{% step %}

### Step 3 - Configuration

Copy the list from the [introduction step](#introduction) and paste it below one of the items in the `config_ui.js` file.

Make sure you include the <kbd>,</kbd> symbol so the script doesn't break. \
If you are using a code editor such as VSCode it should alert you in case you miss this.

Let's assume our new job is going to be called **'bcso':**

In the code you pasted, rename 'police' to 'bcso'

Change each of the transport mode file names to the names of models you have added to the `placeable/` folder

<details>

<summary>Example</summary>

```javascript
bcso: // Job name. Change this to the name of your job. This is used in the code and should be unique.
        {
            car:{ // Car model configuration. Do not change the name "car" as it is used in the code.
                file_name: "sheriff.glb", // File name of the vehicle/ped model inside the models/placeable folder.
                scale: 2, // Scale of the model. 1 is default scale. Adjust as needed. Can use decimals (E.g. 0.01 or 0.1 and so on)
                position_adjustment: { // Position adjustment for the model. Adjust as needed. Shifts the model in the X, Y and Z axis.
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: { // Rotation adjustment for the model in DEGREES. Adjust as needed. Correct rotation enables heading tracking.
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            foot: {
                file_name: "s_m_y_sheriff_01.glb",
                scale: 3,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            helicopter : {
                file_name: "polmav.glb",
                scale: 2,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            boat : {
                file_name: "predator.glb",
                scale: 2,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            },
            motorcycle: {
                file_name: "policeb2.glb",
                scale: 2,
                position_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                },
                rotation_adjustment: {
                    x: 0,
                    y: 0,
                    z: 0,
                }
            }
    },
```

</details>
{% endstep %}

{% step %}

#### Step 4 - Running

After completing the previous 2 steps, it is time to test our work!

In case your server is already running:

Type `refresh` in server console, followed by `ensure cd_dispatch3d` \
This should make sure the server loads all the necessary files.

In case your server is not started simply start the server.

To test our implementation switch your job to the one you just added, open the large UI and take a look at your character!

{% hint style="danger" %}
In case the map displays a model you don't recognize, it probably is the default model we provide.&#x20;

If the script breaks completely, something definitely went wrong with the steps.

It is best to try following the steps again and repeating the implementation.
{% endhint %}

Congratulations on implementing your custom models! 🎉
{% endstep %}
{% endstepper %}

***

### Dispatcher

> **How Does the Dispatcher System Work?**
>
> The **dispatcher system** lets dispatchers receive incoming calls and assign them to specific players.\
> Only players with the **predefined jobs and grades** listed in **`Config.Perms.Dispatcher`** can use this feature.\
> When a player has **dispatcher mode** enabled, **non-dispatchers** will not receive any calls until a dispatcher assigns them one.

**How to Enable Dispatcher Mode**

Open the **Dispatch UI**, click the **settings icon** (top-right corner), and select **“Toggle Dispatcher Mode.”**\
If the option is greyed out or not clickable, you don’t have the required **job** or **job grade**.

**🎥**[**Video Guide**](https://gyazo.com/ef1355c7f2f4bd9e59d1b6998a230c56)

**How to Assign Units/Groups to a Notification**

Right-click a notification on the **Notification Panel** (left side of your screen).\
If assigned successfully, the selected unit(s) will appear under **“Units Responding”** for that notification.

**🎥**[**Video Guide**](https://gyazo.com/4831213416cdbe28ccbe55c6621c5c99)

**How to Speak on the Radio**

While the **large UI** is open, click the **“Voice ON”** button (top-right corner).\
When enabled, the button will turn **white**.\
Then, press your **radio push-to-talk** key to speak on the radio.

**🎥**[**Video Guide**](https://gyazo.com/fcb5dc09a370702a02749faf19b88934)

**How to Join, Leave, or Set Radio Channels**

While the **large UI** is open, right-click a unit in the **Unit List** (top-right corner).

* Click **“Join Radio Channel”** to connect.
* Click **“Leave Radio Channel”** to disconnect.

**🎥**[**Video Guide**](https://gyazo.com/b13a7c7b401c19db79594829620ccbdd)

***

### **Dispatch Settings**

> **What Do the Settings Do and How Does This Work?**
>
> The **Settings** menu allows each player to customise their dispatch preferences to match their individual role-play needs.\
> 🎥 [*Watch the short video below to learn how to open the settings.*](https://gyazo.com/6d757a08436a923da68df01dc00ab86a)

#### Status

Your **status** shows other players what you’re currently doing — such as *Available*, *Unavailable*, *Processing*, *Training*, or *Undercover*.\
This status appears on the **Units List** as a **colour indicator** (e.g., 🟢 Green = Available, 🔴 Red = Unavailable, 🔵 Blue = Training).\
You can configure these statuses and colours in **config\_ui.js**.

<div align="left" data-with-frame="true"><figure><img src="/files/hpCL2fGcuRU5FpIaGT1p" alt=""><figcaption><p><strong>Players’ Status Displayed on the Units List</strong></p></figcaption></figure></div>

#### **Dispatcher Mode**

Enables **Dispatcher Mode**, allowing a player to act as a dispatcher.\
This option is only available if the player has the required **permissions** set in **config.lua**.

<div align="left" data-with-frame="true"><figure><img src="/files/uBVvsIrPYjYptfQhyVEg" alt=""><figcaption><p><strong>Dispatcher Permissions Configuration (config.lua)</strong></p></figcaption></figure></div>

***

### Job Call Commands <a href="#job-call-commands" id="job-call-commands"></a>

> **How Do Job Call Commands Work?**
>
> When a **civilian** uses a job call command (e.g., **/911**), a notification is sent to the relevant job — such as the police.\
> You can configure multiple jobs to use this system.
>
> After receiving a call, players in that job can **respond using the `/reply`** chat command.\
> Calls can also be made **anonymous** by enabling the **anonymous option** when creating a notification.\
> Anonymous calls hide the caller’s **name** and **phone number**, and display **radius blips** for an approximate location instead.

***

### Player Blips

> **How Do the Blips Work?**
>
> The built-in **player blips** feature allows all players with the jobs listed in **`Config.AllowedJobs`** to see each other on both the **pause menu map** and the **mini-map**.
>
> These blips display enhanced information pulled directly from the **dispatch UI**, including the player’s **character name**, **callsign**, **radio channel**, and **vehicle type**.\
> Blips will also **flash** automatically when a player’s **emergency lights** are activated.

***

### Police Alerts

> **How Do Police Alerts Work?**
>
> This dispatch system includes **11 built-in police alerts**, each with its own **random call chance** and **individual cooldowns**, covering scenarios such as **gunshots, speed cameras, car crashes**, and more.

{% hint style="info" %}

#### ⚠️ Testing Note

When **`Config.Debug`** is enabled:

* Police call chance is forced to **100%**
* Whitelisted jobs are **ignored**
* Alert debug information is shown\
  \&#xNAN;*(This is for testing only and should be disabled in live servers.)*
  {% endhint %}

#### 👁️ Witness Ped System

Nearby NPCs can act as witnesses and call the police if:

* They are within a configurable distance
* They have **line of sight** to the player

You can also configure:

* Multiple witnesses calling police
* A time window to **harm or eliminate witnesses** before they report
* **Blacklisted ped models**
* **No-snitching zones** where witnesses will never report crimes

#### 📋 Included Police Alerts

* **Car Crash**\
  Triggers when you crash into another vehicle at or above a set minimum speed and come to a sudden stop.
* **Carjacking**\
  Police are called when you forcibly remove an NPC from their vehicle.
* **Explosion**\
  Detects explosions and alerts police.
* **Gunpoint Carjacking**\
  Pointing a gun at an NPC driver causes them to stop and flee, triggering an alert.
* **Gunshots**
  * Nearby witnesses report the **weapon type** (pistol, rifle, shotgun, etc.).
  * If no direct line of sight, nearby NPCs may still report **heard gunshots** (single shots, rapid fire, loud weapons).
  * Supports weapon and zone whitelisting.
* **Melee Fight**\
  Triggered when you engage in a fist fight or melee combat with an NPC using fists, blunt weapons, or bladed weapons.
* **Reckless Driving**\
  Triggered when NPCs witness dangerous or high-speed driving.
* **Speed Trap**\
  Speed cameras trigger alerts when speed limits are exceeded and can issue fines.=
* **Vehicle Alarm**\
  Alerts police when a vehicle alarm is triggered due to break-ins or damage.
* **Vehicle Assault**\
  Triggered when running over an NPC with a vehicle.
* **Weapon Drawn**\
  Police are alerted when walking around with a visible weapon.

***

### Radio Channels

> **How Do Radio Channels Work?**
>
> Radio channels allow players to **see which channels others are using** and **quickly join or leave channels** directly through the **large dispatch UI**.
>
> You’ll need to use a compatible **VOIP and radio resource**.\
> By default, cd\_dispatch3d includes compatibility with **TokoVOIP**, **Mumble**, and **pma-voice**.

**Where Are the Radio Channels Displayed?**

Radio channels are shown in **two places**:

* On the **Dispatch UI**
* On the **pause menu and mini-map blips**

<div><figure><img src="/files/kMhpfQaBy3dFkdUnk6DX" alt=""><figcaption><p><strong>Radio Channel Displayed on the Dispatch UI</strong></p></figcaption></figure> <figure><img src="/files/6wJBqCofW8MyyQASjzf6" alt="" width="375"><figcaption><p>Radio Channel Displayed on the Pause Menu Map</p></figcaption></figure></div>

To update this information, an event must be triggered from your **radio resource** whenever a player (who has access to dispatch) **joins, leaves, or changes** a radio channel.\
The player’s **new radio channel** must be sent as the **first argument**.

<div><figure><img src="/files/MDbvUuDqPmnh3xf0sog7" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="/files/cFaIMtblTNqcNks6brqB" alt="" width="375"><figcaption></figcaption></figure></div>

[👉 **View Radio Channel Event Event →**](https://docs.codesign.pro/paid-scripts/dispatch3d/developer-api/events#server)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.codesign.pro/paid-scripts/dispatch3d/features.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
