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…
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 / falseLeer el trabajo
Dar un trabajo
-- SetJob(nombre, rango)
Player.Functions.SetJob('police', 2) -- policía, rango 2Asignar trabajo y rango
Ejemplo: comando solo para policías en servicio
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/3Completa para leer el nombre del trabajo del jugador en el servidor.
local Player = QBCore.Functions.GetPlayer(source)local nombre = Player.PlayerData..namePista
En QBCore los datos del jugador cuelgan de Player.PlayerData; el trabajo es uno de ellos.
¿Cómo le asignas a un jugador el trabajo de policía con rango 2?
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:
RegisterCommand('multar', function(source) local Player = QBCore.Functions.GetPlayer(source) if not Player then return end -- aqui la logica de multarend, 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:
