Tres archivos reúnen todo lo que puedes cambiar: shared/config.lua para el comportamiento, data/tasks.lua para la zona de comunitarias y sus tareas, y data/jail.lua para las celdas. Reinicia el recurso después de editar cualquiera de ellos.
General
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
debug | boolean | false | Muestra mensajes de depuración en la consola. La convar set cuxial_cmservices_debug 1 también los activa. |
ui.accent | string | configurable | Color de acento de la interfaz, en hexadecimal. |
admin.permission | string | 'mod' | Permiso del bridge que se comprueba para los comandos y el panel. En ESX es el grupo del jugador; 'admin' deja pasar también a superadmin. |
admin.reasonMax | number | 250 | Longitud máxima del motivo, en caracteres. |
Comandos · commands
Cada comando tiene un name (lo que se escribe, sin /) y un grupo ACE en restricted. Pon en restricted el grupo de tu staff.
| Clave | Nombre por defecto | ACE por defecto | Qué hace |
|---|---|---|---|
panel | sanciones | group.mod | Abre el panel de sanciones. |
comserv | comserv | group.mod | Pone servicios comunitarios. |
endComserv | endcomserv | group.mod | Retira los servicios comunitarios. |
jail | jaila | group.mod | Envía a un jugador a la cárcel administrativa. |
endJail | endjail | group.mod | Libera a un jugador de la cárcel. |
taskCoords | taskcoords | group.mod | Herramienta de mapeo de tareas. |
Servicios comunitarios · comserv
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
maxTasks | number | 1000 | Máximo de tareas por sanción desde comandos y panel. |
maxApiTasks | number | 10000 | Máximo de tareas que puede sumar una llamada a AddCommunityService. |
exit | vector3 | ejemplo | Dónde aparece el jugador al cumplir o al retirarle la sanción. |
taskRadius | number | 4.0 | Distancia horizontal en metros al centro de la tarea que acepta el servidor, más un margen de 1,5 m. |
taskHeight | number | 4.0 | Diferencia de altura máxima en metros con la tarea. |
interactDistance | number | 1.5 | Distancia en metros al borde del objeto desde la que sale el aviso E, por cualquier lado. |
interactMaxReach | number | 2.2 | Radio máximo en metros que se cuenta como tamaño del objeto. Mantiene el aviso cerca en objetos muy grandes. |
interactKey | number | 38 | Control que empieza la tarea. 38 es E. |
minDurationRatio | number | 0.8 | Fracción de la duración de la tarea (0 a 1) que debe pasar antes de que el servidor la dé por hecha. |
zoneDebug | boolean | false | Dibuja las paredes de la zona. Úsalo solo mientras ajustas el polígono. |
disableControls | number[] | { 24, 25 } | Controles bloqueados dentro de la zona. 24 disparar, 25 apuntar. |
restoreStamina | boolean | true | Recupera la estamina dentro de la zona. |
marker | table | ver abajo | Marcador sobre el objeto de la tarea: type, scale, height sobre el objeto, color (RGBA) y drawDistance en metros. |
outline | table | enabled = true | Resalta el objeto de la tarea. enabled (true / false) y color (RGBA). |
blip | table | sprite = 1, scale = 0.8, route = true | Blip de la tarea en el mapa. route = true dibuja la ruta GPS. |
interactIcon | string | 'hammer' | Icono del aviso E, nombre de Font Awesome sin prefijo. |
El marcador por defecto es type = 2, scale = 0.35, height = 0.5, drawDistance = 40.0.
El aviso E sale a interactDistance del borde del objeto, mientras que el servidor mide taskRadius + 1,5 m desde el centro de la tarea. Mantén el aviso dentro de la distancia que acepta el servidor: si subes interactDistance o interactMaxReach, sube también taskRadius.
Cárcel · jail
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
maxMinutes | number | 1440 | Máximo de minutos por sanción. Vale para comandos, panel y AddJail. |
exit | vector3 | ejemplo | Dónde aparece el jugador al cumplir o al retirarle la cárcel. |
distance | number | 50.0 | Radio en metros alrededor de la celda. Más lejos, el jugador vuelve a ella. |
tick | number | 60 | Segundos por minuto cumplido. 60 es tiempo real; valores menores acortan la cárcel. |
invincible | boolean | true | El jugador no recibe daño mientras está en la cárcel. |
unarmed | boolean | true | Quita el arma de la mano del jugador. |
disableControls | number[] | { 24, 25 } | Controles bloqueados en la cárcel. |
Comprobaciones del servidor y límites
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
guard.enabled | boolean | true | El servidor comprueba la posición de los sancionados y devuelve a quien esté fuera de la zona o demasiado lejos de la celda. |
guard.interval | number | 5000 | Milisegundos entre comprobaciones. Mínimo 1000. |
distance.hz | number | 4 | Actualizaciones por segundo de la distancia en pantalla. Máximo 4. |
distance.step | number | 1.0 | Cambio mínimo en metros antes de actualizar la distancia en pantalla. |
limits.task | table | { 4, 10000 } | Peticiones de tarea permitidas por jugador: { llamadas, ventana en ms }. |
limits.state | table | { 6, 10000 } | Peticiones de estado permitidas por jugador. |
limits.admin | table | { 30, 10000 } | Peticiones del panel permitidas por miembro del staff. |
Chat y registros
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
chat.enabled | boolean | true | Anuncia en Cuxial Chat las sanciones puestas y cumplidas. |
chat.resource | string | 'cuxial_chat' | Nombre del recurso de chat. |
chat.channel | string | 'sancion' | id del canal de Cuxial Chat para los avisos. |
chat.color | string | '#f59e0b' | Color de la etiqueta del mensaje. |
logs.enabled | boolean | true | Envía registros a Discord cuando la convar del webhook está puesta. |
logs.convar | string | 'cuxial_cmservices_webhook' | Nombre de la convar con la URL del webhook. |
Zona de trabajo y tareas · data/tasks.lua
Zona · zone
| Campo | Tipo | Qué hace |
|---|---|---|
entry | vector3 | Dónde aparece el jugador al empezar la sanción, y adonde vuelve si sale. |
points | vector3[] | Esquinas del polígono que rodea la zona de trabajo, en orden. Al menos tres. |
thickness | number | Altura del polígono en metros. |
Deja entry y todas las tareas dentro del polígono.
Categorías · types
Las cinco categorías son fijas: construction, gardening, cleaning, maintenance y repairs. Cada una tiene un color de blip y ruta (id de color de GTA) y un icon para el panel en pantalla.
Tareas · zones
zones guarda una lista de tareas por categoría. Se elige una tarea al azar entre las categorías que tienen al menos una. Una categoría con la lista vacía se salta.
repairs = {
{
coords = vec3(1655.45, 2531.67, 44.38),
name = 'zone_repairs_light_pole_a',
object = { model = 2135655372, coords = vec3(1655.45, 2531.67, 44.38) },
progress = {
label = 'progress_repairing_light_pole',
duration = 9000,
anim = { dict = 'mini@repair', clip = 'fixing_a_ped' },
},
},
},| Campo | Tipo | Qué hace |
|---|---|---|
coords | vector3 | Centro de la tarea. Lo usan el blip y la comprobación de distancia del servidor. |
name | string | Clave de traducción del nombre de la tarea, que se ve en pantalla y en el aviso. |
object | table | Opcional. model (hash) y coords del objeto del mundo que se resalta. El aviso se mide desde su borde. |
progress.label | string | Clave de traducción del texto de la barra de progreso. |
progress.duration | number | Duración en milisegundos. |
progress.anim | table | Opcional. dict, clip y flag (49 por defecto). |
progress.prop | table | Opcional. Objeto en la mano: model, bone (60309 por defecto), pos y rot. |
scenario | string | Opcional. Escenario de GTA que se reproduce en lugar de anim. |
Usa la misma posición en coords y en object.coords. La forma más rápida de obtener las dos es /taskcoords, que copia una tarea completa lista para pegar (consulta Comandos y permisos).
Añade las claves de name y progress.label a locales/en.json y locales/es.json:
"zone_repairs_light_pole_a": "Reparaciones - Farola A",
"progress_repairing_light_pole": "Reparando farola..."Celdas · data/jail.lua
cells es una lista de posiciones. A cada sancionado le toca una al azar.
return {
cells = {
vec3(1685.75, 2443.50, 45.84),
vec3(1678.60, 2443.34, 45.84),
},
}Cambios habituales
Mover la zona de comunitarias
- Usa
/taskcoordsy copia la posición del suelo de cada esquina de la zona nueva. - Sustituye
zone.pointsyzone.entryendata/tasks.lua. - Pon
comserv.zoneDebug = true, reinicia y recorre las paredes. Vuelve a ponerlo enfalsecuando el polígono esté bien.
Acortar la cárcel
Baja jail.tick. Con 30, cada minuto de la sanción se cumple en 30 segundos.
Usar el grupo de tu staff
Pon en admin.permission el permiso del bridge de tu staff y en restricted de cada comando su grupo ACE.
