Docs

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 builder

Installation

  1. Drop the x3d_carry folder into resources/
  2. 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
View product page