Las opciones se reparten en seis archivos: shared/config.lua para el núcleo y un archivo por sistema en data/. Los garajes, depósitos, flotas de trabajo y puntos de alquiler no están en ningún archivo: se crean en juego desde el panel de administración. Reinicia el recurso después de cambiar un archivo.
| Archivo | Qué cubre |
|---|---|
shared/config.lua | Permisos, pagos, transferencias, blips, interfaz |
data/keys.lua | Llaves de vehículo, robos y avisos a la policía |
data/impound.lua | Trabajos que incautan, tasa por defecto y comando |
data/rental.lua | Contratos de alquiler, recargos, avisos |
data/carwipe.lua | Limpieza de vehículos |
data/zones.lua | Distancias de interacción y marcador |
Config principal · shared/config.lua
General
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
debug | boolean | false | Escribe trazas en la consola. También se activa poniendo la convar cuxial_garages_debug a 1. |
admin.permission | string | 'admin' | Permiso que se comprueba a través de tu framework para abrir el panel de administración y usar sus acciones. /adminkey necesita además el grupo ACE group.<permiso>. |
language | string | 'es' | Idioma de la interfaz: 'es' o 'en'. Las notificaciones y los avisos siguen la convar ox:locale. |
accentColor | string | configurable | Color de acento de la interfaz. Acepta RRGGBB o el corto RGB, con o sin #, y la forma de 8 dígitos AARRGGBB, de la que se ignoran los dos primeros. |
externalGarages | boolean | false | true deja que otro recurso abra garajes de casa con los exports OpenGarage y StoreVehicle. Déjalo en false si no usas ninguno: la petición llega del cliente. |
fallbackGarage | string | '' | Id de un garaje público que recibe los vehículos cuyo garaje guardado ya no existe. '' = ninguno. |
normalizeStatesOnStart | boolean | false | true pasa a guardado, al iniciar el recurso, todo vehículo con un estado desconocido. Los incautados se respetan. Útil solo en el primer arranque tras venir de otro recurso de garajes. |
vehicleState | table | OUT = 0, STORED = 1, IMPOUND = 2 | Valores que se escriben en la columna state de la tabla de vehículos. No los cambies. |
fuelExemptClasses | table | [14] = true | Clases de vehículo de GTA que siempre se entregan con el depósito lleno. 14 = barcos. |
Blips · blips
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
garages | boolean | true | false oculta los blips de todos los garajes y depósitos. |
rental | boolean | true | false oculta los blips de los puntos de alquiler. |
El aspecto de cada blip sale de dos tablas:
| Opción | Qué hace |
|---|---|
categoryBlips | Sprite y escala según la primera categoría del punto de acceso: car, motorcycle, air, sea. Se consulta primero. |
defaultBlips | Sprite, color y escala según el tipo de garaje: public, house, job, gang, depot. Solo se usa cuando la categoría no tiene entrada en categoryBlips. |
Cada entrada acepta sprite, color y scale. Si falta color, vale 3.
Capacidad · capacity
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | false | false = todos los garajes son ilimitados. true aplica el límite que cada garaje tenga en el panel de administración; los garajes sin límite siguen ilimitados. |
El límite es por jugador: cuántos vehículos puede tener una misma persona en ese garaje. Los que están fuera en ese momento también cuentan. Las acciones de staff del panel de administración lo ignoran.
Pagos · payment y recover
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
payment.account | string | 'bank' | Cuenta de la que se cobran transferencias, recuperaciones, tasas de depósito y alquileres. Las fianzas de alquiler se devuelven a ella. |
payment.allowCashFallback | boolean | true | true cobra en efectivo cuando la cuenta no cubre el importe. false rechaza el pago. |
recover.price | number | 1000 | Precio de recuperar un vehículo que quedó fuera. 0 = gratis. |
Transferencias · transfer
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
maxDistance | number | 10.0 | Metros dentro de los cuales otro jugador puede recibir un vehículo o recibir la petición de pagar una tasa de depósito. |
allowPlayer | boolean | true | false desactiva en todos los garajes la transferencia de vehículos a otros jugadores. Con true, cada garaje puede desactivarla desde el panel. |
El jugador que recibe ve un aviso y debe aceptar. Un vehículo con financiación pendiente no se puede transferir a otro jugador. El precio de mover un vehículo entre garajes se define por garaje en el panel.
Opciones de vehículo
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
cinematic.enter | boolean | true | true previsualiza el vehículo seleccionado en su plaza y, al sacar un vehículo propio, el personaje camina hasta él y se sube con una cámara de seguimiento. false entrega el vehículo directamente, sin previsualización. |
nickname.enabled | boolean | true | false desactiva el guardado de apodos de vehículo. |
nickname.maxLength | number | 24 | Máximo de caracteres de un apodo. No pases de 24. |
forceBaseLivery.enabled | boolean | false | true fuerza la librea base en los vehículos de flota de los trabajos indicados abajo. |
forceBaseLivery.jobs | table | trabajos de ejemplo | Trabajos afectados, como nombretrabajo = true. Sustituye los ejemplos por los tuyos. |
Integraciones
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
finance.enabled | boolean | false | Muestra las cuotas pendientes de los vehículos financiados y deja al dueño pagar desde el garaje. Solo actúa mientras el recurso de abajo está en marcha. |
finance.resource | string | 'jg-dealerships' | Recurso que aporta los datos de financiación. |
speakers.enabled | boolean | false | Avisa al recurso de altavoces de que se ha sacado un vehículo con dueño, para que restaure sus altavoces. Solo actúa mientras el recurso de abajo está en marcha. |
speakers.resource | string | 'rahe-speakers' | Recurso al que se avisa. |
Llaves de vehículo · data/keys.lua
Cada llave es un ítem de inventario que lleva una matrícula. Quien la tiene puede cerrar, abrir y arrancar ese vehículo.
General
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | false apaga todo el sistema de llaves: sin llaves, sin teclas de cierre ni motor, sin robos, sin exports de llaves. Úsalo solo si otro recurso gestiona las llaves. |
item | string | 'vehiclekeys' | Ítem de inventario que hace de llave. |
lockDistance | number | 8.0 | Metros desde los que se puede cerrar o abrir un vehículo. |
giveOnTakeout | boolean | true | true entrega la llave cuando el dueño saca el vehículo de un garaje. |
removeOnStore | boolean | true | true retira la llave al guardar el vehículo. |
getKeysWhenEngineRunning | boolean | false | true da la llave a quien se sienta al volante de un vehículo con el motor encendido, cuando ese vehículo no tiene dueño. |
lockState | number | 2 | Estado de bloqueo de puertas de GTA que se aplica al cerrar. 2 = cerrado. Cualquier estado por encima de 1 cuenta como cerrado. |
immuneVehicles | string[] | modelo de ejemplo | Modelos en los que no se pueden buscar las llaves. |
noLockVehicles | string[] | {} | Modelos que no se pueden cerrar. La tecla de cierre siempre los deja abiertos. |
ignoreBicycles | boolean | true | true trata las bicicletas como noLockVehicles y las deja fuera de la búsqueda de llaves. |
Teclas y comandos
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
keybinds.toggleLocks | string | 'L' | Tecla por defecto para cerrar o abrir el vehículo más cercano. |
keybinds.toggleEngine | string | 'G' | Tecla por defecto para encender o apagar el motor desde el asiento del conductor. |
keybinds.searchKeys | string | 'H' | Tecla por defecto para buscar las llaves en un vehículo del que no tienes llave. |
commands.giveKey | string | 'givekey' | Nombre del comando que entrega tu llave a otro jugador. false elimina el comando. |
commands.adminKey | string | 'adminkey' | Nombre del comando de staff que crea una llave. false elimina el comando. |
Estas teclas son solo las de por defecto. Cada jugador puede reasignarlas en los ajustes de teclas de GTA.
Llaves compartidas por trabajo · sharedKeys
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | false desactiva las llaves compartidas. |
jobs | table | trabajos de ejemplo | Por trabajo: vehicles es la lista de modelos que cualquier miembro puede usar sin llave personal, y requireOnduty = true lo limita a los miembros de servicio. |
Los trabajos y modelos del archivo son ejemplos. Sustitúyelos por los tuyos.
Robos
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
hotwire.enabled | boolean | true | Deja que un jugador al volante sin llave registre el vehículo con la tecla de búsqueda. |
hotwire.minTime / maxTime | number | 20000 / 40000 | Duración mínima y máxima de la búsqueda, en milisegundos. |
hotwire.chance | number | 0.50 | Probabilidad, de 0 a 1, de que la búsqueda arranque el motor. 0.0 desactiva la búsqueda. |
hotwire.keysChance | number | 0.10 | Probabilidad de encontrar además la llave, en una búsqueda con éxito. Nunca en un vehículo con dueño. |
hotwire.timeBetween | number | 5000 | Milisegundos antes de que el jugador pueda volver a buscar. |
lockpick.normal.item | string | 'lockpick' | Ítem de la ganzúa básica. |
lockpick.normal.breakChance | number | 0.4 | Probabilidad, de 0 a 1, de que la ganzúa se rompa en cada uso. |
lockpick.advanced.item | string | 'advancedlockpick' | Ítem de la ganzúa avanzada. Su prueba de habilidad tiene tres pasos en vez de cuatro. |
lockpick.advanced.breakChance | number | 0.0 | Probabilidad de que se rompa la ganzúa avanzada. |
carjack.enabled | boolean | false | true deja robar un vehículo conducido por un NPC apuntando un arma al conductor. |
carjack.time | number | 7000 | Duración del robo, en milisegundos. |
carjack.cooldown | number | 10000 | Milisegundos entre intentos. |
carjack.chanceByWeaponGroup | table | por grupo de arma | Probabilidad de éxito, de 0 a 1, para cada grupo de arma. Un grupo que no esté en la lista siempre falla. |
carjack.noWeapons | string[] | cuerpo a cuerpo y arrojadizas | Armas con las que no se puede hacer el robo. |
Avisos a la policía · dispatch
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | false no envía avisos. |
resource | string | 'cuxial_police' | Recurso que recibe el aviso. '' lo desactiva. No se envía ningún aviso mientras ese recurso no esté en marcha. |
chance | number | 0.75 | Probabilidad de aviso durante el día, de 0 a 1. |
nightChance | number | 0.25 | Probabilidad de aviso durante la noche. |
nightStartHour | number | 18 | Hora a la que empieza la noche. Usa el reloj real de la máquina del servidor, no la hora del juego. |
nightDuration | number | 6 | Horas que dura la noche. |
cooldown | number | 10000 | Milisegundos antes de que el mismo jugador pueda provocar otro aviso. |
Los avisos se envían al forzar una cerradura con éxito, en una búsqueda con éxito y en un robo a mano armada con éxito. sounds y animations definen los sonidos, animaciones y props de la llave; funcionan tal como vienen.
Depósito · data/impound.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
jobs | string[] | trabajos de ejemplo | Trabajos que pueden incautar con el comando. También tienen acceso a todo depósito que no tenga su propia lista de trabajos en el panel. |
defaultPrice | number | 500 | Tasa sugerida en el formulario de incautación, y la que se usa cuando no se indica ninguna. |
command | string | 'impound' | Nombre del comando de incautación. |
maxDistance | number | 5.0 | Metros dentro de los cuales el comando busca el vehículo más cercano. |
Cómo funciona una incautación:
- El agente se coloca junto al vehículo y usa el comando. El formulario pide la tasa, el motivo, el depósito y si el dueño puede retirar el vehículo por su cuenta.
- Un vehículo sin dueño simplemente se elimina.
- Un vehículo ocupado no se puede incautar.
- En el depósito, el dueño paga la tasa y se lo lleva conduciendo o lo envía a un garaje público. Si el agente bloqueó la retirada, el dueño no puede recuperarlo solo: tiene que liberarlo un trabajo con acceso al depósito.
- Un trabajo autorizado puede liberar un vehículo y pedir a un jugador cercano que pague. Ese jugador ve un aviso y debe aceptar.
Alquiler · data/rental.lua
Los puntos de alquiler, su catálogo y sus precios se crean en el panel de administración. Este archivo define las reglas comunes a todos.
General
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | false apaga el alquiler. |
ticketItem | string | 'rentalticket' | Ítem de inventario que representa el contrato. Al usarlo se abre el recibo mientras el alquiler esté activo. |
giveTicketItem | boolean | true | false alquila sin entregar el ítem. Los contratos se consultan entonces en el punto de alquiler. |
platePrefix | string | 'RENT' | Prefijo de la matrícula de los vehículos alquilados, hasta 4 caracteres, seguido de 4 dígitos. |
maxActivePerPlayer | number | 2 | Alquileres activos que un jugador puede tener a la vez. 0 = sin límite. |
interactDistance | number | 8.0 | Metros que el servidor acepta entre el jugador y el punto para alquilar o devolver. |
markerDistance | number | 16.0 | Metros a los que aparece el marcador. |
openRange | number | 1.6 | Metros a los que un jugador a pie puede abrir el punto. |
returnRange | number | 5.0 | Metros a los que un jugador que conduce un alquiler puede devolverlo. |
sweepExpression | string | '* * * * *' | Cada cuánto se revisan los contratos activos, como expresión cron. Cada minuto por defecto. Un intervalo mayor retrasa los avisos hasta ese intervalo. |
license.resource | string | 'cuxial_license' | Recurso que aporta las licencias. Mientras no esté en marcha, las ofertas que exigen licencia quedan bloqueadas para todos. |
Devoluciones tardías · overdue, decay, condition
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
overdue.graceSeconds | number | 300 | Segundos tras el fin del contrato sin recargo. |
overdue.feePerHour | number | 250 | Recargo por hora o fracción de retraso. Se descuenta de la fianza, nunca más que la fianza. |
overdue.forfeitAfter | number | 3600 | Segundos de retraso tras los cuales el vehículo se retira y se pierde el resto de la fianza. |
decay.enabled | boolean | true | true daña el motor de un alquiler vencido mientras alguien lo conduce. |
decay.tickMs | number | 2000 | Milisegundos entre cada pérdida de salud del motor. |
decay.stages | table | 3 fases | Cada fase tiene after (segundos desde el fin del contrato), engineLoss (salud de motor perdida por tick, sobre 1000), fire = true para dejar el motor muerto y notify (clave de idioma del mensaje al empezar la fase). |
condition.minBodyHealth | number | 700.0 | Salud de carrocería, sobre 1000, por debajo de la cual el vehículo cuenta como dañado al devolverlo. |
condition.damageFee | number | 1500 | Importe que se descuenta de la fianza por un vehículo dañado. |
Si añades una fase con una clave notify nueva, añade la misma clave en locales/en.json y locales/es.json. Una fase sin notify empieza en silencio.
Avisos · warnings
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | false no envía avisos. |
beforeMinutes | number[] | { 30, 10, 0 } | Minutos antes del fin en los que se envía un aviso. 0 = al vencer el contrato. No uses pasos más cortos que el intervalo de sweepExpression. |
allowExtendFromMail | boolean | true | true añade al correo un botón que amplía el contrato una hora, al precio por hora. |
sender | string | configurable | Nombre que aparece como remitente del correo. |
Los avisos se envían por correo cuando lb-phone está en marcha y el jugador lleva un teléfono equipado. Si no, aparecen como notificación en pantalla.
Valores de un punto nuevo · defaults y blips
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
defaults.presets | number[] | { 1, 2, 4, 8, 24 } | Botones de duración, en horas, de un punto de alquiler nuevo. |
defaults.maxHours | number | 24 | Alquiler más largo de un punto nuevo, en horas. |
defaults.deposit | number | 2000 | Fianza sugerida para un punto nuevo. |
blips | table | por clase | Blip (sprite, color, scale) de cada clase de punto: ground, air, sea, mixed. |
Limpieza de vehículos · data/carwipe.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | false elimina la limpieza, sus comandos y sus exports. |
command | string | 'carwipe' | Nombre del comando que inicia una limpieza. |
cancelCommand | string | 'cancelwipe' | Nombre del comando que la cancela. |
adminAce | string | 'group.admin' | Grupo ACE que puede usar los dos comandos. |
countdown | number | 60 | Segundos de aviso cuando el comando se usa sin número. |
returnOwnedToGarage | boolean | true | true devuelve a su garaje los vehículos con dueño abandonados. false no toca los vehículos con dueño. |
protectNearPlayers | number | 30.0 | Los vehículos con dueño que tengan un jugador a esta distancia en metros no se tocan. |
deleteNPCVehicles | boolean | true | true elimina los vehículos sin dueño. false los deja. |
occupiedRadius | number | 5.0 | Radio, en metros, con el que la pasada del servidor considera en uso un vehículo sin dueño. |
auto.enabled | boolean | false | true ejecuta la limpieza de forma programada. |
auto.expression | string | '0 */3 * * *' | Programación como expresión cron: minuto, hora, día, mes, día de la semana. |
auto.countdown | number | 120 | Segundos de aviso antes de una limpieza programada. |
texts | table | textos de la cuenta atrás | Textos de la cuenta atrás, que se editan en este archivo. urgentThreshold es el número de segundos a partir del cual el contador pasa a urgente. |
protectedZones | table | zonas de ejemplo | Zonas donde nunca se elimina un vehículo. Sustituye los ejemplos por las tuyas. |
Cada zona protegida tiene un type y un name:
| Tipo | Campos |
|---|---|
'sphere' | coords, radius |
'box' | coords, size, rotation |
'poly' | points, minZ, maxZ |
Una limpieza trata los vehículos de flota de trabajo y los alquileres como vehículos sin dueño. Para conservarlos, añade a protectedZones los sitios donde se aparcan o pon deleteNPCVehicles = false.
Interacción y marcador · data/zones.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
interactDistance | number | 8.0 | Metros que el servidor acepta entre el jugador y el punto de acceso para guardar, sacar o devolver. |
markerDistance | number | 16.0 | Metros a los que aparece el marcador de un garaje. |
openRange | number | 1.6 | Metros a los que un jugador a pie puede abrir el garaje. |
storeRange | number | 5.0 | Metros a los que un conductor puede guardar o devolver el vehículo. |
occupiedRadius | number | 2.5 | Radio con el que se decide que una plaza está ocupada. |
marker.textures | table | por tipo | Textura del marcador para cada tipo de punto: public, depot, job, rental. |
marker.default | string | 'garage' | Textura de los tipos que no están en la lista. |
marker.size | table | 0.819 en cada eje | Tamaño del marcador. |
marker.rotation | table | x = 90, y = 180, z = 0 | Rotación del marcador. |
marker.color | table | blanco, a = 230 | Color y opacidad: r, g, b, a. |
marker.height | number | 0.0 | Altura del marcador sobre el punto de acceso. |
marker.bounce | table | activado | Movimiento de subida y bajada: enabled, amplitude, speed. |
marker.fallback | table | flecha azul | Marcador simple que se dibuja cuando no se puede cargar el archivo de texturas. |
Cambios habituales
Cobrar solo en efectivo
payment = {
account = 'cash',
allowCashFallback = false,
},Limitar los vehículos por garaje
Activa la opción y después pon el número en cada garaje desde el panel de administración.
capacity = {
enabled = true,
},Dejar incautar a policía y mecánicos
jobs = { 'police', 'mechanic' },Compartir las llaves de una flota de trabajo
sharedKeys = {
enabled = true,
jobs = {
police = { requireOnduty = true, vehicles = { 'police', 'police2' } },
},
},Limpieza diaria a las 4 de la mañana
auto = {
enabled = true,
expression = '0 4 * * *',
countdown = 120,
},