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:
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:
namees el nombre del código: minúsculas, sin espacios, y igual en todas partes.labeles lo que los jugadores ven.job_nameenjob_gradesdebe ser igual alnamedel trabajo.- El rango
0debe existir, porque los jugadores nuevos del trabajo comienzan en él. Numera los rangos sin huecos. salaryse paga en cada intervalo de pago, si tus cheques de pago se ejecutan.- Un trabajo que falta en
job_gradesrompe/setjoby 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:
restart es_extendedEn 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:
/setjob <player id> mechanic2 0Los 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:
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:
xPlayer.setJob('mechanic2', 1)Si ESX es nil en tu script, arreglalo primero con ESX is nil: fixing esx:getSharedObject.
En el cliente
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 llamadasociety_más el nombre del trabajo, por ejemplosociety_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 →