Cómo añadir un trabajo en ESX Legacy: SQL de jobs y job_grades, setjob

Añade un trabajo personalizado a ESX Legacy con dos inserciones SQL en jobs y job_grades, establécelo con /setjob, léelo en scripts con xPlayer.job, y enlázalo a una cuenta de sociedad.

ESX no tiene un archivo de trabajos. Un trabajo son filas en tu base de datos: una en jobs, y una por rango en job_grades. Esta guía añade un trabajo, lo da a un jugador, lo lee en código, y lo vincula a una cuenta de sociedad.

1. Inserta el trabajo

La tabla jobs contiene el trabajo en sí, y job_grades contiene sus rangos. Ejecuta esto en HeidiSQL, phpMyAdmin o la CLI de mysql, en la base de datos que tu servidor usa:

sql
INSERT INTO `jobs` (`name`, `label`) VALUES
  ('mechanic2', 'Mechanic');

INSERT INTO `job_grades` (`job_name`, `grade`, `name`, `label`, `salary`, `skin_male`, `skin_female`) VALUES
  ('mechanic2', 0, 'recruit',  'Recruit',  200, '{}', '{}'),
  ('mechanic2', 1, 'novice',   'Novice',   300, '{}', '{}'),
  ('mechanic2', 2, 'boss',     'Boss',     500, '{}', '{}');

Las reglas que importan:

  • name es el nombre del código: minúsculas, sin espacios, y igual en todas partes. label es lo que los jugadores ven.
  • job_name en job_grades debe ser igual al name del trabajo.
  • El rango 0 debe existir, porque los jugadores nuevos del trabajo comienzan en él. Numera los rangos sin huecos.
  • salary se paga en cada intervalo de pago, si tus cheques de pago se ejecutan.
  • Un trabajo que falta en job_grades rompe /setjob y puede generar errores cuando un jugador se carga.

Las columnas pueden diferir un poco entre versiones de ESX, así que abre job_grades en tu herramienta y empareja la lista de columnas con la tabla que ves. Si una inserción falla, los errores de importación se cubren en Unknown column and table errors.

2. Reinicia para que ESX recargue los trabajos

ESX lee trabajos de la base de datos cuando es_extended se inicia, así que una fila nueva es invisible hasta entonces:

text
restart es_extended

En un servidor en vivo, reiniciar el núcleo puede romper los scripts que dependen de él, así que reinicia el servidor completo en un momento tranquilo si no estás seguro.

3. Da el trabajo a un jugador

En el juego o desde la consola, como administrador:

text
/setjob <player id> mechanic2 0

Los tres valores son el id del jugador, el name del trabajo y el número de rango. Si falla, comprueba la ortografía contra la tabla jobs y que el rango existe, luego ve ACE permissions for admins si el comando es rechazado.

4. Lee el trabajo en tus scripts

En el servidor, obtén el jugador y lee el trabajo:

lua
local ESX = exports['es_extended']:getSharedObject()

RegisterNetEvent('my_script:doWork', function()
    local xPlayer = ESX.GetPlayerFromId(source)
    if not xPlayer then return end

    local job = xPlayer.getJob()
    if job.name ~= 'mechanic2' then
        return xPlayer.showNotification('You are not a mechanic')
    end

    if job.grade < 1 then
        return xPlayer.showNotification('You need a higher rank')
    end

    -- allowed
end)

xPlayer.getJob() devuelve una tabla, y xPlayer.job contiene los mismos datos. Los campos que usarás más son name, label, grade, grade_name y grade_label.

Para cambiar el trabajo de un jugador desde código:

lua
xPlayer.setJob('mechanic2', 1)

Si ESX es nil en tu script, arreglalo primero con ESX is nil: fixing esx:getSharedObject.

En el cliente

lua
local ESX = exports['es_extended']:getSharedObject()

local function isMechanic()
    local data = ESX.GetPlayerData()
    return data.job and data.job.name == 'mechanic2'
end

RegisterNetEvent('esx:setJob', function(job)
    -- job changed while the player is online
    print(job.name, job.grade)
end)

El evento esx:setJob se dispara cuando cambia el trabajo, así que mantén tu propia copia actualizada en lugar de preguntar cada fotograma.

5. Cuentas de sociedad con esx_society

Si el trabajo necesita una cuenta bancaria compartida, un menú de jefe o una sala de depósito, depende de esx_society. Un trabajo con una sociedad necesita:

  • Un rango de jefe. El rango superior se llama boss, como en la inserción anterior. El menú del jefe busca ese nombre.
  • Una cuenta de sociedad. El dinero de la sociedad vive en la tabla addon_account, en una cuenta llamada society_ más el nombre del trabajo, por ejemplo society_mechanic2. Añade una fila para él, y para su inventario y datastore si tu trabajo los usa.
  • El registro. El script propio del trabajo registra la sociedad con esx_society en el servidor cuando se inicia, usando el mismo nombre de trabajo.

Dónde vive el registro depende del script que ejecuta el trabajo. Comprueba cómo un trabajo existente en tu servidor lo hace, como el trabajo de policía o mecánico, y espéjalo para el tuyo.

Consejo: si el menú del jefe se abre vacío o el dinero no se mueve, el nombre de la cuenta de sociedad no coincide con society_ más el nombre del trabajo exactamente.

Lista de verificación

Síntoma Solución
Trabajo no encontrado por /setjob Reinicia es_extended después de la inserción
Errores cuando el jugador se carga El trabajo no tiene rango 0 en job_grades
Falta de coincidencia de nombre job_name debe ser igual al name del trabajo, minúsculas
Rango incorrecto pagado Comprueba el salary de ese grade
Sin menú del jefe Nombra el rango superior boss y registra la sociedad
Dinero de sociedad faltante Crea society_<job> en addon_account con el nombre exacto del trabajo

Respuestas rápidas

¿Dónde se almacenan los trabajos de ESX?

En la base de datos: la tabla jobs contiene el trabajo, y la tabla job_grades contiene sus rangos con un salario cada uno. No hay archivo de trabajos para editar en ESX Legacy.

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

ESX carga trabajos cuando es_extended se inicia. Reinícialo después de la inserción, y comprueba que el nombre del trabajo y el número de rango existen en job_grades.

¿Cómo obtengo el menú del jefe para mi trabajo?

Nombra el rango superior boss. esx_society comprueba ese nombre de rango para el menú del jefe, y también necesita una cuenta de sociedad para el trabajo.

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