Configuración de trabajo de policía en FiveM: grados, turno, armería y conteo de policías

Cómo configurar un trabajo de policía en un servidor FiveM: trabajo y grados, toggle de turno, armería con tienda y escondite, esposas y escolta, comprobaciones de conteo de policías, MDT y despacho.

El síntoma: agregaste un trabajo de policía, pero nadie puede entrar en turno, la armería está abierta para todos, o los robos dicen "no hay policías suficientes" mientras tres oficiales están en línea.

Un trabajo de policía que funciona es un puñado de pequeñas partes que tienen que estar de acuerdo en una cosa: el nombre del trabajo y quién está en turno. Este artículo recorre cada parte y dónde usualmente se rompe.

El trabajo y sus grados

El trabajo es una fila de datos: un nombre, una etiqueta y una lista de grados (cadete, oficial, sargento, jefe). El número de grado es lo que compruebas más tarde, así que decide el orden primero y mantenlo. Cómo crear el trabajo en cada framework está cubierto en añadiendo un trabajo en ESX y añadiendo un trabajo en QBCore. En QBox el trabajo vive en los datos compartidos de qbx_core en lugar de un archivo qb-core.

Dos reglas que ahorran dolor:

  • Usa un nombre interno en todas partes, por ejemplo police. Cada script que dice "solo policía" compara contra esa cadena.
  • Da al grado del jefe la bandera que tu framework usa para jefes, así los menús de sociedad y gestión funcionen.

El toggle de turno

Ser un oficial de policía y estar en turno no son lo mismo. Los robos, despacho y sueldos solo deben contar oficiales en turno.

  • QBCore y QBox mantienen un campo onduty en el trabajo, y un toggle lo cambia. Un trabajo puede configurarse para comenzar en turno o fuera de turno por defecto.
  • ESX no tiene campo de turno en el trabajo base. Muchas configuraciones usan un segundo trabajo fuera de turno, o una bandera que tu recurso de policía mantiene, así que comprueba cómo lo hace el tuyo antes de escribir cualquier conteo.

Sea cual sea el framework, el toggle debe ejecutarse en el servidor, y el servidor decide el valor. Un evento del cliente que dice "estoy en turno" sin comprobación es un exploit.

La armería: tienda o escondite

No distribuyas armas de un evento del cliente. Usa las herramientas de tu propio inventario. Con ox_inventory puedes restringir una tienda o un escondite a un trabajo y un grado mínimo, que es la armería más limpia:

lua
-- shop entry (in the ox_inventory shops data)
PoliceArmory = {
    name = 'Police Armory',
    groups = { police = 0 },          -- job name and minimum grade
    inventory = {
        { name = 'radio', price = 0 },
        { name = 'handcuffs', price = 0 },
    },
    locations = { vec3(452.6, -980.0, 30.7) },
}

Un escondite funciona de la misma manera para armarios de evidencia y almacenamiento compartido. Ver tiendas ox_inventory y escondites ox_inventory. Mantén los nombres groups y la comprobación de grado igual que tu nombre de trabajo, o la armería permanece bloqueada para todos.

Esposas y escolta

Esposas es un conjunto de pequeñas piezas, no una característica:

  1. El oficial juega una animación y el servidor comprueba que el objetivo está cerca y que el oficial tiene el trabajo.
  2. El objetivo obtiene un estado de esposas, una animación de esposas y controles deshabilitados (sin disparar, sin correr, sin entrar en vehículos por su cuenta).
  3. La escolta adjunta el objetivo al oficial, o lo sigue, hasta que se suelta.

Mantén la bandera de esposas como una state bag así cada cliente la ve, y así los jugadores que se transmiten más tarde también la ven. Comprueba distancia y trabajo en el servidor, la forma que asegurar eventos de servidor describe. Recuerda limpiar la bandera cuando el jugador se suelte, muera o se vaya.

Conteo de policías para robos

Los robos, asaltos y algunos trabajos de drogas preguntan "cuántos oficiales están en turno". La respuesta debe venir del servidor:

lua
-- ESX (server)
local function policeOnline()
    local count = 0
    for _, xPlayer in pairs(ESX.GetExtendedPlayers('job', 'police')) do
        count += 1
    end
    return count
end
lua
-- QBCore (server)
local function policeOnline()
    local count = 0
    for _, player in pairs(QBCore.Functions.GetQBPlayers()) do
        local job = player.PlayerData.job
        if job.name == 'police' and job.onduty then
            count += 1
        end
    end
    return count
end

En QBox, versiones recientes de qbx_core también envían exports de conteo de turno, así que comprueba su documentación antes de escribir tu propio bucle. Si usas un par de trabajo fuera de turno en ESX, cuenta solo el nombre en turno.

Siempre cuenta en el servidor, y cuenta de nuevo cuando comienza el robo, no solo cuando el jugador se acerca. Ver scripts de robo para el flujo completo.

MDT y despacho son separados

El trabajo de policía te da un trabajo y un conteo. Estos son usualmente otros recursos:

  • MDT: registros, órdenes, ciudadanos y búsqueda de vehículos.
  • Despacho: llamadas 911, blips de alerta, estado del oficial.
  • Evidencia e impugnación: a menudo sus propios scripts de nuevo.

Comprueba la configuración de cada uno para el nombre del trabajo. Un despacho que nunca muestra alertas es casi siempre configurado para un nombre de trabajo diferente al que creaste.

Checklist

Síntoma Solución
Armería abierta para todos Añade el nombre del trabajo y un grado mínimo a los groups de tienda o escondite
Armería bloqueada para oficiales El nombre del trabajo en la armería no coincide con el nombre del trabajo que creaste
El robo dice sin policías, oficiales en línea Cuenta solo oficiales en turno, con el nombre exacto del trabajo, en el servidor
El despacho no muestra alertas Establece el nombre del trabajo de policía en la configuración de despacho
El jugador permanece con esposas después de la liberación Limpia el estado de esposas al liberar, morir y desconectarse
Cualquiera puede entrar en turno Haz el toggle en el servidor y comprueba el trabajo primero

Respuestas rápidas

¿Cómo cuento los oficiales de policía en línea?

En el servidor, itera sobre los jugadores conectados y cuenta los cuyo trabajo sea tu trabajo de policía y estén en turno. Hazlo en el servidor, nunca en el cliente, porque robos y asaltos confían en ese número.

¿Un trabajo de policía incluye un MDT y despacho?

Normalmente no. El trabajo en sí es solo el trabajo, grados, turno y una armería. El MDT (registros, órdenes) y el despacho (llamadas, blips) son recursos separados que leen el trabajo del jugador.

¿Dónde les doy armas a los policías?

Ponlas en una armería: una tienda de inventario o un escondite restringido al trabajo de policía y a un grado mínimo. No des armas de un evento del cliente.

Scripts que evitan este problema

CCTV Security CamerasCámaras colocables, una tablet con vista múltiple en vivo y fotos como prueba.Ver script →Advanced BoostingBoosting de vehículos desde una tablet: contratos de clase D a S+, crews y cola en vivo.Ver script →

Sigue leyendo