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:
['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 campotypeextra que otros scripts usan para agruparlos, y el archivo muestra lo que tu versión soporta.
Cuidado: una coma o llave faltante en
jobs.luadetiene 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:
restart qb-coreLuego, como administrador, en el juego o la consola:
/setjob <player id> mechanic 1Los 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:
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:
Player.Functions.SetJob('mechanic', 1)Si QBCore es nil aquí, consulta intento de indexar un valor nil (global 'QBCore').
En el cliente
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:
local player = exports.qbx_core:GetPlayer(source)
if player then
print(player.PlayerData.job.name)
endMenú de jefe y fondos
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 = falsesignifica 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 →