Cómo añadir un trabajo en QBCore: shared/jobs.lua, grados y /setjob

Añade un trabajo personalizado a QBCore o QBox: la estructura shared/jobs.lua con defaultDuty, offDutyPay y grados, el comando /setjob, y leer Player.PlayerData.job.

En QBCore un trabajo es un bloque en un archivo Lua, no una fila de base de datos. Añades el bloque, reinicia el núcleo, y establece el trabajo en un jugador. Esta guía muestra la estructura, el comando, y cómo leer el trabajo en el código, para QBCore y QBox.

La estructura

Abre qb-core/shared/jobs.lua. Los trabajos son entradas en la tabla QBShared.Jobs, con clave por nombre de trabajo. Añade el tuyo:

lua
['mechanic'] = {
    label = 'Mechanic',
    defaultDuty = true,
    offDutyPay = false,
    grades = {
        ['0'] = { name = 'Recruit', payment = 50 },
        ['1'] = { name = 'Mechanic', payment = 75 },
        ['2'] = { name = 'Boss', payment = 120, isboss = true },
    },
},

Lo que cada parte significa:

Campo Significado
Clave (mechanic) El nombre del trabajo usado en el código y /setjob: minúsculas, sin espacios
label El nombre que ven los jugadores
defaultDuty true si los jugadores comienzan en servicio cuando obtienen el trabajo
offDutyPay true si el trabajo paga incluso cuando el jugador está fuera de servicio
grades Los rangos, con clave por su nivel
name El nombre de visualización del rango
payment El pago de ese rango en cada nómina
isboss true marca el rango como rango de jefe

Dos reglas:

  • Las claves de grado son cadenas en QBCore: ['0'], ['1']. Comienza en '0' sin brechas.
  • Mira los trabajos ya en el archivo, como police, y copia su forma. Algunos trabajos llevan un campo type extra que otros scripts usan para agruparlos, y el archivo muestra lo que tu versión soporta.

Cuidado: una coma o llave faltante en jobs.lua detiene la carga de qb-core, y cada script que depende de él con él.

Reinicia y establece el trabajo

El núcleo lee el archivo al inicio:

text
restart qb-core

Luego, como administrador, en el juego o la consola:

text
/setjob <player id> mechanic 1

Los valores son el id del jugador, la clave de trabajo y el número de grado. Si el comando es rechazado, te falta permisos de administrador: consulta permisos ACE para administradores.

Lee el trabajo en scripts

En el servidor:

lua
local QBCore = exports['qb-core']:GetCoreObject()

RegisterNetEvent('my_script:doWork', function()
    local src = source
    local Player = QBCore.Functions.GetPlayer(src)
    if not Player then return end

    local job = Player.PlayerData.job
    if job.name ~= 'mechanic' then
        return TriggerClientEvent('QBCore:Notify', src, 'You are not a mechanic', 'error')
    end

    if not job.onduty then
        return TriggerClientEvent('QBCore:Notify', src, 'Go on duty first', 'error')
    end

    -- allowed
end)

Player.PlayerData.job contiene name, label, onduty, isboss, payment y una tabla grade con el name y level del rango. Para el número de rango usa job.grade.level.

Para cambiar el trabajo desde el código:

lua
Player.Functions.SetJob('mechanic', 1)

Si QBCore es nil aquí, consulta intento de indexar un valor nil (global 'QBCore').

En el cliente

lua
local QBCore = exports['qb-core']:GetCoreObject()
local PlayerData = {}

RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
    PlayerData = QBCore.Functions.GetPlayerData()
end)

RegisterNetEvent('QBCore:Client:OnJobUpdate', function(job)
    PlayerData.job = job
end)

Leer GetPlayerData().job antes de que el jugador haya cargado da nil, así que espera a OnPlayerLoaded, y mantén el trabajo fresco con OnJobUpdate.

En QBox

El núcleo de QBox es qbx_core, y el archivo de trabajos es qbx_core/shared/jobs.lua. La estructura es la misma: una etiqueta, defaultDuty, offDutyPay y grades. Abre el archivo y sigue las entradas ya en él, ya que el archivo de QBox puede diferir en detalles como cómo se escriben las claves de grado, y las nuevas versiones pueden añadir campos.

Reinicia qbx_core después de la edición. Para el código, la capa de compatibilidad aún responde a exports['qb-core']:GetCoreObject(), y la propia exportación de QBox es:

lua
local player = exports.qbx_core:GetPlayer(source)
if player then
    print(player.PlayerData.job.name)
end

Un grado con isboss = true es solo la bandera. El menú que permite al jefe contratar personas y usar la cuenta de la empresa viene de tu recurso de gestión, que generalmente tiene su propia lista de trabajos para configurar. Si el menú de jefe no se abre para tu nuevo trabajo, comprueba ese recurso para el nombre del trabajo.

Problemas comunes

  • Trabajo no encontrado por /setjob. El núcleo no fue reiniciado, o la clave está mal escrita.
  • El núcleo falla después de la edición. Un error de sintaxis en jobs.lua. Lee la primera línea roja en la consola, y cómo leer un error de script ayuda con el archivo y la línea.
  • La paga no se recibe. offDutyPay = false significa que el jugador debe estar en servicio, y el intervalo de nómina viene de la configuración del núcleo.

Lista de verificación

Síntoma Solución
Trabajo no encontrado Añádelo a shared/jobs.lua y reinicia qb-core o qbx_core
El núcleo no se inicia Error de sintaxis en jobs.lua; comprueba comas y llaves
Rango incorrecto Las claves de grado son cadenas comenzando en '0' en QBCore
Sin paga fuera de servicio Establece offDutyPay = true o ve en servicio
El trabajo es nil en el cliente Espera QBCore:Client:OnPlayerLoaded
Sin menú de jefe Establece isboss = true y añade el trabajo al recurso de gestión

Respuestas rápidas

¿Dónde se definen los trabajos de QBCore?

En qb-core/shared/jobs.lua, como entradas de QBShared.Jobs. En QBox el archivo es qbx_core/shared/jobs.lua.

¿Por qué /setjob dice que el trabajo no existe?

El núcleo lee el archivo cuando se inicia. Reinicia qb-core (o qbx_core) después de la edición, y comprueba que el nombre del trabajo y el número de grado existen en el archivo.

¿Qué hace isboss?

Marca un grado como grado de jefe. Los menús de jefe y los scripts de gestión comprueban esa bandera para decidir quién puede contratar, despedir y usar los fondos de la empresa.

Scripts que evitan este problema

Advanced BoostingBoosting de vehículos desde una tablet: contratos de clase D a S+, crews y cola en vivo.Ver script →Shop CreatorCrea una tienda en menos de un minuto — dueños, empleados, caja fuerte y atracos.Ver script →Pawn Shop AppUn mercado de empeños entre jugadores dentro de lb-phone.Ver script →

Sigue leyendo