Comandos#
Job Center registra un comando de chat. No hay comandos de consola ni de administración — todo lo demás se configura en shared/config.lua.
Comando | Dónde | Descripción |
|---|---|---|
| En el juego | Abre el panel de jefe para un jugador con un grado de jefe en su trabajo actual. El nombre es |
El Job Center en sí no tiene comando: los jugadores lo abren en el empleado, y tus scripts lo abren con el evento de abajo.
Eventos del cliente#
Job Center no tiene exports. Otros scripts abren sus ventanas con eventos — un prop de portátil, un menú radial, un teléfono, un segundo empleado propio.
Abrir el Job Center
-- from a client script
TriggerEvent('qs-jobcenter:client:openJobCenter')
-- from a server script, for one player
TriggerClientEvent('qs-jobcenter:client:openJobCenter', source)Abre la misma ventana que el empleado, esté donde esté el jugador. Para un segundo Job Center, genera tu propio ped y apunta su opción de target a este evento.
Abrir el panel de jefe
-- from a client script
TriggerEvent('jobcenter:useBossTablet')
-- from a server script, for one player
TriggerClientEvent('jobcenter:useBossTablet', source)Hace la misma comprobación que la tablet: el trabajo y grado actuales del jugador deben figurar como jefe, y Config.UseBossItem debe ser true. Cualquier otro ve You can't use this item.
Un segundo empleado con ox_target
-- client script of your own
local model = `a_m_y_business_02`
lib.requestModel(model)
local ped = CreatePed(0, model, -1083.0, -245.9, 36.76, 205.0, false, true)
FreezeEntityPosition(ped, true)
SetEntityInvincible(ped, true)
SetBlockingOfNonTemporaryEvents(ped, true)
exports.ox_target:addLocalEntity(ped, {
{
name = 'my_jobcenter',
icon = 'fas fa-briefcase',
label = 'Open Job Center',
onSelect = function()
TriggerEvent('qs-jobcenter:client:openJobCenter')
end,
},
})Eventos del servidor#
Estas son las peticiones que la interfaz envía al servidor. Escúchalas — como hace server/custom/webhook_events.lua — para reaccionar a solicitudes, contrataciones y respuestas en tus propios scripts. Dentro de un handler, source es el jugador que actuó.
Evento | Argumentos | Se envía cuando |
|---|---|---|
|
| Un solicitante envía un mensaje. |
|
| Un jugador acepta un trabajo instantáneo. |
|
| Un jefe responde. |
|
| Un jefe cierra una solicitud. |
|
| Un solicitante abre un chat que tenía una insignia. |
|
| Un jefe abre el hilo de un solicitante. |
-- any server script
AddEventHandler('jobcenter:instantHire', function(jobId)
local src = source
print(('Player %s took the %s job at the job center'):format(src, jobId))
end)Escucha, no supongas. Un handler ve cada petición, incluidas las que el núcleo luego rechaza — un mensaje dentro del cooldown, una respuesta de alguien que no es jefe — así que comprueba lo que necesites antes de actuar. Y nunca dispares
jobcenter:instantHirepara una oferta que no sea"instant": el jugador es expulsado como exploit.
Callbacks del puente del teléfono#
Para la app Careers HQ — o una app de teléfono o tablet propia — server/custom/sv_careershq.lua registra callbacks de ox_lib que devuelven tablas simples, listas para pasar a una NUI:
Callback | Argumentos | Devuelve |
|---|---|---|
| — |
|
|
| El propio hilo del jugador para ese trabajo, con el mensaje más antiguo primero. |
| — | Cada hilo de solicitante de los trabajos de los que el jugador es jefe: nombre, número de mensajes, último mensaje, estado de lectura y hora. |
|
| El hilo de un solicitante — vacío salvo que el jugador sea jefe de ese trabajo. |
-- client script of your own
local data = lib.callback.await('qs-jobcenter:phone:bootstrap', false)
if data and data.ok then
for jobId, job in pairs(data.jobs) do
print(jobId, job.title, job.applyType)
end
end
-- writes go through the server events above
TriggerServerEvent('jobcenter:sendMessage', 'police', 'Hello, I would like to apply.')Cada oferta de jobs lleva su applyType real — úsalo para decidir entre una contratación instantánea, el chat y el enlace, exactamente como hace el Job Center.
Sobre los mensajes#
Cada frase que muestra el script — notificaciones, la interfaz, nombres como Applicant y Boss — viene de una clave en locales/, como NOTIFICATION_NO_ACCESS o NOTIFICATION_JOB_HIRED. El callback de arranque pasa la misma tabla a tu app, así que un teléfono o tablet basado en él se lee en el idioma del servidor sin textos propios.



