Trabajos, bandas e items · Lección 1/3 · 9 min

Trabajos (jobs) y rangos con QBCore

Cada jugador tiene un trabajo, un rango y un estado de servicio (onduty). Aprende a leerlos y a asignarlos.

El trabajo del jugador vive en Player.PlayerData.job. Es la base de casi cualquier sistema de roleplay: policía, EMS, mecánico, bandas…

lua
local Player = QBCore.Functions.GetPlayer(source)
local job = Player.PlayerData.job

local nombre = job.name        -- 'police'
local etiqueta = job.label     -- 'Policía'
local rango = job.grade.level  -- 0, 1, 2…
local rangoNombre = job.grade.name -- 'cadete'
local enServicio = job.onduty  -- true / false

Leer el trabajo

Dar un trabajo

lua
-- SetJob(nombre, rango)
Player.Functions.SetJob('police', 2) -- policía, rango 2

Asignar trabajo y rango

Ejemplo: comando solo para policías en servicio

lua
RegisterCommand('multar', function(source)
  local Player = QBCore.Functions.GetPlayer(source)
  if not Player then return end
  local job = Player.PlayerData.job
  if job.name ~= 'police' or not job.onduty then
    return QBCore.Functions.Notify(source, 'No estás de servicio como policía.', 'error')
  end
  -- aquí la lógica de multar…
end, false)

Restringir por trabajo y servicio

Los trabajos están definidos en qb-core/shared/jobs.lua (cada uno con sus grades). Comprueba SIEMPRE el trabajo en el SERVIDOR antes de dar acceso a algo; el cliente puede mentir.

Practica lo aprendido

0/3
Rellena los huecos

Completa para leer el nombre del trabajo del jugador en el servidor.

1local Player = QBCore.Functions.GetPlayer(source)
2local nombre = Player.PlayerData..name
Pista

En QBCore los datos del jugador cuelgan de Player.PlayerData; el trabajo es uno de ellos.

Test

¿Cómo le asignas a un jugador el trabajo de policía con rango 2?

Corrige el error

Este comando /multar debería ser solo para policías, pero no comprueba nada. Añade que solo continúe si el trabajo es 'police'.

Este código tiene un fallo:

1RegisterCommand('multar', function(source)
2 local Player = QBCore.Functions.GetPlayer(source)
3 if not Player then return end
4 -- aqui la logica de multar
5end, false)

Reescríbelo corregido:

Pista

Compara Player.PlayerData.job.name con 'police' y haz return si no coincide. Esto va SIEMPRE en el servidor.

Reto: prográmalo tú

Haz un comando /cobrarsueldo que solo funcione si el jugador es 'mechanic' y le pague según su rango (grade.level × 100).

Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.

Ver pista

Lee job.grade.level y multiplícalo; valida job.name == 'mechanic' primero.

Escribe aquí tu solución:

¿Qué tal esta lección?