Cuxial Police guarda sus ajustes en la base de datos y los edita desde una pestaña de la tablet. Esta página explica cómo funciona y qué hace cada opción.
Cómo funcionan los ajustes
| Dónde | Qué es |
|---|---|
install/defaults/config.lua | Valores de fábrica de los ajustes principales |
install/defaults/police/, ems/, fib/, shared/ | Valores de fábrica de las listas de datos (permisos, radio, objetos...) |
Tabla cuxial_police_settings | Los valores que el servidor usa de verdad |
| Pestaña de ajustes de la tablet | Donde se cambian |
En el primer arranque cada sección se copia de install/defaults/ a la base de datos. A partir de ahí la base de datos es la única fuente: los archivos solo se vuelven a leer para restaurar una sección.
Editar un archivo de install/defaults/ no cambia una instalación que ya ha arrancado una vez. Cambia el valor en la pestaña de ajustes. Para llevar un cambio de archivo a una instalación en marcha, reinicia el recurso y usa el botón de valores de fábrica de esa sección.
La pestaña de ajustes
La pestaña aparece en la tablet para el staff: jugadores con el permiso admin de tu framework. El jugador también necesita un trabajo de facción, porque solo los miembros de una facción pueden abrir la tablet.
| Acción | Qué hace |
|---|---|
| Guardar | Guarda la sección y la aplica al servidor y a todos los jugadores |
| Valores de fábrica | Restaura la sección a lo que contiene install/defaults/ |
| Exportar | Copia al portapapeles las secciones personalizadas, en JSON |
| Importar | Carga secciones desde ese JSON |
La mayoría de las secciones se aplica al momento. Estas necesitan reiniciar el recurso:
| Sección | Por qué |
|---|---|
config.radio, data.radio, data.radioaudio | Las frecuencias y el efecto de audio se construyen una vez al arrancar |
data.keybinds | Las teclas se registran una vez al arrancar |
fingerprint.closeKey, data.surrender → cancelKey | Son teclas |
addons.fib.enabled, addons.fib.devices.items | El addon y los exports de sus items se registran una vez al arrancar |
Esta página nombra cada sección por su id y da el título que verás en la pestaña de ajustes.
Trabajos y general
Secciones config.jobs (Trabajos) y config.general (General).
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
policeJobs | tabla | { police = true } | Trabajos que pertenecen a la facción de policía |
emsJobs | tabla | { ambulance = true } | Trabajos que pertenecen a la facción EMS |
factionJobs | tabla | police → 'police', ambulance → 'ems' | Mapa de trabajo a facción ('police', 'ems'). Se rellena a partir de las dos listas anteriores; los trabajos federales se añaden solos. Para quitar un trabajo, bórralo también aquí |
bossLevel | número | 8 | Grado desde el que un miembro cuenta como jefe, además de los grados que tu framework ya marca como jefe |
cameraRadius | número | 100.0 | Radio en metros en el que se buscan cámaras de CCTV alrededor del agente |
Opciones de la tablet y colores
Secciones config.appOptions (Opciones de la MDT) y config.theme (Colores).
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
appOptions.confiscate | booleano | true | Muestra la opción de incautar en la tablet y en el menú rápido. Solo cambia la interfaz |
theme.police | tabla | configurable | Colores de la tablet y el HUD de policía |
theme.ems | tabla | configurable | Colores de la tablet y el HUD de EMS |
theme.fib | tabla | configurable | Colores de la tablet y el HUD federal |
Cada tema tiene accent (obligatorio) y light, dark y gradientTo (opcionales). Los tres opcionales se derivan de accent cuando se omiten. Todos son colores hexadecimales.
Radio
Secciones config.radio (Radio), data.radio (Canales de radio), data.radioanims (Animaciones de radio) y data.radioaudio (Audio de radio).
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
radio.enabled | booleano | true | false: los jugadores no pueden entrar en frecuencias |
radio.defaultVolume | número | 1.0 | Volumen de radio con el que empieza un jugador (0 a 1) |
radio.centralFreqs | tabla | DISPATCH, COMMAND | Frecuencias que actúan como nivel de mando: hablan a todas las frecuencias tácticas de la facción |
data.radio contiene una lista de frecuencias por facción (police, ems, fib), agrupadas por categoría, y una tabla blips que da un icono y un color en el mapa a los miembros sintonizados en una frecuencia. Los nombres del archivo por defecto son ejemplos a cambiar.
data.radioaudio contiene el efecto de audio. proximityFxCutoff (por defecto 4.0) es la distancia por debajo de la cual se oye a quien habla sin el efecto de radio.
Avisos
Sección config.dispatch (Central / avisos) y data.gunshotwhitelist (Disparos ignorados).
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
dispatch.enabled | booleano | true | false: no se envían avisos de disparos |
dispatch.ignoredJobs | tabla | {} | Trabajos cuyos miembros de servicio no generan avisos de disparos. Acepta una lista o un mapa trabajo = true |
dispatch.sendAlertCooldown | número | 10 | Segundos entre dos avisos enviados por el mismo jugador con el export de cliente |
dispatch.gunshotCooldown | número | 5 | Segundos entre dos avisos de disparos del mismo jugador |
dispatch.entornoCooldown | número | 30 | Segundos entre dos usos de /entorno |
dispatch.radioCodeCooldown | número | 3 | Segundos entre dos códigos de radio del mismo miembro |
data.gunshotwhitelist es la lista de nombres de arma que nunca generan un aviso de disparos.
Multas y recaudación
Secciones config.payment (Cobros), config.revenue (Recaudación) y data.paymentLocations (Puntos de pago).
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
payment.enabled | booleano | true | false apaga los puntos de pago y los comandos de pago |
payment.commands | booleano | false | true: /paymultas y /payfacturas abren la pantalla de pago desde cualquier sitio. false: las multas y las facturas solo se pagan en los puntos de pago |
payment.payAccount | texto | 'bank' | Cuenta de la que se cobra primero: 'bank' o 'cash' |
payment.allowCashFallback | booleano | true | Cobra en efectivo cuando la primera cuenta no alcanza |
payment.bankFeePercent | número | 0 | Porcentaje extra que se suma al importe |
revenue.enabled | booleano | true | Ingresa lo pagado en la cuenta de la facción mediante cuxial_banking |
revenue.police.societyName | texto | 'police' | Cuenta que recibe las multas policiales |
revenue.police.societyLabel | texto | configurable | Concepto que aparece en el movimiento de la cuenta |
revenue.ems.societyName | texto | 'ambulance' | Cuenta que recibe las facturas médicas |
revenue.ems.societyLabel | texto | configurable | Concepto que aparece en el movimiento de la cuenta |
revenue.ems.commissionPercent | número | 30 | Parte de una factura médica que cobra el médico que la emitió, si está conectado |
revenue.ems.commissionAccount | texto | 'bank' | Cuenta en la que el médico recibe la comisión |
Cada entrada de data.paymentLocations es un punto con coords, heading, size, issuer ('police' o 'ems'), label, icon y distance. Vienen dos puntos por defecto, uno de policía en Mission Row y uno de EMS en Pillbox Hill; muévelos a tus propios edificios.
Puntos de estación
Secciones config.stations (Estaciones) y config.stationNpc (NPC de las estaciones). La lista empieza vacía y se construye dentro del juego con el editor de la pestaña de ajustes.
| Campo | Tipo | Qué hace |
|---|---|---|
id | texto | Identificador único del punto |
type | texto | 'duty', 'stash', 'armory', 'mdt' o 'event' |
label | texto | Texto de la interacción |
coords | vector | Posición, con orientación opcional |
faction | texto | 'police', 'ems', 'fib' o 'any' |
minGrade | número | Grado mínimo |
onDuty | booleano | Exige estar de servicio |
distance | número | Distancia de interacción. 2.0 por defecto |
enabled | booleano | false oculta el punto |
slots, weight, personal | taquilla | Tamaño de la taquilla; personal = true da una privada a cada miembro |
items | armería | Lista de { name, price, count, grade } |
event, server | evento | Evento que se lanza; server = true lo lanza en el servidor |
npc | tabla | Opcional. Convierte el punto en un NPC (necesita cuxial_interactions) |
Las armerías necesitan ox_inventory.
La tabla npc tiene enabled, model, scenario, name, role, greeting y group. Los puntos con el mismo group comparten un NPC, con un botón por punto. Sin cuxial_interactions el punto sigue siendo una zona de interacción.
config.stationNpc contiene los valores por defecto de esos NPC: model, scenario, spawnDistance (por defecto 60.0) y las listas de modelos y escenarios que ofrece el editor.
Herramientas de policía
| Opción | Sección | Por defecto | Qué hace |
|---|---|---|---|
surrender.maxDistance | config.surrender | 15.0 | Distancia máxima para pedir a un jugador que se rinda |
catear.cooldown | config.catear | 5 | Segundos entre dos cateos |
catear.maxDistance | config.catear | 2.5 | Distancia máxima para catear a un jugador |
ankle.tickMs | config.ankle | 3000 | Cada cuánto se envía la posición de una tobillera, en milisegundos |
ankle.placeDistance | config.ankle | 3.0 | Distancia máxima para colocar una tobillera |
ankle.shockCooldownMs | config.ankle | 5000 | Tiempo mínimo entre dos descargas al mismo portador |
fingerprint.points | config.fingerprint | ejemplo | Posiciones de los lectores de huellas |
fingerprint.interactDistance | config.fingerprint | 1.0 | Distancia para usar un lector |
fingerprint.broadcastRadius | config.fingerprint | 25.0 | Radio en el que el escaneo se muestra a otros jugadores |
fingerprint.cooldown | config.fingerprint | 10000 | Milisegundos entre dos escaneos |
fingerprint.closeKey | config.fingerprint | 'BACK' | Tecla que cierra el lector |
operations.allowedDurationsMin | config.operations | { 10, 20, 30 } | Duraciones aceptadas para una zona del mapa, en minutos. La tablet ofrece 10, 20 y 30 |
duty.pollIntervalMs | config.duty | 2500 | Cada cuánto se refrescan las posiciones de los miembros de servicio para los blips lejanos |
duty.moveThresholdM | config.duty | 15.0 | Metros que debe moverse un miembro para que se envíe de nuevo su posición |
duty.orphanCleanupSec | config.duty | 1800 | Segundos tras los que se cierra un fichaje que quedó abierto |
Las listas de datos de las herramientas de policía se editan como secciones completas:
| Sección | Título en la pestaña | Qué contiene |
|---|---|---|
data.illegalitems | Objetos ilegales | Items que detecta un cateo, como { name, label } |
data.policeobjects | Objetos policiales | Catálogo de props colocables, por categoría |
data.traffic | Tráfico | Puntos de control de tráfico: maxPoints (24), radius, radiusMin, radiusMax, colores y marcadores |
data.cuffs | Esposas | Prop de las esposas, animaciones y maxDistance (1.5) |
data.escort | Escoltar | Animación de escolta, posición de enganche y maxDistance (1.5) |
data.lockpick | Ganzúa | Dificultad de las pruebas de habilidad y maxDistance (3.0) |
data.surrender | Rendición (datos) | Animaciones, cancelKey ('X'), requestTimeoutMs, requestCooldownMs |
data.cctv | Cámaras CCTV | Modelos de prop tratados como cámaras de CCTV |
data.photo | Cámara (datos) | Prop de la cámara, zoom, rotación y tiempos del modo foto |
data.vehicledata | Datos de vehículos | Nombres de clases y colores de vehículo que muestra la ficha |
data.divisions, data.condecorates, data.badges | Divisiones, Condecoraciones, Placas | Divisiones, condecoraciones y plantillas de placa de la policía |
Prisión
Sección config.prison (Prisión). Solo se aplica cuando rcore_prison no está iniciado.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
prison.monthSeconds | número | 60 | Segundos reales que dura un mes de condena |
prison.jailCoords | vector4 | ejemplo | Dónde se coloca al preso |
prison.releaseCoords | vector4 | ejemplo | Dónde aparece el preso liberado |
EMS
Secciones config.medical (Médico) y config.appointments (Citas y recepciones).
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
medical.reviveEvent | texto | false | false | Evento de cliente que lanzan los fármacos que reaniman. false usa la reanimación nativa |
medical.hospitalPhone | texto | ejemplo | Número desde el que se envían los SMS de citas con lb-phone |
appointments.reminderMinutesBefore | número | 60 | Minutos antes de la cita en que se envía el recordatorio |
appointments.defaultDurationMin | número | 20 | Duración por defecto de una cita |
appointments.noShowGraceMin | número | 30 | Minutos tras el final del hueco antes de marcarla como no presentado |
appointments.noShowRegress | booleano | true | No presentarse a una cita de cura retrocede un paso el plan de cura |
appointments.checkInEarlyMin | número | 60 | Con cuánta antelación puede hacer check-in el paciente |
appointments.checkInRadius | número | 8.0 | Metros desde una recepción dentro de los que se acepta el check-in |
appointments.autoNextStep | booleano | true | Cerrar una cita de cura crea la siguiente del plan |
appointments.autoBill | booleano | false | Factura al paciente al cerrar, usando prices |
appointments.defaultHospital | texto | 'Medical Center' | Nombre del hospital que se escribe en las citas nuevas |
appointments.prices | tabla | ejemplo | Precio por tipo de cita; 0 es gratis |
appointments.receptions | tabla | ejemplo | Puntos de recepción: coords, size, heading, label |
Addon de agencia federal
Sección config.fib (Addon FIB), clave addons.fib.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | booleano | true | false: la tercera facción no existe. Necesita reinicio |
jobs | tabla | ejemplo | Trabajos que pertenecen a la facción federal |
label | texto | configurable | Nombre de la agencia |
caseNumberPrefix | texto | configurable | Prefijo del número de expediente, seguido de año y secuencia |
clearance | tabla | 0→0, 1→2, 2→4, 3→6 | Grado mínimo para ver un expediente de cada clasificación. El equipo del caso lo ve siempre |
gangResource | texto | 'cuxial_gang' | Recurso que aporta las organizaciones criminales |
Inteligencia
| Opción | Por defecto | Qué hace |
|---|---|---|
intel.auto | false | false: la inteligencia y el calor solo suben con el trabajo de la agencia. true: también cuenta la actividad de policía y bandas, con weights y heat |
intel.manual | tabla | Puntos de inteligencia por pieza de trabajo (sospechoso, confirmación, acto, acto verificado, prueba, lugar) |
intel.manualHeat | tabla | Puntos de calor por pieza de trabajo |
intel.manualCaps | tabla | Máximo de piezas de cada tipo que puntúan por organización; 0 es sin tope |
intel.maxIntel | 100 | Tope del medidor de inteligencia |
intel.decayPerHour | 1.5 | Inteligencia que se pierde por hora cuando la organización queda inactiva |
intel.idleHoursBeforeDecay | 6 | Horas sin eventos antes de que la inteligencia empiece a bajar |
intel.heatDecayPerHour | 3 | Calor que se pierde por hora |
intel.layers | tabla | Inteligencia necesaria para desbloquear cada capa de la ficha de la organización |
Órdenes y operativos
| Opción | Por defecto | Qué hace |
|---|---|---|
warrants.durationHours | arrest = 72, search = 24, surveillance = 48 | Horas que dura una orden firmada |
ops.requireWarrant | true | Allanamientos e incautaciones necesitan una orden de registro activa |
ops.seizeStash | true | El objetivo de alijo vacía el alijo real de la organización |
ops.seizeDirtyMoney | true | El objetivo de caja incauta el dinero sucio de la organización |
ops.cooldownHours | 24 | Horas mínimas entre dos operativos completados sobre la misma organización |
ops.minSuccessRatio | 0.5 | Parte de los objetivos (0 a 1) necesaria para que el operativo cuente como golpe |
ops.strikeLoyalty | 60 | Lealtad que pierde la organización en sus territorios tras un golpe |
Dispositivos
| Opción | Por defecto | Qué hace |
|---|---|---|
devices.items | fib_camera, fib_mic, fib_gps, WEAPON_DIGISCANNER | Item de cada dispositivo y arma usada como detector. Necesita reinicio |
devices.models | tabla | Modelos de prop que se ofrecen al colocar una cámara o un micrófono |
devices.placeDistance | 4.0 | Distancia máxima para colocar una cámara o un micrófono |
devices.pickupDistance | 3.0 | Distancia para recoger un dispositivo propio y recuperar el item |
devices.gpsAttachDistance | 3.0 | Distancia máxima al vehículo para fijar un rastreador |
devices.maxActive | 4 cada uno | Dispositivos activos por agente y tipo |
devices.batteryHours | camera = 48, mic = 24, gps = 72 | Horas que funciona un dispositivo |
devices.micRadius | 8.0 | Metros que capta un micrófono |
devices.gpsTrailMax | 240 | Puntos de recorrido guardados por rastreador |
devices.detector | radius = 30.0, removeDistance = 2.0 | Alcance del detector y distancia para retirar un dispositivo |
devices.heatOnLost | 3 | Calor que gana la organización cuando retira un dispositivo |
Requisitos de desmantelamiento
La tabla dismantle nunca se envía a los jugadores. Un requisito a 0 (o leader = false) queda desactivado.
| Opción | Por defecto | Qué hace |
|---|---|---|
dismantle.membersPct | 80 | Porcentaje de los miembros reales que debe estar confirmado |
dismantle.leader | true | El jefe real tiene que estar confirmado |
dismantle.acts | 30 | Actos delictivos registrados |
dismantle.actsMulti | 8 | Actos con al menos actsMultiPeople (2) miembros confirmados implicados |
dismantle.actsSolid | 15 | Actos con prueba y visto bueno de un supervisor |
dismantle.evidence | 10 | Evidencias físicas enlazadas |
dismantle.zones | 1 | Zonas de operación: territorios con al menos zoneActs (5) actos |
dismantle.places | 2 | Lugares localizados |
dismantle.manualActsNeedVerify | true | Un acto solo cuenta tras el visto bueno |
dismantle.verifyNotCreator | true | Quien registra un acto no puede darle el visto bueno |
dismantle.maxManualActsPerDay | 5 | Actos registrados por día y organización |
dismantle.evidenceResource | '' | Recurso de evidencias cuyos casos se pueden enlazar como prueba. '' deja solo los informes |
dismantle.videoDomains | {} | Dominios aceptados para pruebas en vídeo. Vacío acepta cualquiera |
dismantle.requestNoteMin | 20 | Caracteres mínimos de la nota de solicitud |
dismantle.requestCooldownHours | 24 | Espera para volver a solicitar tras una denegación |
Sistema
| Opción | Sección | Por defecto | Qué hace |
|---|---|---|---|
photo.uploadUrl | config.photo | configurable | Dirección a la que se suben las fotos |
photo.maxWidth, photo.maxHeight | config.photo | 1280, 720 | Tamaño máximo de una foto |
photo.uploadTimeoutMs | config.photo | 15000 | Milisegundos antes de dar una subida por fallida |
retention.plateChecksDays | config.retention | 30 | Días que se guardan las consultas de matrícula |
retention.usageLogDays | config.retention | 7 | Días que se guarda el registro de uso de fármacos |
retention.dispensationsDays | config.retention | 180 | Días que se guardan las dispensaciones de farmacia |
limits.maxBillAmount | config.limits | 10000000 | Importe máximo de una multa o factura |
limits.maxSentenceMonths | config.limits | 1200 | Condena máxima, en meses |
limits.maxPenalPrice | config.limits | 10000000 | Multa máxima de un artículo del código penal |
limits.maxTextLen, maxTitleLen, maxShortLen | config.limits | 5000, 120, 32 | Longitud máxima de notas, títulos y campos cortos |
Los permisos por grado (data.permissions) y las teclas (data.keybinds) se explican en Comandos y permisos.
Idioma
El idioma sigue la convar ox:locale. Los textos están en locales/en.json y locales/es.json, y los dos archivos se pueden editar.
Cambios habituales
Añadir un segundo trabajo de policía
En la pestaña de ajustes, sección config.jobs, añade el trabajo a policeJobs y a factionJobs. El resultado equivale a:
policeJobs = { police = true, sheriff = true },
factionJobs = { police = 'police', sheriff = 'police', ambulance = 'ems' },Cambiar el color de una facción
En la sección config.theme, indica solo el acento y deja que el resto se derive:
theme = {
police = { accent = '#3b82f6' },
}Alargar las condenas
En la sección config.prison, un mes de condena que dura cinco minutos reales:
prison = { monthSeconds = 300 }Desactivar la agencia federal
En la sección config.fib, pon enabled a false y reinicia el recurso.
