Before You Begin#
Before installing Crutches, make sure your server has everything it needs. The list is short.
Requirement | Status | Notes |
|---|---|---|
| Required | Saves each player's crutch state on their character. |
| Required |
Documentation
Install the Crutches script on your FiveM server: requirements, server.cfg load order, the SQL columns for ESX and QBCore, the crutch item for every inventory and the config.
Before installing Crutches, make sure your server has everything it needs. The list is short.
Requirement | Status | Notes |
|---|---|---|
| Required | Saves each player's crutch state on their character. |
| Required |
The EMS menu, its input dialogs and the default notifications.
Framework | Required | ESX ( |
Inventory | Required | Any inventory that works with your framework's usable items: qs-inventory, ox_inventory, qb-inventory or the ESX default. |
| Optional | If it is running, notifications use it instead of ox_lib. |
After purchasing Crutches, the resource is automatically linked to your Cfx.re account. Sign in to the Cfx.re Portal with the same account used during checkout, open Granted Assets and download Crutches. With a different account, the asset will not be listed and the encrypted files will not load.
After extracting the download, you should have the following folders:
[crutches]/
├── crutches/ -- the crutch model (v_med_crutch01)
├── qs-crutches/ -- the script
│ ├── config.lua -- what you may edit
│ ├── locales/ -- the 29 translations
│ ├── client/custom/ -- notifications, pickup, framework hooks
│ └── server/webhook.lua -- Discord logs
├── [sql]/ -- esx.sql and qb.sql
└── [item]/ -- crutch.png and the item definitionBoth resources are needed.
qs-crutcheswithoutcrutchesruns, but the crutch never appears in the player's hand, because the model it attaches does not exist.
Move the [crutches] folder into your server's resources directory. It can live anywhere under resources/.
resources/
└── [qs]/
└── [crutches]/
├── crutches/
└── qs-crutches/Then open your server.cfg and make sure everything Crutches depends on starts before it:
ensure oxmysql
ensure ox_lib
# Framework
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Your inventory
ensure qs-inventory
# Crutches
ensure crutches
ensure qs-crutchesThe loading order matters. The framework is detected by looking for a resource that is already started, so a framework that starts after qs-crutches is not found, and the item and the EMS menu stop working.
Crutches adds two columns to your framework's character table. Import the file for your framework from [sql]/ with HeidiSQL or any MariaDB/MySQL client before starting the server.
ALTER TABLE `users`
ADD COLUMN `crutch_manual` TINYINT(1) NOT NULL DEFAULT 0,
ADD COLUMN `crutch_forced_until` INT(11) NOT NULL DEFAULT 0;ALTER TABLE `players`
ADD COLUMN `crutch_manual` TINYINT(1) NOT NULL DEFAULT 0,
ADD COLUMN `crutch_forced_until` INT(11) NOT NULL DEFAULT 0;Column | Holds |
|---|---|
| When the current prescription ends, as a Unix timestamp. |
|
|
The script registers a usable item named crutch. Add it to your inventory, and copy [item]/crutch.png into your inventory's image folder so it has an icon.
qs-inventory/shared/items.lua
['crutch'] = {
['name'] = 'crutch',
['label'] = 'Crutch',
['weight'] = 250,
['type'] = 'item',
['image'] = 'crutch.png',
['unique'] = false,
['useable'] = true,
['shouldClose'] = true,
['rare'] = 'common', -- common, epic, legendary
['description'] = 'A medical crutch used to walk after an injury.'
},ox_inventory/data/items.lua
['crutch'] = {
label = 'Crutch',
weight = 250,
stack = true,
close = true,
description = 'A medical crutch used to walk after an injury.'
},qb-core/shared/items.lua
['crutch'] = { ['name'] = 'crutch', ['label'] = 'Crutch', ['weight'] = 250, ['type'] = 'item', ['image'] = 'crutch.png', ['unique'] = false, ['useable'] = true, ['shouldClose'] = true, ['combinable'] = nil, ['description'] = 'A medical crutch used to walk after an injury.' },INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES
('crutch', 'Crutch', 250, 0, 1);Keep the item name exactly crutch. The label, weight and description are yours to change.
Everything you are meant to change is in qs-crutches/config.lua. Each line carries a tag that tells you how safe it is to touch:
Tag | Meaning |
|---|---|
| Safe to change. Adjust to your server. |
| Advanced. Change only if you understand what it does. |
| Handled by the script. Do not edit. |
The values worth reviewing first:
Config.Language = 'en' -- any of the 29 shipped locales
Config.AllowedJobs = { -- jobs that may use /crutchmenu
'ambulance',
'doctor',
'ems_chief'
}
Config.CrutchDurationMinutes = 5 -- how long the crutch item lasts
Config.CrutchModel = `v_med_crutch01` -- the prop held in the hand
Config.WalkClipset = 'move_lester_CaneUp' -- the injured walk
Config.Pickup = { -- the animation for picking the crutch up
dict = 'pickup_object',
name = 'pickup_low'
}
Config.Attach = { -- [ADV] where the prop sits on the body
useRawBone = true,
bone = 70,
pos = vec3(1.18, -0.36, -0.20),
rot = vec3(-20.0, -87.0, -20.0)
}
Config.Debug = true -- set to false on a live server
Config.Debugships set totrue, which prints a[DEBUG]line to the server console for every crutch action. Turn it off once you have checked the install works.
Job names are the internal job name, not the label shown to players. Discord logs are set up separately in server/webhook.lua — see Integrations.
Restart your server and watch the console as qs-crutches starts. It checks for updates and prints one of:
You are using the latest version of qs-crutches!
New version available for qs-crutches!Any red error about ox_lib, MySQL or an unknown column means a step above was missed. Then join and work through the first loop:
Give yourself a crutch and use it. The crutch appears in your hand, your walk changes, and a notification tells you how many minutes you need it for.
Type /dropcrutch. The crutch falls and you go down to crawl. Crawl back to it and press E to pick it up.
With one of the Config.AllowedJobs, type /crutchmenu, choose Remove crutches from player → By ID and enter your own server ID. The crutches come off.
Everything working? Read Usage for the full behaviour, so your EMS team knows what the patient can and cannot do.