X3D Carry
Free player carry script: carry and steal bodies, fireman carry and piggyback, consent before carrying the living, fully server authoritative, no dependencies.
Buy / Get freeConfig builderInstallation
- Drop the
x3d_carryfolder intoresources/ - Add to
server.cfg
ensure x3d_carry
# let admins carry without asking (works on any framework)
add_ace group.admin x3d_carry.force allow
That is all. No SQL, no other resources. The UI ships pre-built in web/build, so Node.js is not required.
Requires FXServer artifacts 4752 or newer (the script uses state bags).
Controls
| Key / command | What it does |
|---|---|
F9 or /x3dcarry |
Open the carry menu |
↑ ↓ |
Move the selection |
Enter |
Confirm |
Backspace |
Close the menu |
/x3dcarry dragdeath |
Carry a corpse (skips the menu) |
/x3dcarry carrypeople |
Fireman carry (skips the menu) |
/x3dcarry piggyback |
Piggyback (skips the menu) |
While a carry is active the menu shows only that style — selecting it again puts the player down.
A carried player cannot move, enter a vehicle or use weapons until released.
Carrying and stealing bodies: a body can always be picked up, with no consent and no permission. If the carrier dies, moves past Config.MaxDist or gets into a vehicle, the server drops the body within 2 seconds and anyone can pick it up. A body that is being carried cannot be taken.
Per-style key bindings can be set under Settings > Key Bindings > FiveM.
Configuration
Everything lives in config.lua.
| Setting | Default | Meaning |
|---|---|---|
Config.Locale |
'th' |
In-game language, 'th' or 'en'. Edit the strings in locales.lua |
Config.Command |
'x3dcarry' |
Command name. Do not use a short name another script may already own |
Config.MenuKey |
'F9' |
Menu key, '' leaves it unbound |
Config.Range |
3.0 |
Range you can start a carry from |
Config.MaxDist |
4.5 |
Drift further than this while carrying and the server releases the pair |
Config.RequestTTL |
15000 |
How long a carry request stays open, in ms |
Config.Cooldown |
2000 |
Minimum ms between requests from one player |
Config.CarrierDelay |
500 |
Delay before the carrier starts its animation. Lower values desync the paired animation |
Config.ForceAce |
'x3d_carry.force' |
ACE permission that carries without asking, false disables it |
Config.ForceGroups |
admin, superadmin, mod | Admin groups that carry without asking (ESX) |
Config.ForceJobs |
police, ambulance | Jobs that carry without asking (ESX) |
Config.Corpse |
— | Double-death protection and ragdoll-on-drop values |
Adding a carry style
Add an entry to Config.Styles and restart the resource. The menu entry and key binding are generated for you.
Config.Styles.bridal = {
order = 4,
key = '', -- '' leaves it unbound for the player to set
th = 'อุ้มเจ้าสาว',
en = 'Bridal Carry',
target = 'alive', -- 'dead' | 'alive' | 'any'
offset = vector3(0.0, 0.42, 0.05),
heading = 0.0,
carrier = { dict = 'anim@dict', anim = 'carrier_anim', flag = 49 },
victim = { dict = 'anim@dict', anim = 'victim_anim', flag = 33 },
}
flag = 49 (carrier) and flag = 33 (carried) work for most paired animations. A style with target = 'dead' gets the fake-revive handling automatically.
Other frameworks
| File | Edit it when |
|---|---|
addons/framework/client.lua |
How death is detected (ESX / standalone) |
addons/framework/extra_client.lua |
Framework.OnCorpseCarried() / OnCorpseDropped(): put your hunger/thirst double-death guard here |
addons/framework/server.lua and extra_server.lua |
How the carry-without-asking permission is resolved (Framework.CanForce) |
addons/notify/client.lua |
Using okokNotify, mythic or your own notification system |
Exports
-- client
exports['x3d_carry']:IsCarried() --> true while being carried
exports['x3d_carry']:IsCarrying() --> true while carrying someone
exports['x3d_carry']:IsFakeAlive() --> true while the body is fake-revived
-- server
exports['x3d_carry']:IsCarried(src)
exports['x3d_carry']:IsCarrying(src)
exports['x3d_carry']:StopCarry(src) --> release immediately
Rebuilding the UI
The UI is a Nuxt 4 app in web/. If you are not changing it, there is nothing to do.
cd web
npm install
npm run build
Always rebuild after editing — the NUI only loads from web/build.
Troubleshooting
| Symptom | Cause |
|---|---|
| F9 does nothing | Another resource owns F9. Rebind under Settings > Key Bindings > FiveM |
/x3dcarry reports an unknown command |
The resource is not running. Check ensure x3d_carry in server.cfg |
| The body stands stiff on release | Another script left SetPedCanRagdoll(false) set, or Config.Corpse.ragdollOnDrop is off |
| The body dies again or the death screen returns | Your hunger or bleed-out system is still killing it. Add its top-up calls to Framework.OnCorpseCarried() |
| Piggyback floats or the fireman carry slips | Config.CarrierDelay is too low. Try 700 to 1000 |
| Admins are still asked for consent | add_ace group.admin x3d_carry.force allow is missing |