Cómo funcionan las integraciones#
Nada dentro de Police Creator da por hecho qué framework, inventario o script de voz usas. Cada llamada a terceros pasa por un pequeño archivo puente sin cifrar en client/custom/ o server/custom/, y al iniciar, el recurso elige el puente del primer recurso compatible que encuentra en ejecución.
Capa | Compatibles (orden de detección) | Sin él |
|---|---|---|
Framework |
| Standalone: los trabajos se escriben a mano en el panel de administración y los agentes se reconocen por ACE. |
Inventario |
| Sin objetos utilizables, stashes, registros ni detección K9. |
Target |
| Cada punto se convierte en un marcador en el suelo con un aviso |
Voz |
| La radio usa los voice targets nativos de Mumble — un punto de partida para SaltyChat y similares. |
Ropa |
| Las taquillas y los uniformes de prisión se capturan y aplican con natives del juego. |
Llaves de vehículos |
| Las unidades de la flota simplemente se desbloquean para el agente que las saca. |
Banca de sociedad |
| Los saldos de los departamentos se guardan en la tabla propia del recurso. |
Combustible |
| El combustible de la flota se guarda con el nivel de combustible propio del juego. |
Text UI · Notificaciones |
| Avisos 3D integrados y notificaciones de ox_lib. |
Capturas |
| Sin fotos de ficha, fotos de llamadas ni capturas de bodycam. |
Base de datos |
| Obligatoria. |
Qbox se comprueba antes que QBCore a propósito: Qbox también responde al nombre
qb-core, y sus propios eventos son los que informan de ascensos y cambios de servicio.
Forzar la detección#
Cada capa se detecta en config/shared/config.lua. Para fijar una opción, sustituye la llamada de detección por el valor — el resumen de arranque mostrará entonces (manual) para ella:
-- Auto, the default: the first started resource in the list wins.
Config.Inventory = ConfigAutoDetect('Inventory', { 'qs-advanced-inventory', 'qs-inventory', 'qb-inventory', 'ox_inventory' }, 'vanilla')
-- Manual: always this one.
Config.Inventory = 'ox_inventory'
Config.SocietyBanking = 'Renewed-Banking'
Config.VoiceSystem = 'pma-voice'Hazlo cuando se ejecuten dos candidatos a la vez, o cuando un recurso se haya renombrado en tu servidor. El valor debe coincidir con el nombre de un archivo puente en la carpeta custom/ correspondiente.
La voz y la radio#
Recomendado. En su primer inicio, Police Creator añade dos líneas de export a pma-voice/client/module/radio.lua (solo si faltan) y pide en rojo un reinicio del servidor hasta que lo hagas. Los comandos de radio propios de pma-voice siguen funcionando; la radio policial lo controla desde la tablet.
Se detecta automáticamente. Los canales y los botones de difusión se ajustan a través del canal de difusión de yaca en el servidor.
Sin un script de voz compatible, la radio usa los voice targets nativos de Mumble del juego. Ese es el punto de partida para SaltyChat o una voz personalizada: copia client/custom/voice/mumble.lua y cambia las llamadas.
Dinero de sociedad#
Cuando un ciudadano paga una multa, el dinero va a la cuenta bancaria del departamento que puso la multa — la misma cuenta que los agentes ven en su script de banca.
Script de banca | Dónde llega el dinero |
|---|---|
qs-banking | La cuenta de sociedad del trabajo. |
Renewed-Banking · fd_banking · okokBanking | La cuenta con el nombre del trabajo. |
qbx_management · qb-banking · qb-management | La cuenta del trabajo / del menú de jefe. |
esx_addonaccount |
|
Ninguno de los anteriores | La tabla |
Los scripts de banca dedicados se comprueban antes que los del framework a propósito: un servidor con Renewed-Banking normalmente sigue teniendo qb-management instalado, pero el saldo que ven los jugadores es el de Renewed-Banking.
Todo lo demás está en Admin → Society money: el interruptor general, si las multas pagadas se depositan, la parte del departamento (100% conserva la multa entera), un trabajo de respaldo, trabajos excluidos, nombres de cuenta para bancos que nombran las cuentas de otra forma (police → society_lspd), y el registro de cada depósito. Su tarjeta Connection tiene un depósito de prueba que mueve dinero real e informa de lo que ocurrió. La misma prueba desde la consola del servidor:
qs-society-check police # which adapter, which account, current balance
qs-society-check police 100 # a real deposit of 100, and whether the balance movedGarajes, depósito municipal y llaves de vehículos#
Los garajes de la flota policial vienen integrados; no sustituyen tu script de garaje civil. Dos hooks conectan ambos:
Depósito — después de que se vaya la grúa,
Config.OnImpoundVehicleenconfig/shared/impound.luaentrega la matrícula a tu garaje.qs-advancedgaragesestá conectado enserver/custom/garages/impound.lua; los ejemplos de ESX y QBCore están en la config, comentados.Hooks de la flota —
Config.Garage.OnVehicleTakenyConfig.Garage.OnVehicleStoredenconfig/shared/garages.luase ejecutan en el cliente cada vez que una unidad sale o vuelve.Columna de garaje de ESX — las fichas de vehículos leen si un coche está aparcado desde
owned_vehicles. Si tu script de garaje usa su propio nombre de columna, configuraConfig.OwnedVehiclesTableGarageColumn.
Las llaves se entregan al agente que saca una unidad de la flota, a través del puente de llaves en client/custom/vehiclekeys/. Sin un script de llaves, la unidad simplemente se desbloquea para él.
Logs de Discord#
Cada acción importante se escribe en la página Action Logs y se puede publicar en Discord como embed. Pega un webhook por categoría en Admin → Action Logs — sin archivos que editar:
Categoría | Qué se envía |
|---|---|
| Cada ajuste cambiado en el panel de administración. |
| Informes creados, editados y eliminados. |
| Entradas y salidas de servicio. |
| Perros adoptados, desplegados y usados. |
| Depósitos y retiradas de sociedad, y sus fallos. |
| Acciones sobre jugadores y pruebas. |
Los logs se conservan 30 días por defecto (se ajusta en la misma página). Los colores de los embeds están en Config.LogColors, config/server/webhooks.lua.
Añadir un backend#
Dar soporte a algo que no está en la lista es un archivo más una línea:
Copia el puente más parecido
Cada puente es un pequeño archivo sin cifrar en
client/custom/<kind>/oserver/custom/<kind>/— framework, inventory, target, voice, clothing, vehiclekeys, society. Copia el más parecido a tu recurso y ponle su nombre.Cambia las llamadas de dentro
La primera línea de cada puente es una guarda, para que solo se ejecute cuando es el elegido. Cámbiala a tu nombre y luego sustituye los exports por los de tu recurso. Un puente de banca, por ejemplo, solo necesita tres funciones:
lua -- server/custom/society/my_banking.lua if Config.SocietyBanking ~= 'my_banking' then return end function SocietyAddMoney(job, amount, reason) return exports['my_banking']:AddMoney(job, amount, reason) end function SocietyRemoveMoney(job, amount, reason) return exports['my_banking']:RemoveMoney(job, amount, reason) end function SocietyGetMoney(job) return exports['my_banking']:GetMoney(job) endRegístralo para la detección
Añade tu recurso a la lista
ConfigAutoDetectcorrespondiente enconfig/shared/config.lua, o configura el valor a mano. Reinicia y revisa el resumen de arranque.
Todo lo que hay en config/, client/custom/, server/custom/ y placeables/ sigue siendo editable; el resto del recurso está cifrado. Guarda una copia de tus puentes modificados antes de actualizar y vuelve a aplicarlos sobre los archivos nuevos.
Idiomas#
Cada recurso incluye 15 idiomas en su carpeta locales/ (alertas y pruebas en 14, sin chino tradicional). Configura Config.Locale en la config de cada recurso. Lo que aún no está traducido usa el inglés, así que un idioma sin terminar nunca está roto.
Código | Idioma | Código | Idioma |
|---|---|---|---|
| Inglés |
| Neerlandés |
| Español |
| Portugués (Brasil) |
| Alemán |
| Ruso |
| Francés |
| Chino (simplificado) |
| Italiano |
| Chino (tradicional) |
| Japonés |
| Árabe |
| Coreano |
| Montenegrino |
| Húngaro |
La página Admin → Updates descarga las últimas traducciones de la comunidad para cada recurso directamente en su carpeta locales/. Si editaste un archivo de idioma a mano, guarda una copia: una descarga sustituye ese archivo.



