Cuxial Gym se ajusta en tres sitios: shared/config.lua para el comportamiento, los archivos de data/ para los valores de fábrica y los editores en juego para todo lo que vive en la base de datos. Reinicia el recurso después de cambiar un archivo.
Las zonas, los equipos, los puntos, el equilibrio, los suplementos y las reglas de negocio se editan en juego con /gymcreator y /gymadmin. Lo que guardes ahí queda en la base de datos y sustituye a la sección correspondiente de los archivos de data/.
General
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
debug | boolean | false | Muestra trazas y los errores de SQL con detalle. También se activa poniendo la convar cuxial_gym_debug a 1. |
Módulos · modules
Interruptores de partes enteras del script. true carga el módulo, false lo deja fuera.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
business | boolean | true | Negocios. Con false tampoco cargan la tienda, los puntos de negocio, los ayudantes ni /gymadmin. |
shop | boolean | true | Tienda pública de cada negocio. |
helper | boolean | true | Ayudantes: empleados que ayudan a un jugador que entrena. |
creator | boolean | true | Creador de zonas y comando /gymcreator. |
admin | boolean | true | Panel de administración de negocios y comando /gymadmin. |
globalModels | boolean | true | Props del mapa que sirven de equipo fuera de cualquier zona. |
Interfaz · ui
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
accent | string (hex) | configurable | Color de acento de los paneles. |
currency.symbol | string | '$' | Símbolo de moneda junto a los importes. |
currency.locale | string | 'en-US' | Formato numérico de los importes, como código de idioma ('en-US', 'es-ES'...). |
Sonidos de la interfaz · sounds
Volúmenes de 0.0 a 1.0.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
master | number | 1.0 | Multiplica a todos los demás. |
click | number | 0.35 | Sonido de clic. |
start | number | 0.6 | Sonido de inicio. |
success | number | 0.7 | Sonido de acierto. |
fail | number | 0.7 | Sonido de fallo. |
Sonidos del ejercicio · audio
Sonidos que suenan en el mundo al entrenar. Vienen de cuxial_gym_assets.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | false silencia todos los sonidos del ejercicio. |
networked | boolean | false | true hace que los jugadores cercanos oigan los golpes y las respiraciones del personaje. |
volume | number | 1.0 | Factor de volumen de 0.0 a 1.0. |
debugCommand | string | 'gymaudio' | Comando de prueba; solo se registra en modo debug. |
breath.every | number | 3 | El personaje respira una vez cada tantas repeticiones. |
breath.delayMs | number | 600 | Milisegundos desde que empieza la repetición hasta que suena la respiración. |
banks, breath.male, breath.female, rep y loops contienen los nombres de los sonidos que se entregan con los assets. Déjalos como están.
Registros · logs
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
convar | string | 'cuxial_gym_webhook' | Nombre de la convar que guarda el webhook de Discord. La URL va en server.cfg. |
Staff · admin y commands
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
admin.ace | string | 'cuxial_gym.admin' | Permiso ACE que abre el panel de administración de negocios. |
admin.creatorAce | string | 'cuxial_gym.creator' | Permiso ACE que abre el creador de zonas. |
admin.permission | string | 'admin' | Permiso del framework que concede los dos. |
admin.auditDays | number | 60 | Días que se conserva la auditoría de staff. |
commands.admin.name | string | false | 'gymadmin' | Comando del panel de administración de negocios. false lo quita. |
commands.creator.name | string | false | 'gymcreator' | Comando del creador de zonas. false lo quita. |
Teclas · keys
Teclas por defecto. Cada jugador puede cambiarlas en los ajustes de teclas de GTA.
| Opción | Por defecto | Qué hace |
|---|---|---|
cancel | 'X' | Deja la serie, o deja de ayudar. |
accept | 'Y' | Acepta una oferta o una llamada. |
decline | 'N' | La rechaza. |
peek | 'RSHIFT' | Vuelve al creador después de mirar el mundo. |
gizmoConfirm | 'RETURN' | Confirma una colocación. |
gizmoCancel | 'BACK' | La cancela. |
gizmoGround | 'LMENU' | Pega el objeto al suelo. |
gizmoCursor | 'G' | Activa o desactiva el cursor al colocar. |
Cámara de colocación · gizmo
Cámara opcional que se usa al colocar un objeto con el gizmo.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
distance | number | 5.0 | Metros de distancia al objeto. |
height | number | 2.0 | Metros por encima del objeto. |
fov | number | 50.0 | Campo de visión, en grados. |
transitionMs | number | 500 | Transición de la cámara, en milisegundos. |
Items y modelos · items, models
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
items.imageUrl | string | 'nui://ox_inventory/web/images/%s.webp' | De dónde se leen las imágenes de los items. %s es el nombre del item. |
models.pointProps | string[] | el prop de la pantalla | Props que el staff puede elegir para un punto de interacción. |
models.pointPeds | string[] | un ped de ejemplo | Modelos de ped que el staff puede elegir para un punto de interacción. |
Mundo · world, globalModels, pedClear, points
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
world.spawnDistance | number | 150.0 | Metros a los que aparecen los equipos de una zona. |
world.despawnDistance | number | 200.0 | Metros a los que se retiran. |
world.tickMs | number | 1000 | Milisegundos entre comprobaciones de distancia. |
world.removedPropsMs | number | 5000 | Milisegundos entre pasadas de borrado de los props del mapa que retira una zona. |
world.removedPropsDistance | number | 100.0 | Radio de esa pasada, en metros. |
world.blipColors | number[] | 30 colores | Colores de blip que ofrece el creador. |
globalModels.range | number | 75.0 | Radio, en metros, en el que se buscan props del mapa como equipo. |
globalModels.intervalMs | number | 3000 | Milisegundos entre búsquedas. |
pedClear.intervalMs | number | 5000 | Milisegundos entre pasadas de limpieza de peds ambientales en las zonas. |
pedClear.edgeBuffer | number | 5.0 | Metros extra sobre el radio de cada área de limpieza. |
points.spawnDistance | number | 75.0 | Metros a los que existe el prop o ped de un punto. |
points.maxDistance | number | 5.0 | Distancia máxima que acepta el servidor para una acción. |
points.targetDistance | number | 2.0 | Distancia de interacción de un punto que no trae radio propio. |
Panel del gimnasio · panel y tablet
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
panel.maxDistance | number | 10.0 | Metros máximos a un punto del menú del gimnasio para abrir el panel o comprar un pase. |
panel.leaderboardSize | number | 10 | Filas de cada clasificación. |
panel.leaderboardSeconds | number | 60 | Segundos que se guarda en caché una clasificación. |
tablet.dui | boolean | true | true dibuja el panel en el prop de la pantalla del mundo. false lo abre siempre como interfaz a pantalla completa. |
tablet.range | number | 25.0 | Metros a los que la pantalla muestra su imagen de reposo. La imagen de reposo lleva la marca de la clave de locale UI_TABLET_BRAND, GYM por defecto; edítala en locales/. |
tablet.prewarmDistance | number | 6.0 | Metros a los que la pantalla empieza a cargar el panel. |
tablet.maxDistance | number | 3.0 | Metros máximos para abrir la pantalla y seguir en ella. |
tablet.cursor.mode | string | 'native' | 'native' proyecta el cursor del juego sobre la pantalla. 'virtual' dibuja un puntero que se mueve con el ratón. |
tablet.cursor.sensitivity | number | 1.0 | Velocidad del puntero virtual. |
tablet.wheelStep | number | 120 | Unidades de desplazamiento por muesca de la rueda. Un valor negativo lo invierte. |
tablet.exitKeys | number[] | Esc, Retroceso y mando | Controles del juego que cierran la pantalla. |
tablet.model, txd, texture, offset, yaw, pitch, width, height, idle, session y camera corresponden al prop de pantalla que se entrega con los assets. No los cambies.
Minijuegos · minigame
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
ui.position | string | 'bottom-right' | Esquina donde se dibuja el minijuego: 'bottom-right', 'bottom-left', 'top-right', 'top-left' o 'center'. |
ui.scale | number | 0.8 | Tamaño del minijuego. 1 es su tamaño natural. |
ui.offset | table | { x = 24, y = 24 } | Separación del borde de la pantalla, en píxeles. |
Membresías · membership
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
account | string | 'cash' | Cuenta de la que se cobran los pases. |
rewardCooldownSeconds | number | 86400 | Segundos entre dos recompensas diarias. |
maxPackages | number | 10 | Máximo de paquetes por zona. |
Ejercicio · exercise
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
startDistance | number | 4.0 | Metros máximos al equipo para empezar. |
maxDistance | number | 6.0 | Más allá de esta distancia la serie termina. |
minRepMs | number | 750 | Milisegundos mínimos entre dos repeticiones. |
minigameMinMs | number | 3000 | Duración mínima que el servidor acepta para un minijuego. |
autoPassMs | number | 500 | Duración mínima de una repetición con autopase. |
toleranceMs | number | 250 | Tolerancia de red que se aplica a esos mínimos. |
idleTimeoutSeconds | number | 120 | Segundos sin repeticiones tras los que el servidor cierra la serie. |
defaultMaxReps | number | 20 | Número de repeticiones con el que se escala la dificultad cuando el ejercicio no tiene límite. |
anchorModel | string | 'prop_tick' | Prop interno que sincroniza el ejercicio. Déjalo como está. |
Estadísticas, ventajas y suplementos
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
stats.baseMaxHealth | number | 200 | Vida máxima base del personaje. El bono de fuerza se suma encima. |
stats.xpBonusToStats | boolean | false | true aplica el bono de XP de suplementos y racha a la XP de fuerza y agilidad. false lo aplica solo a la XP de ventajas. |
perks.enabled | boolean | false | true activa el árbol de ventajas: entrenar da puntos de ventaja para gastar en bonos permanentes. Con false las ventajas no dan nada y no se pueden desbloquear. |
perks.xpPerPoint | number | 500 | XP necesaria para un punto de ventaja. |
supplements.useMs | number | 4000 | Milisegundos que se tarda en tomar un suplemento. |
supplements.stackSame | boolean | true | true permite que dos tomas del mismo suplemento se acumulen. false hace que una toma nueva sustituya a la anterior. |
supplements.anim | table | animación de comer | Animación al tomarlo: dict y clip. |
Ayudantes, tutorial y vistas previas
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
helper.maxDistance | number | 3.0 | Metros máximos entre el ayudante y el jugador que entrena. |
helper.animSwapMs | number[] | { 10000, 15000 } | Milisegundos mínimos y máximos entre cambios de animación del ayudante. |
tutorial.enabled | boolean | true | Valor de fábrica de la visita guiada del panel del gimnasio. El staff puede cambiarlo en juego. |
previews.enabled | boolean | false | true muestra un vídeo de vista previa de cada ejercicio en el panel. |
previews.baseUrl | string | '' | Dirección base de los vídeos. La dirección final es baseUrl + clip + extension. |
previews.extension | string | '.mp4' | Extensión de los vídeos. |
previews.clips | table | {} | Nombre de clip por ejercicio. |
Taquillas y vestuario
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
locker.slots | number | 20 | Huecos de la taquilla personal de cada zona. |
locker.weight | number | 30000 | Peso máximo, en gramos. |
cloakroom.handlers | table | un armario | Acciones que puede ejecutar un punto de vestuario. Cada entrada tiene un label (clave de idioma) y export = { 'recurso', 'función' } o event = 'eventoDeCliente'. |
Para abrir tu propio menú de ropa desde un punto de vestuario:
cloakroom = {
handlers = {
wardrobe = { label = 'cloak_wardrobe', event = 'my_clothing:client:openWardrobe' },
},
},Negocios · business y shop
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
business.account | string | 'cash' | Cuenta de los depósitos, las retiradas y el pago de bonus. |
business.lowStock | number | 5 | Nivel de stock a partir del cual el panel avisa de stock bajo. |
business.offerDistance | number | 10.0 | Metros máximos para ofrecer un contrato o un traspaso. |
business.gradeColor | string (hex) | '#4299e1' | Color de un rango recién creado. |
business.maxHourlyWage | number | 5000 | Sueldo por hora más alto que puede tener un rango. |
business.maxGrades | number | 12 | Número máximo de rangos. |
business.historySize | number | 100 | Transacciones que se guardan en memoria por negocio. |
business.historyDays | number | 90 | Días que se conservan las transacciones en la base de datos. |
business.offerSeconds | number | 60 | Segundos hasta que caduca una oferta. |
business.stash.slots | number | 50 | Huecos de los alijos del negocio. |
business.stash.weight | number | 100000 | Peso máximo, en gramos. |
business.callWorker.cooldownSeconds | number | 600 | Segundos entre dos llamadas al personal de un negocio. |
business.callWorker.seconds | number | 15 | Segundos que tiene el personal para aceptar una llamada. |
business.workers.restockAmount | number | 5 | Unidades que pide el trabajador de reposición cada vez. |
business.workers.collectorSeconds | number | 900 | Segundos entre pasadas del trabajador recolector. |
business.workers.periodSeconds | number | 86400 | Duración del periodo por el que se cobran los trabajadores automáticos. |
shop.account | string | 'cash' | Cuenta de la que se cobran las compras de la tienda. |
shop.maxCartLines | number | 30 | Líneas máximas de un carrito. |
shop.maxAmount | number | 100 | Unidades máximas por línea. |
Límites · limits
Topes de lo que el staff puede guardar desde los editores.
| Opción | Por defecto | Limita |
|---|---|---|
equipmentPerZone | 300 | Equipos por zona |
removedPropsPerZone | 500 | Props del mapa retirados por zona |
pointsPerOwner | 50 | Puntos de interacción por zona o negocio |
pedClearAreas | 10 | Áreas de limpieza de peds por zona |
presets | 50 | Presets de minijuegos |
supplements | 64 | Suplementos |
effects | 8 | Efectos por suplemento |
warehouseItems | 200 | Items del catálogo de almacén |
achievements | 200 | Logros |
compat relaciona los nombres de habilidad que usan recursos antiguos con las dos estadísticas. Mira Exports y eventos.
Archivos de datos · data/
Valores de fábrica. Casi todos se editan también en juego; cuando una sección se guarda desde un editor, el archivo deja de leerse para esa sección. En el creador, Restablecer valores vuelve a los valores del archivo.
| Archivo | Contiene | Editable en juego |
|---|---|---|
data/defaults.lua | Límite de fatiga, niveles y bonos de las estadísticas, pérdida diaria, bonos de racha | Creador, Configuración del gimnasio |
data/bodyparts.lua | Tope de fatiga, recuperación por minuto y pesos de XP de las siete partes del cuerpo | Creador, Configuración del gimnasio |
data/achievements.lua | Los 45 logros | Creador, Configuración del gimnasio |
data/supplements.lua | Item, duración y efectos de cada suplemento | Creador, Suplementos |
data/business.lua | Rangos de inicio, paleta de colores, ajustes de negocio, progresión, catálogo de almacén, trabajadores y categorías de tienda | Administración de negocios, salvo rangos y paleta |
data/perks.lua | El árbol de ventajas | No |
data/minigames.lua | Ajustes de cada minijuego por nivel de dificultad | No |
data/exercises.lua y data/exercises/*.lua | Lista de ejercicios y definición de cada uno | Los valores por repetición, en Configuración del gimnasio |
data/helper.lua | Animaciones del ayudante | No |
data/names.lua | Nombres de proveedor al azar que aparecen en los pedidos de almacén | No |
data/seed.lua | Zona de ejemplo y presets de minijuegos que se insertan en el primer arranque | No |
data/seed.lua se lee una sola vez, cuando la tabla de zonas está vacía. Editarlo después no cambia nada. Los archivos de ejercicios definen animaciones y posiciones de props que corresponden a los assets entregados: cambia los números de arriba (xpPerRep, fatiguePerRep, maxReps, repInterval) y deja el resto.
Cambios habituales
Cobrar las membresías y la tienda del banco
membership = { account = 'bank', rewardCooldownSeconds = 86400, maxPackages = 10 },
shop = { account = 'bank', maxCartLines = 30, maxAmount = 100 },Gimnasios sin negocios
modules = { business = false, shop = false, helper = false, creator = true, admin = false, globalModels = true },Abrir siempre el panel a pantalla completa
Pon dui = false dentro del bloque tablet y no toques los demás valores.
Añadir un suplemento
- Añade el item a tu inventario.
- Abre
/gymcreator, entra en Suplementos, añade el item y define su duración y sus efectos.
Cambiar el nombre de los comandos
commands = { admin = { name = 'gymbiz' }, creator = { name = 'gymzones' } },