Player Carry System
Configuration
Configuration
config/carry.lua at the resource root. Unencrypted and freely editable.
Notification + command
Config.NotificationSystem = "qb" -- "qb" | "esx" | "ox_lib" | "mythic" | "okokNotify" | "custom"
Config.CarryCommand = "carry" -- /carry — open the carry request
Config.MaxCarryDistance = 3.0
Config.MovementSpeedReduction = 0.7 -- 70% of normal speed
Config.DisableSprintWhileCarrying = true
Config.DisableJumpWhileCarrying = true
Config.AnimationCheckInterval = 1000 -- ms between animation health checks
Animation backend
Config.AnimationType = "custom" -- "custom" (streamed dicts) | "default" (GTA defaults)
"custom"uses the high-quality animation dicts streamed with the resource (default)."default"falls back to vanilla GTA animation dicts — no custom assets needed.
The script auto-picks Config.CarryStyles based on this flag:
Config.CarryStyles = Config.AnimationType == "custom"
and Config.CustomCarryStyles
or Config.DefaultCarryStyles
Carry styles
Each entry under Config.CustomCarryStyles (or Config.DefaultCarryStyles) is a named style with two pose definitions:
arms = {
label = "Arms Carry",
icon = "👐",
personCarrying = {
animDict = "pcarryd1@animations",
anim = "pcarryd1clip",
flag = 49, -- looping animation flag
},
personCarried = {
animDict = "pcarryd2@animations",
anim = "pcarryd2clip",
attachX = -0.120, attachY = -0.150, attachZ = -0.050,
rotX = 0.0, rotY = 0.0, rotZ = -3.0,
boneIndex = 24818, -- spine bone for custom animations
flag = 33,
},
},
Three styles ship by default:
| Style | Use case |
|---|---|
arms |
Standard arms-around carry |
fireman |
Shoulder carry (over the shoulder) |
brazos |
Baby-cradle (locked to qbx_peds toddler models — restrictToQbxPeds = true) |
Permissions / job restrictions (optional)
Config.UsePermissions = false -- master toggle for the below
Config.RestrictedJobs = {} -- jobs that CAN'T carry (e.g. { "prisoner" })
Config.RequireJob = false -- true = only allowed jobs can carry
Config.AllowedJobs = { "police", "ambulance" } -- only used when RequireJob = true
Messages
Config.Messages = {
noOneNearby = "No hay nadie cerca para cargar!",
carryRequest = "Alguien quiere cargarte. Aceptar?",
requestSent = "Solicitud de carga enviada...",
requestDenied = "La solicitud fue rechazada",
requestAccepted = "Solicitud aceptada!",
tooFarAway = "El objetivo esta muy lejos!",
stoppedCarrying = "Dejaste de cargar",
beingCarried = "Te estan cargando",
carrying = "Estas cargando a alguien",
cantDoThat = "No puedes hacer eso mientras cargas a alguien!",
}
