Cómo se hace

Cómo crear un trabajo (job) en QBCore

Aprende a definir un job en QBCore (qb-core/shared/jobs.lua) con label, defaultDuty y grades, asignarlo con SetJob y comprobar el permiso en el servidor de forma segura.

El problema

Quieres añadir un trabajo nuevo a tu servidor QBCore (por ejemplo mecánico o policía), pero no sabes dónde se define, cómo se asigna a un jugador ni cómo comprobar el permiso para que solo ese gremio acceda a su garaje, taquilla o menú.

La causa

En QBCore los trabajos no se inventan dentro de cada recurso: se declaran de forma central en `qb-core/shared/jobs.lua`. Un job está formado por un `label` legible, una bandera `defaultDuty` y una tabla de `grades` (rangos) donde cada grado tiene su `name`, `isboss` opcional y un `payment` (sueldo por turno). Si el job no existe en esa tabla, `SetJob` falla en silencio y `Player.PlayerData.job` nunca toma el nombre esperado.

La solución

Define el job en qb-core/shared/jobs.lua con sus grados y, desde un recurso de servidor, asígnalo con SetJob. La clave del grado en la tabla (0, 1, 2…) es el nivel que recibirá el jugador en job.grade.level:

lua
-- qb-core/shared/jobs.lua
-- Añade tu trabajo dentro de la tabla QBShared.Jobs

QBShared.Jobs = {
    -- ... otros jobs ...

    ['mechanic'] = {
        label = 'Mecánico',
        defaultDuty = true,   -- entra de servicio (onduty) al cargar
        offDutyPay = false,   -- no cobra fuera de servicio
        grades = {
            ['0'] = {
                name = 'Aprendiz',
                payment = 50,
            },
            ['1'] = {
                name = 'Mecánico',
                payment = 75,
            },
            ['2'] = {
                name = 'Jefe de taller',
                isboss = true,   -- acceso a la gestión del job (boss menu)
                payment = 125,
            },
        },
    },
}

-- Asignar el trabajo a un jugador (SERVIDOR)
-- 'mechanic' = nombre del job, 2 = grado (la clave de grades)
local Player = QBCore.Functions.GetPlayer(source)
if Player then
    Player.Functions.SetJob('mechanic', 2)
end

-- Leer el trabajo del jugador
local job = Player.PlayerData.job
print(job.name)        -- 'mechanic'
print(job.grade.level) -- 2
print(job.onduty)      -- true/false

-- Comprobar el permiso SIEMPRE en el servidor antes de dar acceso
RegisterNetEvent('miscript:abrirGaraje', function()
    local src = source
    local Player = QBCore.Functions.GetPlayer(src)
    if not Player then return end
    if Player.PlayerData.job.name ~= 'mechanic' then return end -- bloquea a quien no es del gremio
    -- ... aquí sí: abrir el garaje del taller ...
end)

Paso a paso

  1. 1.Abre `qb-core/shared/jobs.lua` y añade tu trabajo dentro de la tabla `QBShared.Jobs` con su `label`, `defaultDuty` y la tabla `grades`.
  2. 2.Define cada rango en `grades` con una clave numérica en texto ('0', '1', '2'…); esa clave es el `grade.level` que tendrá el jugador. Pon `name`, `payment` y `isboss = true` solo en el rango jefe.
  3. 3.Reinicia el servidor (o `refresh` + `restart qb-core`) para que el nuevo job se cargue en el shared.
  4. 4.Asigna el trabajo desde un recurso de servidor con `Player.Functions.SetJob('mechanic', 2)`; nunca confíes en el cliente para cambiar el job.
  5. 5.Lee el estado con `Player.PlayerData.job.name`, `.grade.level` y `.onduty` para tu lógica de sueldos, vehículos o uniformes.
  6. 6.Antes de dar acceso a cualquier acción restringida, comprueba en el SERVIDOR `if Player.PlayerData.job.name ~= 'mechanic' then return end`. Esto es lo que separa un job de un job menu/creator: el menú solo cambia el valor con `SetJob`, pero la seguridad real vive en estas comprobaciones server-side.

¿Tu caso es distinto?

Pega tu error en la herramienta IA y te da la solución al instante.

Probar la herramienta

Guías relacionadas

Última actualización: 2026-06-29. Crxative-M no está afiliado a Cfx.re ni Rockstar Games.

Cómo crear un trabajo (job) en QBCore — guía paso a paso