> For the complete documentation index, see [llms.txt](https://docs.cdev.shop/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.cdev.shop/fivem/cdev-axethrowing/installation-guide.md).

# Installation Guide

Step by step instructions to install this resource

{% stepper %}
{% step %}

### Install (or update) dependencies and optional

{% hint style="danger" %} <mark style="color:yellow;">**Verify all dependencies below are started**</mark><mark style="color:yellow;">**&#x20;**</mark>*<mark style="color:yellow;">**before**</mark>*<mark style="color:yellow;">**&#x20;**</mark><mark style="color:yellow;">**this script in your**</mark> **`server.cfg`**<mark style="color:yellow;">**.**</mark>
{% endhint %}

#### Required

| Resource      | Purpose                                                                                                                                 |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **oxmysql**   | Database driver for player data, ranking, and match history. [Download oxmysql](https://github.com/CommunityOx/oxmysql/releases/latest) |
| **Framework** | One of: qb-core, qbx\_core (QBox), es\_extended (ESX Legacy)                                                                            |
| **Inventory** | One of: ox\_inventory, qb-inventory, qs-inventory                                                                                       |

#### Optional

| Resource                        | Purpose                                                                                           |
| ------------------------------- | ------------------------------------------------------------------------------------------------- |
| **ox\_lib**                     | Enhanced notifications. [Download ox\_lib](https://github.com/CommunityOx/ox_lib/releases/latest) |
| **ox\_target** or **qb-target** | Target-based board interaction (alternative to DrawText)                                          |
| {% endstep %}                   |                                                                                                   |

{% step %}

### Install cDev\_Axethrowing and create a new subfolder or extract folder to server's root

### Install resource from [Portal](https://portal.cfx.re/assets/granted-assets)

**After installing, you should get a zip file with the name shown below.**

* <mark style="color:yellow;">cdev\_axethrowing.pack.zip</mark>

{% hint style="info" %}
Create a new subfolder optional step, but is *highly recommended*.
{% endhint %}

**If you haven’t already, create a new subfolder named `[cdev]` in your server’s root resources directory. Unzip (*****extract*****) this script into the newly created `[cdev]` subfolder.**

<div align="left"><figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2Fge9dYCSc9v8EykeFOdcT%2Fexplorer_rJJW0oyeuZ.gif?alt=media&amp;token=cbe2ce3c-7c75-4554-bafb-a4feeff261de" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

### Add ACE permission

Open your `server.cfg` and add the following ACE permission:

```
add_ace group.admin cdev_axethrowing.admin allow
```

**or**

```
add_ace identifier.license:xxxxxxxxxxxx cdev_axethrowing.admin allow
```

{% hint style="danger" %} <mark style="color:$warning;">**Important:**</mark>**&#x20;If you are on the Qbox framework, the recommended place to paste the above permission is inside the `permissions.cfg` file instead of `server.cfg`.**
{% endhint %}
{% endstep %}

{% step %}

### Update server.cfg & perform a full restart

Once all other steps are completed, open your `server.cfg` & add `ensure cdev_axethrowing` to the very **bottom** of your resource start list (after oxmysql, your framework, inventory, and target if used). Finally, perform a full server restart. Failure to perform a full restart after installation will cause errors.

<div align="left"><figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FOc6xLIf5pzLNxvYtlS0Q%2Fimage.png?alt=media&amp;token=d16dfbae-2267-48d4-ba1f-88af5ee047d3" alt=""><figcaption></figcaption></figure></div>

{% hint style="success" %}
**Note: Once completed, use the command `/axethrowing place` in-game to place the target, or use the axethrowing target item to place a target and play!**
{% endhint %}
{% endstep %}

{% step %}

### Add the inventory items (target + hatchet)

{% hint style="danger" %}
Item **names** must match `AxeThrowingConfig.Item.Target.name` and `AxeThrowingConfig.Item.Hatchet.name` in `public/shared/config.lua` (defaults: `axe_throwing_target` and `axe_throwing_hatchet`). If you rename them in config, rename the items here too.
{% endhint %}

{% tabs %}
{% tab title="Ox Inventory" %}
**Location:** `ox_inventory` → `data` → `items.lua`

1. Open `resources/[ox]/ox_inventory/data/items.lua`
2. Add **both** items inside the return table:

```lua
['axe_throwing_target'] = {
    label = 'Axe Throwing Target',
    weight = 5000,
    stack = false,
    close = true,
    consume = 0,
    description = 'Place on a wall to open an axe throwing lane. Pick up with your pickup key when allowed.',
    server = {
        export = 'cdev_axethrowing.useAxeThrowingTarget',
    },
},
['axe_throwing_hatchet'] = {
    label = 'Throwing Hatchet',
    weight = 1200,
    stack = false,
    close = true,
    consume = 0,
    description = 'Required to throw when the server configures hatchet checks.',
    server = {
        export = 'cdev_axethrowing.useAxeThrowingHatchet',
    },
},
```

3. Add images `axe_throwing_target.png` and `axe_throwing_hatchet.png` to your inventory images folder (e.g. `ox_inventory/web/images/`).
4. Save and **full restart** the server.

{% hint style="warning" %}
Ox uses **server exports** `cdev_axethrowing.useAxeThrowingTarget` and `cdev_axethrowing.useAxeThrowingHatchet` — these are registered by this resource (`server/classes/itemuse.lua`).
{% endhint %}
{% endtab %}

{% tab title="QBCore / QBox (qb-inventory)" %}
**Location (typical):** `qb-core` → `shared` → `items.lua` (or your inventory’s item list if your fork moved it)

* Open `qb-core/shared/items.lua` (or the file where `QBCore.Shared.Items` is defined).
* Add **both** items in the same format as your other useable items:

```lua
['axe_throwing_target'] = {
    name = 'axe_throwing_target',
    label = 'Axe Throwing Target',
    weight = 5000,
    type = 'item',
    image = 'axe_throwing_target.png',
    unique = false,
    useable = true,
    shouldClose = true,
    description = 'Place on a wall to open an axe throwing lane.',
},
['axe_throwing_hatchet'] = {
    name = 'axe_throwing_hatchet',
    label = 'Throwing Hatchet',
    weight = 1200,
    type = 'item',
    image = 'axe_throwing_hatchet.png',
    unique = false,
    useable = true,
    shouldClose = true,
    description = 'Required to throw when the server configures hatchet checks.',
},
```

3. Copy the PNGs into your inventory UI images folder (e.g. `qb-inventory/html/images/` depending on your inventory build).
4. **Do not** add `server.export` lines for QB — **cdev\_axethrowing** registers useable items at runtime via `QBCore.Functions.CreateUseableItem` when **qb-core** or **qbx\_core** is running (`server/classes/itemuse.lua`).
5. Save and **full restart** the server.
   {% endtab %}

{% tab title="QS Inventory" %}
QS setups differ by framework:

* **QBCore + QS:** item definitions are usually still in **`qb-core/shared/items.lua`** (same block as the QBCore tab above). The resource registers useables through **qb-core** the same way — **no** `server.export` in the item row.
* **ESX + QS:** items are often under **`qs-inventory/shared/items.lua`** (or your pack’s documented path). Use the same **name / label / image / useable** fields your file expects. **cdev\_axethrowing** registers **`ESX.RegisterUsableItem`** for both names when **es\_extended** is started.

Example shape (adjust field names to match your `items.lua`):

```lua
['axe_throwing_target'] = {
    name = 'axe_throwing_target',
    label = 'Axe Throwing Target',
    weight = 5000,
    type = 'item',
    image = 'axe_throwing_target.png',
    unique = false,
    useable = true,
    shouldClose = true,
    description = 'Place on a wall to open an axe throwing lane.',
},
['axe_throwing_hatchet'] = {
    name = 'axe_throwing_hatchet',
    label = 'Throwing Hatchet',
    weight = 1200,
    type = 'item',
    image = 'axe_throwing_hatchet.png',
    unique = false,
    useable = true,
    shouldClose = true,
    description = 'Required to throw when the server configures hatchet checks.',
},
```

Add both PNGs to your QS images folder, save, and **full restart**.

{% hint style="danger" %}
If items do nothing on use: confirm names match config, **`AxeThrowingConfig.Item.enabled = true`**, framework/inventory start **before** `cdev_axethrowing`, and check **F8** with **`AxeThrowingConfig.Debug = true`**.
{% endhint %}
{% endtab %}
{% endtabs %}

{% hint style="danger" %}
If you run a **custom framework, inventory, notify, or target**, read Configurations and Integrations to align `Bridge` settings and optional bridge files under `public/bridge/`.
{% endhint %}
{% endstep %}

{% step %}

### ⭐ In-Game Preview

{% tabs %}
{% tab title="Player One (Owner of Target)" %}

#### Using the Axe Target from Inventory

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FDbXMiHYVGY9DA2UzQRzR%2FFiveM_cl2_GTAProcess_Msz8Nycrv4.gif?alt=media&amp;token=85d583a1-6b76-45b6-893b-656f328759aa" alt=""><figcaption></figcaption></figure>

#### PickUP Target

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2F7Bom7x4xeEGXsIINRVXm%2FFiveM_cl2_GTAProcess_H9ICb9eaDR.gif?alt=media&amp;token=596a428d-fd06-4603-bd17-5b9ed6b742db" alt=""><figcaption></figcaption></figure>

#### Creating tournaments (Only for the target owner)

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FdnpCrXrZWboQIWYz0MkE%2FFiveM_cl2_GTAProcess_ZckfRFDIFS.gif?alt=media&amp;token=37f8218d-ce5e-46e5-b7e7-d9b79f6c28fd" alt=""><figcaption></figcaption></figure>

#### Oberserver (Judge mode)

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FPzovsbLTjkjpSL3b7yLn%2FFiveM_cl2_GTAProcess_YWXguhSr2g.gif?alt=media&amp;token=f92a27ec-4650-4ebd-8432-32ced1bf53c4" alt=""><figcaption></figcaption></figure>

#### Adjusting the price pool

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FyggFwf7zyB4eGjTWfFO9%2FFiveM_cl2_GTAProcess_wOJimoR3ze.gif?alt=media&amp;token=20794f62-c1d9-4241-9b9a-ee6460210e8e" alt=""><figcaption></figcaption></figure>

#### Deleting the Tournament

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FRzPky7zXm7jv3aLd95yU%2FFiveM_cl2_GTAProcess_gOgsx4RFKP.gif?alt=media&amp;token=c346fb20-829f-4720-9de0-1f913ebcc964" alt=""><figcaption></figcaption></figure>

#### Starting the Tournament

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FQ3I2zpSDpK5y3S8knHbC%2FFiveM_cl2_GTAProcess_scS5uy2o9i.gif?alt=media&amp;token=9335f6a4-ff44-4984-85dc-bec159b68f56" alt=""><figcaption></figcaption></figure>

#### Ending the tournament before it finishes

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2F7yYbXFCEpwDvD3DrrYjU%2FFiveM_cl2_GTAProcess_ylN6h8cJ9o.gif?alt=media&amp;token=a0554ab3-d3eb-49d6-9a32-c0a5e10c092e" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Player Two (Member)" %}

#### Joining in Tournament

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FEju0GsprDOhCMI328Krs%2FFiveM_GTAProcess_G43piu4M3g.gif?alt=media&amp;token=07d64006-4705-48c2-8789-3148da0eb063" alt=""><figcaption></figcaption></figure>

#### Leaving from tournament

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FLKim2o4vB69PqP0hAjNl%2FFiveM_GTAProcess_KrJLRdNXZO.gif?alt=media&amp;token=ad539e8e-f06b-486e-9308-91fbe3ba54a7" alt=""><figcaption></figcaption></figure>

#### Playing

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FsTrKSzGofLh5N3k36J2o%2FFiveM_GTAProcess_7oawsCh5Jk.gif?alt=media&amp;token=2e572092-10fb-4d37-a92a-5cc90b79056c" alt=""><figcaption></figcaption></figure>

#### Killshoot Play

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FZOOyQW5TFhycmQJaw9ct%2FFiveM_GTAProcess_YOMDMQYP67.gif?alt=media&amp;token=9298810b-06fb-4776-abf4-504e0809e21c" alt=""><figcaption></figcaption></figure>

#### Surrender from Torunament (F7)

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2F766eVaRLVoD324svWfgP%2FFiveM_GTAProcess_FBVVDIsttE.gif?alt=media&amp;token=42445d74-8155-4102-8f11-46de60d1b37d" alt=""><figcaption></figcaption></figure>

<div align="left"><figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FOQOJvmj08yw3Nky1ID4x%2Fimage.png?alt=media&amp;token=4c246f2f-3f3d-4407-b462-d55630c153d9" alt=""><figcaption></figcaption></figure></div>
{% endtab %}

{% tab title="Admin Features" %}

#### `/axethrowing admin`

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FOgjQ5nFyzzYHViiZSjk9%2FFiveM_cl2_GTAProcess_sh3njDTzR5.gif?alt=media&amp;token=1e5afc5d-a2b9-4ea7-a298-b6aa83018c40" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Features" %}

#### Practice Match

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FYqmOtbnvBbxMwakiUzOs%2FFiveM_cl2_GTAProcess_ZiZYklkF4W.gif?alt=media&amp;token=1d1bca04-0fc6-42a5-8702-3e869d7f9a13" alt=""><figcaption></figcaption></figure>

#### Tournament tiebreaker by random draw (automatic)

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2F6uBelj6IPI0SDn0XQpv0%2FFiveM_GTAProcess_vqyLWI7Uqy.gif?alt=media&amp;token=629dc2c0-5e98-4ed9-a845-6c506fba86de" alt=""><figcaption></figcaption></figure>

#### Drag UI Windows

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2Fd5zxUswAVXpcQRuPqEeS%2FFiveM_GTAProcess_20BjH4LGTg.gif?alt=media&amp;token=58ad1bea-008c-46f1-9a49-e0d737283866" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FNIunfYh8Y7Uk0v2Eay6e%2FFiveM_GTAProcess_472ZkUgyHC.gif?alt=media&amp;token=1ae954fb-7d57-4491-bb5d-68dc75bce623" alt=""><figcaption></figcaption></figure>

#### Find a Tournament `/axethrowing tournament`

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2F5E1LrpjRQMNZtrIlNsjO%2FFiveM_GTAProcess_jEmovf1O3a.gif?alt=media&amp;token=3a7fa081-5bc8-4cd0-9e6b-53b544c962fc" alt=""><figcaption></figcaption></figure>

#### Leaderboard UI `/axethrowing leaderboard`

<figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2Fdbnu0fk4OsJ48zZShglx%2FFiveM_cl2_GTAProcess_2VtHbpEce3.gif?alt=media&amp;token=162a4e1c-db53-43b4-b5bf-1133911667d8" alt=""><figcaption></figcaption></figure>

#### How To Play UI

<div align="left"><figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2FimUn1EdIfrG7QiloD3ea%2FFiveM_GTAProcess_BSHiN8s6q5.gif?alt=media&amp;token=0cc62173-640c-4c9d-a4c0-3152ecb3919c" alt=""><figcaption></figcaption></figure></div>

#### Profile Edit

<div align="left"><figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2F6ezsdg546cYkWiVqJxK9%2Fimage.png?alt=media&amp;token=bed54b72-d83e-47f2-8fdd-1f8e13330aaf" alt=""><figcaption></figcaption></figure></div>

#### End Torunament UI

<div align="left"><figure><img src="https://1004862655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPhIA9eCA4bwgx77hxx4i%2Fuploads%2F883FgUksfCtKdSzAzppV%2Fimage.png?alt=media&amp;token=f961e7a5-4d0b-47b1-bc83-088caf18aa22" alt=""><figcaption></figcaption></figure></div>
{% endtab %}
{% endtabs %}
{% endstep %}
{% endstepper %}
