Todo lo que puedes ajustar está en tres archivos: shared/config.lua para el comportamiento, data/diseases.lua para el catálogo de enfermedades y data/pregnancy.lua para el embarazo. Reinicia el recurso después de cada cambio.
Los tiempos de etapas, tratamiento, vacuna e inmunidad son horas reales y siguen contando con el jugador desconectado. Los intervalos de los síntomas son minutos de juego: solo cuentan mientras el jugador está conectado.
General
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
debug | boolean | false | Imprime trazas en consola. También se activa poniendo la convar cuxial_diseases_debug en 1. |
Contagio por cercanía · proximity
Solo afecta a las enfermedades que tienen contagion.proximity en el catálogo.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | false | true hace que los enfermos contagien a quien tengan cerca. false desactiva del todo el contagio por cercanía. |
tickSeconds | number | 30 | Segundos entre comprobaciones de contagio. |
maskItem | string | nil | 'face_mask' | Ítem que protege a quien lo lleva en el inventario. nil = nada protege. |
maskProtection | number | 85 | Porcentaje del riesgo que quita la mascarilla, de 0 a 100. |
indoorMultiplier | number | 1.5 | Multiplicador del riesgo cuando el jugador expuesto está en un interior. |
Síntomas · symptoms
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | true hace que los jugadores sufran los síntomas. false mantiene enfermedades, etapas y tratamientos, sin ningún efecto en el juego, pérdida de vida incluida. |
skipWhenDead | boolean | true | true pausa los síntomas mientras el jugador está muerto o inconsciente. false los mantiene. |
sounds | boolean | true | true reproduce un quejido de voz en la tos y el vómito. false = sin sonido. |
Colapso · collapse
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
graceMinutes | number | 15 | Minutos de margen para el jugador que entra con un colapso ya vencido, para que antes pueda buscar atención médica. |
Horarios · cron
Formato cron: minuto, hora, día, mes, día de la semana.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
progression | string | '*/5 * * * *' | Cambios de etapa, tratamientos que caducan y rutinas de dosis rotas. |
pregnancy | string | '*/5 * * * *' | Meses de embarazo, inicio del parto y nacimiento automático. |
onboarding | string | '*/5 * * * *' | Plazos de vacunación vencidos y último recordatorio. |
cleanup | string | '0 4 * * *' | Borra casos curados antiguos, inmunidades vencidas y registro antiguo. |
Conservación · retention
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
curedCasesDays | number | 90 | Días que se conservan los casos curados y su registro. |
Inmunidad · immunity
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
defaultHours | number | 24 | Horas de inmunidad tras curarse, para las enfermedades que no indican cure.immunityHours. 0 = sin inmunidad. |
Plazo de vacunación · onboarding
Con enabled = true, cada personaje recibe un plazo para vacunarse contra una enfermedad. Si vence sin vacuna, la contrae.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | false | true aplica el plazo. false = sin plazo. |
hours | number | 24 | Horas para los personajes creados después de instalar el script. |
applyToExisting | boolean | false | true da también un plazo a los personajes que ya existían. false los deja exentos. |
hoursExisting | number | 72 | Horas para los personajes que ya existían, contadas desde su primera entrada. |
disease | string | id de ejemplo | Enfermedad que se contrae al vencer el plazo. Un id de data/diseases.lua. Si el id no existe, el plazo queda desactivado. |
vaccineItem | string | ítem de ejemplo | Ítem de la vacuna que se muestra al jugador en la app de salud. |
reminderHoursBefore | number | 2 | Horas antes del vencimiento a las que se envía el último recordatorio. |
Cómo se comporta:
- En el primer arranque el script guarda el id de personaje más alto de tu servidor. Los personajes por encima cuentan como nuevos; el resto, como existentes.
- El jugador conoce el plazo cuando se crea y recibe un recordatorio en cada entrada.
- Cualquier vacuna contra
diseasecumple el plazo. Un personaje que ya es inmune o ya está enfermo queda exento. - Si el plazo vence con el jugador desconectado, se infecta igualmente y la etapa empieza a contar en su siguiente entrada.
Diagnóstico · diagnosis
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
revealToPatient | boolean | false | false oculta al paciente el nombre de la enfermedad hasta que se la diagnostican; solo nota los síntomas. true lo muestra desde el principio. |
Un caso pasa a diagnosticado con una prueba positiva, desde la MDT de Cuxial Police, con /disease diagnose o con el export Diagnose.
Staff · admin
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
permission | string | 'admin' | Permiso del framework que se comprueba mediante cuxial_bridge al usar un comando. |
restricted | string | 'group.admin' | Grupo ACE al que se limitan los comandos /disease y /pregnancy. |
App del teléfono · app
Solo se usa con lb-phone en marcha.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | true registra la app en el teléfono. false = sin app. |
identifier | string | 'cuxial-salud' | Identificador interno de la app. |
name | string | texto | Nombre que se ve en el teléfono. |
description | string | texto | Descripción en la tienda de apps. |
developer | string | texto | Desarrollador que figura en la tienda de apps. |
defaultApp | boolean | false | true = viene instalada en todos los teléfonos. false = los jugadores la descargan de la tienda de apps. |
categories | string[] | { 'Lifestyle' } | Categorías de la tienda de apps. |
El catálogo de enfermedades · data/diseases.lua
El archivo devuelve una tabla en la que cada clave es el id de una enfermedad. El script no conoce ninguna enfermedad por su nombre: todo sale de este archivo. Las enfermedades incluidas son un punto de partida para editar, sustituir o borrar.
Los nombres, las etiquetas de etapa y las descripciones son texto libre de este archivo. Escríbelos en el idioma de tu servidor.
Enfermedad
| Campo | Tipo | Qué hace |
|---|---|---|
label | string | Nombre de la enfermedad. |
category | string | Grupo con el que se presenta, como 'respiratory' o 'digestive'. |
icon | string | Icono de Font Awesome, con el prefijo fa-. |
color | string (hex) | Color de la enfermedad en las interfaces. |
description | string | Texto para el médico. |
contagion | table | Cómo se contrae. Ver más abajo. |
incubationHours | number | Horas tras la infección en las que una prueba puede salir no concluyente. 0 = se detecta desde el primer momento. |
stages | lista | Etapas en orden. Obligatorio, al menos una. |
test | table | { item, inconclusiveChance, external }. Opcional. |
vaccine | table | { item, immunityHours } o { item, permanent = true }. Opcional. |
treatment | table | Dosis que controlan la enfermedad. Opcional. |
cure | table | { steps, immunityHours }. Plan de cura que aplica un médico. Opcional. |
contagion
| Campo | Qué hace |
|---|---|
proximity = { radius, chance, stages } | Se contrae por estar cerca de un jugador enfermo. radius en metros, chance como porcentaje por comprobación y stages es la lista de ids de etapa que contagian. Necesita proximity.enabled = true en el config. |
sexual = { chance, condomProtection } | Se contrae en un encuentro entre dos personajes, mediante el export RollContagion. Los dos son porcentajes. |
manual = true | Solo se contrae por un export, un comando o el plazo de vacunación. |
stages
| Campo | Tipo | Qué hace |
|---|---|---|
id | string | Identificador de la etapa. Único dentro de la enfermedad. |
label | string | Nombre de la etapa. |
severity | string | 'mild', 'moderate', 'severe' o 'critical'. |
durationHours | number | Horas reales hasta la etapa siguiente. Sin él, la etapa no avanza. |
lethal | boolean | true = etapa letal. Consulta Etapas letales. |
lethalAfterHours | number | Horas entre colapsos en una última etapa que es letal. 6 si se omite. |
symptoms | table | Síntomas de la etapa. {} = ninguno. |
symptoms
min y max son los minutos entre dos episodios; cada intervalo se elige al azar entre ambos.
| Síntoma | Forma | Efecto |
|---|---|---|
cough | { min, max } | Animación de tos con voz. No se reproduce dentro de un vehículo. |
dizziness | { min, max } | Tropiezo y una distorsión breve de la pantalla. No se reproduce dentro de un vehículo. |
vomit | { min, max } | Animación de vómito con voz. No se reproduce dentro de un vehículo. |
fatigue | { min, max } | Animación de quedarse sin aliento. No cambia la velocidad de movimiento. No se reproduce dentro de un vehículo. |
blur | { min, max } | Visión borrosa durante 2,5 segundos. |
shake | { min, max } | Temblor de cámara durante 2,5 segundos. |
healthDrain | { min, max, minDamage, maxDamage } | Quita entre minDamage y maxDamage puntos de vida. Por sí solo nunca mata: la vida se detiene en el mínimo. |
Un síntoma que no puede reproducirse porque el jugador va en un vehículo o está en mitad de otra animación se vuelve a intentar entre 30 y 60 segundos después.
test
| Campo | Tipo | Qué hace |
|---|---|---|
item | string | Ítem que comprueba esta enfermedad. Un mismo ítem puede comprobar varias a la vez. |
inconclusiveChance | number | Porcentaje de resultados no concluyentes. Solo se aplica durante incubationHours. |
external | boolean | true = el ítem lo gestiona otro recurso y este script no lo registra. |
Un resultado positivo marca el caso como diagnosticado.
vaccine
| Campo | Tipo | Qué hace |
|---|---|---|
item | string | Ítem de la vacuna. |
immunityHours | number | Horas de inmunidad. 168 si se omite. |
permanent | boolean | true = inmune para siempre. |
Una vacuna no tiene efecto en un personaje que ya tiene esa enfermedad.
treatment
| Campo | Tipo | Qué hace |
|---|---|---|
item | string | Ítem de una dosis. |
effectHours | number | Horas que dura una dosis. 6 si se omite. |
preventsProgression | boolean | true = con una dosis activa la etapa no avanza; cada dosis aplaza el plazo de la etapa el tiempo que cubre. |
suppressSymptoms | boolean | true = sin síntomas mientras hay una dosis activa. |
reducesSymptoms | number | boolean | Con una dosis activa, la tos y el vómito salen esa fracción de las veces (0.5 = la mitad) y el resto de síntomas desaparece. 0.33 si se omite. false = los síntomas no se reducen. |
minIntervalHours | number | Horas mínimas entre dos dosis. Sin él, la siguiente dosis solo se admite cuando la anterior se ha agotado. |
curesAfterDoses | number | Dosis que curan la enfermedad. Sin él la enfermedad es crónica: se controla, pero las dosis nunca la curan. |
resetAfterHours | number | Horas desde la última dosis a partir de las que la rutina se da por rota y el contador de dosis vuelve a cero. El doble de effectHours si se omite. 0 = nunca. Solo con curesAfterDoses. |
box = { item, count } | table | Un ítem de caja que al abrirse da count unidades de item. count vale 7 si se omite. |
cure
Un plan de pasos que un médico completa uno a uno. El último paso cura al paciente.
| Campo | Tipo | Qué hace |
|---|---|---|
steps[n].id | string | Identificador del paso. |
steps[n].label | string | Nombre del paso. |
steps[n].kind | string | 'item', 'procedure' o 'appointment'. Un paso 'item' cuenta además como una dosis del tratamiento. |
steps[n].item | string | Ítem que gasta el paso. Lo retira el recurso que aplica el paso. |
steps[n].hours | number | Horas reales de espera antes de este paso, contadas desde el paso anterior, o desde el diagnóstico en el primero. |
steps[n].minigame | string | Minijuego con el que EMS aplica el paso en Cuxial Police, por ejemplo 'injection'. Sin él, el paso se completa desde la ficha del paciente o la cita. |
steps[n].difficulty | number | Dificultad del minijuego: 1 fácil, 2 normal, 3 difícil. |
immunityHours | number | Horas de inmunidad al curarse. immunity.defaultHours si se omite, 0 = ninguna. Nunca acorta una inmunidad más larga ni una permanente. |
El plan de cura se aplica desde el MDT de Cuxial Police, o desde tu propio recurso con el export AdvanceCureStep. Las enfermedades con treatment.curesAfterDoses también se curan al tomar las dosis.
Etapas letales
Una etapa con lethal = true puede hacer que el paciente colapse de dos formas:
- Por vida. Cuando
healthDraindeja al paciente con la vida al mínimo, colapsa. Como mucho una vez cada cinco minutos. - Por tiempo. Solo en la última etapa de la enfermedad. Cada
lethalAfterHourssin un tratamiento activo, el paciente colapsa si está conectado.
Un colapso derriba al paciente mediante cuxial_medical. Sin ese recurso, el script solo envía el evento collapse, para que lo gestiones desde tu propio script de ambulancia. Consulta Exports y eventos.
Añade tu propia enfermedad
Añade la entrada
Abre data/diseases.lua y añade una clave nueva dentro de la tabla que devuelve. La clave es el id: una palabra sin espacios, de 40 caracteres como máximo.
bronquitis = {
label = 'Bronquitis',
category = 'respiratory',
icon = 'fa-lungs',
color = '#38bdf8',
description = 'Inflamación de las vías respiratorias. Jarabe cada ocho horas y una revisión.',
contagion = {
proximity = { radius = 2.5, chance = 3, stages = { 'aguda' } },
},
incubationHours = 3,
stages = {
{ id = 'inicial', label = 'Inicial', severity = 'mild', durationHours = 6, symptoms = {} },
{
id = 'aguda',
label = 'Aguda',
severity = 'moderate',
durationHours = 36,
symptoms = {
cough = { min = 4, max = 9 },
fatigue = { min = 5, max = 10 },
},
},
{
id = 'cronica',
label = 'Crónica',
severity = 'severe',
symptoms = {
cough = { min = 2, max = 5 },
healthDrain = { min = 10, max = 20, minDamage = 1, maxDamage = 2 },
},
},
},
test = { item = 'rapid_test', inconclusiveChance = 25 },
treatment = {
item = 'jarabe_bronquitis',
effectHours = 8,
preventsProgression = true,
reducesSymptoms = 0.5,
curesAfterDoses = 4,
},
cure = {
steps = {
{ id = 'nebulizador', label = 'Sesión de nebulizador', kind = 'procedure' },
{ id = 'revision', label = 'Revisión', kind = 'appointment', hours = 24 },
},
immunityHours = 48,
},
},Esta enfermedad se contagia por cercanía durante su etapa aguda, sale en el test rápido, se controla con un jarabe y se cura a las cuatro dosis. La última etapa no tiene durationHours, así que se queda ahí hasta que se trata.
Crea sus ítems
Cada ítem nuevo nombrado en la entrada necesita su definición en tu inventario. Aquí solo es nuevo el jarabe:
['jarabe_bronquitis'] = {
label = 'Jarabe para la bronquitis',
weight = 100,
stack = true,
close = true,
description = 'Una dosis cada ocho horas.',
server = {
export = 'cuxial_diseases.jarabe_bronquitis',
},
},Reinicia y prueba
Reinicia el servidor para que el inventario cargue el ítem nuevo. Comprueba la enfermedad con los comandos de staff:
/disease list
/disease infect <id> bronquitis
/disease stage <id> bronquitis aguda
/disease status <id>No cambies ni borres el id de una enfermedad que ya tengan los jugadores. Sus casos siguen en la base de datos, pero dejan de procesarse.
Cambios habituales
Activar el contagio por cercanía
proximity = {
enabled = true,
-- ...
},Que el paciente vea lo que tiene sin diagnóstico
diagnosis = {
revealToPatient = true,
},Hacer una enfermedad más lenta. Sube durationHours en cada etapa de data/diseases.lua.
Hacer una enfermedad crónica. Quita curesAfterDoses de su treatment.
Enfermedades sin efectos en el juego. Pon symptoms.enabled = false.
Embarazo · data/pregnancy.lua
El embarazo se sigue como un estado médico más. La concepción la decide otro recurso mediante los exports, o el staff con /pregnancy.
Presentación y tiempo
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
label, icon, color | string | texto, 'fa-baby', configurable | Cómo aparece el embarazo en las interfaces. |
time.daysPerMonth | number | 3 | Días reales que dura un mes de embarazo. |
time.months | number | 9 | Meses hasta el nacimiento. |
Fertilidad · fertility
La usa el export RollPregnancy.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
baseChance | number | 5 | Porcentaje base por encuentro sin protección. |
fertileMultiplier | number | 3.0 | Multiplicador dentro de la ventana fértil. |
cycleLength | number | 28 | Días del ciclo. |
fertileWindowStart, fertileWindowEnd | number | 12, 16 | Primer y último día de la ventana fértil. |
frequencyBonus | number | 0.1 | Aumento por cada encuentro reciente (0.1 = +10 %). |
frequencyMultMax | number | 1.5 | Multiplicador máximo que pueden alcanzar los encuentros recientes. |
recentCooldownHours | number | 1 | Horas desde el último encuentro por debajo de las que el porcentaje se reduce. |
recentReduction | number | 0.5 | Multiplicador que se aplica en ese caso. |
maxChance | number | 60 | Porcentaje máximo después de aplicarlo todo. |
Prueba · test
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
falsePositiveChance | number | 8 | Porcentaje de falsos positivos cuando no hay embarazo. |
minHoursToDetect | number | 12 | Horas desde la concepción a partir de las que la prueba lo detecta. |
Barriga · belly
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | false | true sustituye una prenda por una barriga según pasan los meses y la restaura tras el nacimiento. false = sin cambio de ropa. |
component | number | 11 | Componente de ropa que se sustituye: 11 torso, 8 camiseta interior, 3 brazos. |
models | string[] | { 'mp_f_freemode_01' } | Modelos de personaje en los que se aplica. |
stages | lista | cuatro entradas | { fromMonth, drawable, texture }: prenda que se usa a partir de ese mes. |
Antes de poner belly.enabled = true, pon en los valores drawable y texture de belly.stages la ropa de barriga de tu servidor.
Meses · months
Una entrada por mes, de [1] a [9].
| Campo | Tipo | Qué hace |
|---|---|---|
label | string | Nombre del mes. |
symptoms | table | Síntomas del mes, con la misma forma que en las enfermedades. |
message | string | Aviso que recibe la madre al empezar el mes. Una clave de locale o un texto literal. |
checkup | boolean | true = programa una cita de revisión ese mes. Necesita Cuxial Police y un embarazo ya conocido. |
Revisiones · checkups
Solo con Cuxial Police en marcha.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | true crea las citas automáticamente. false = las pide el médico a mano. |
kind, subtype | string | texto | Tipo y subtipo de la cita en la agenda de la MDT. |
hoursAfterMonthStart | number | 6 | Horas después del cambio de mes a las que se fija la cita. |
durationMin | number | 20 | Duración de la cita en minutos. |
Parto · labor
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | true = al llegar la fecha empiezan las contracciones. false = el bebé nace solo en la fecha prevista. |
durationMin | number | 30 | Minutos para ser atendida antes de que el parto ocurra fuera del hospital. |
contractionsEvery | table | { min = 2, max = 4 } | Minutos entre contracciones. |
contractionSeconds | number | 4 | Segundos que dura cada contracción. |
notifyFather | boolean | true | true avisa también al padre. false = solo a la madre. |
alertEms | boolean | true | true envía un aviso a EMS cuando empieza el parto. Necesita Cuxial Police. |
appointment | boolean | true | true crea la cita de parto en la agenda. Necesita Cuxial Police y un embarazo ya conocido. |
El parto solo empieza con la madre conectada.
