> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nexdev.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting

> Filter the server console and the F8 client console for nex_crutchsystem first.

Filter the **server console** and the **F8 client console** for `nex_crutchsystem` first.

## Common issues

| Problem                                                                  | Fix                                                                                                                                                                                                                                                                                                              |
| ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Using the crutch item does nothing**                                   | The inventory `useCrutch` hook isn't wired up. For `ox_inventory`, check the item entry has `server.export = 'nex_crutchsystem.useCrutch'`. For QBCore / Qbox, make sure you've registered the `CreateUseableItem` callback. See [Installation → Inventory item](/nex_crutchsystem/installation#inventory-item). |
| **"You can't use a crutch while you are in ragdoll/falling/combat/..."** | Working as intended — the crutch refuses to come out in these states. Strings are in `locales/en.lua` if you want to soften the wording.                                                                                                                                                                         |
| **EMS third-eye option doesn't appear**                                  | Your job name isn't in `Config.AllowedJobs`, or `ox_target` isn't started. The bridge reads `playerData.job.name` — confirm the value with `/jobname` (or print it from your framework) and add it to the table.                                                                                                 |
| **EMS option appears for everyone**                                      | Same — your ambulance job sets a name that's already in the default `Config.AllowedJobs` list (`ambulance`, `ems`, `doctor`, etc.). Remove it from the table or rename your job.                                                                                                                                 |
| **Medic NPC doesn't spawn**                                              | You're outside `Config.SpawnDistance` (60m default) of any `MedicLocations` entry, the coords are wrong, or the model failed to load. Open F8 near the location and look for `failed to load NPCModel`.                                                                                                          |
| **`[E] Remove Crutch` prompt doesn't show**                              | Either you're not within `Config.TextUI.distance` (2m default), or you don't have a crutch equipped — the prompt is gated by a local "have crutch" check. Confirm with the `IsUsingCrutch()` client export.                                                                                                      |
| **`/crutchadmin` does nothing**                                          | You're missing the `group.admin` ACE. Run `add_ace group.admin command.crutchadmin allow`. The server callback always rejects non-admins regardless of the chat permission.                                                                                                                                      |
| **Force lock never expires**                                             | The force timer runs server-side. If the player disconnected and reconnected, the lock should resume from the saved `secondsLeft`. If it doesn't, check the server console for SQL or callback errors. As a workaround, run `/removecrutch <id>`.                                                                |
| **Money is charged but the crutch stays**                                | The server's `selfRemoveInternal` step failed after `chargeMoney` succeeded. Filter the server console for `nex_crutchsystem` — you should see the error. Refund and report.                                                                                                                                     |
| **"Not enough money" on a clearly-rich player**                          | `Config.MoneyAccount` is set to `bank` but your framework only exposes `cash`, or vice versa. Try the other account.                                                                                                                                                                                             |
| **Legacy crutch script's crutch isn't removed at the NPC**               | The entry in `Config.CrutchResources` is wrong, or the legacy script isn't running. Each entry needs a `resource` name and **either** an `event` or `export`. See [Configuration → Legacy crutch resources](/nex_crutchsystem/configuration#legacy-crutch-resources).                                            |
| **NUI doesn't appear (medic dialog / EMS menu / HUD / admin panel)**     | `Config.UI.Enabled` is `false`, or the specific per-flow toggle is off. Toggles fall back to `ox_lib` menus / `progressBar` / notifications when off, so the flow still works — it just looks different.                                                                                                         |

## Rate limiting

Every player-triggered event is rate-limited and server-validated:

* `canAfford` re-checks the price, the has-crutch state, the near-medic state, and the player's wallet.
* `chargeMoney` validates the same again before debiting.
* `selfRemoveInternal` validates again before clearing the crutch.

If a player sees their action repeatedly fail with no clear reason, it's almost always one of these gates. Set `Config.Debug = true` (in `config.lua`, if exposed in your build) or read the server console — each rejection logs the reason.

## Before opening a support ticket

Please include:

1. Server console output filtered for `nex_crutchsystem`.
2. F8 client console output filtered for `nex_crutchsystem`.
3. Your framework (Qbox / QBCore / ESX / ND\_Core), inventory, and ambulance job.
4. Your `Config.AllowedJobs` entries and the value of `playerData.job.name` for the affected player.
5. What you did and what you expected to happen.

See [Support & contact](/general/support).
