Skip to content

Configuración

Todas las opciones de Cuxial Diseases explicadas: config, catálogo de enfermedades, cómo añadir una enfermedad y embarazo.

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ónTipoPor defectoQué hace
debugbooleanfalseImprime 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ónTipoPor defectoQué hace
enabledbooleanfalsetrue hace que los enfermos contagien a quien tengan cerca. false desactiva del todo el contagio por cercanía.
tickSecondsnumber30Segundos entre comprobaciones de contagio.
maskItemstring | nil'face_mask'Ítem que protege a quien lo lleva en el inventario. nil = nada protege.
maskProtectionnumber85Porcentaje del riesgo que quita la mascarilla, de 0 a 100.
indoorMultipliernumber1.5Multiplicador del riesgo cuando el jugador expuesto está en un interior.

Síntomas · symptoms ​

OpciónTipoPor defectoQué hace
enabledbooleantruetrue 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.
skipWhenDeadbooleantruetrue pausa los síntomas mientras el jugador está muerto o inconsciente. false los mantiene.
soundsbooleantruetrue reproduce un quejido de voz en la tos y el vómito. false = sin sonido.

Colapso · collapse ​

OpciónTipoPor defectoQué hace
graceMinutesnumber15Minutos 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ónTipoPor defectoQué hace
progressionstring'*/5 * * * *'Cambios de etapa, tratamientos que caducan y rutinas de dosis rotas.
pregnancystring'*/5 * * * *'Meses de embarazo, inicio del parto y nacimiento automático.
onboardingstring'*/5 * * * *'Plazos de vacunación vencidos y último recordatorio.
cleanupstring'0 4 * * *'Borra casos curados antiguos, inmunidades vencidas y registro antiguo.

Conservación · retention ​

OpciónTipoPor defectoQué hace
curedCasesDaysnumber90Días que se conservan los casos curados y su registro.

Inmunidad · immunity ​

OpciónTipoPor defectoQué hace
defaultHoursnumber24Horas 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ónTipoPor defectoQué hace
enabledbooleanfalsetrue aplica el plazo. false = sin plazo.
hoursnumber24Horas para los personajes creados después de instalar el script.
applyToExistingbooleanfalsetrue da también un plazo a los personajes que ya existían. false los deja exentos.
hoursExistingnumber72Horas para los personajes que ya existían, contadas desde su primera entrada.
diseasestringid de ejemploEnfermedad que se contrae al vencer el plazo. Un id de data/diseases.lua. Si el id no existe, el plazo queda desactivado.
vaccineItemstringítem de ejemploÍtem de la vacuna que se muestra al jugador en la app de salud.
reminderHoursBeforenumber2Horas 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 disease cumple 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ónTipoPor defectoQué hace
revealToPatientbooleanfalsefalse 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ónTipoPor defectoQué hace
permissionstring'admin'Permiso del framework que se comprueba mediante cuxial_bridge al usar un comando.
restrictedstring'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ónTipoPor defectoQué hace
enabledbooleantruetrue registra la app en el teléfono. false = sin app.
identifierstring'cuxial-salud'Identificador interno de la app.
namestringtextoNombre que se ve en el teléfono.
descriptionstringtextoDescripción en la tienda de apps.
developerstringtextoDesarrollador que figura en la tienda de apps.
defaultAppbooleanfalsetrue = viene instalada en todos los teléfonos. false = los jugadores la descargan de la tienda de apps.
categoriesstring[]{ '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 ​

CampoTipoQué hace
labelstringNombre de la enfermedad.
categorystringGrupo con el que se presenta, como 'respiratory' o 'digestive'.
iconstringIcono de Font Awesome, con el prefijo fa-.
colorstring (hex)Color de la enfermedad en las interfaces.
descriptionstringTexto para el médico.
contagiontableCómo se contrae. Ver más abajo.
incubationHoursnumberHoras tras la infección en las que una prueba puede salir no concluyente. 0 = se detecta desde el primer momento.
stageslistaEtapas en orden. Obligatorio, al menos una.
testtable{ item, inconclusiveChance, external }. Opcional.
vaccinetable{ item, immunityHours } o { item, permanent = true }. Opcional.
treatmenttableDosis que controlan la enfermedad. Opcional.
curetable{ steps, immunityHours }. Plan de cura que aplica un médico. Opcional.

contagion ​

CampoQué 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 = trueSolo se contrae por un export, un comando o el plazo de vacunación.

stages ​

CampoTipoQué hace
idstringIdentificador de la etapa. Único dentro de la enfermedad.
labelstringNombre de la etapa.
severitystring'mild', 'moderate', 'severe' o 'critical'.
durationHoursnumberHoras reales hasta la etapa siguiente. Sin él, la etapa no avanza.
lethalbooleantrue = etapa letal. Consulta Etapas letales.
lethalAfterHoursnumberHoras entre colapsos en una última etapa que es letal. 6 si se omite.
symptomstableSíntomas de la etapa. {} = ninguno.

symptoms ​

min y max son los minutos entre dos episodios; cada intervalo se elige al azar entre ambos.

SíntomaFormaEfecto
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 ​

CampoTipoQué hace
itemstringÍtem que comprueba esta enfermedad. Un mismo ítem puede comprobar varias a la vez.
inconclusiveChancenumberPorcentaje de resultados no concluyentes. Solo se aplica durante incubationHours.
externalbooleantrue = el ítem lo gestiona otro recurso y este script no lo registra.

Un resultado positivo marca el caso como diagnosticado.

vaccine ​

CampoTipoQué hace
itemstringÍtem de la vacuna.
immunityHoursnumberHoras de inmunidad. 168 si se omite.
permanentbooleantrue = inmune para siempre.

Una vacuna no tiene efecto en un personaje que ya tiene esa enfermedad.

treatment ​

CampoTipoQué hace
itemstringÍtem de una dosis.
effectHoursnumberHoras que dura una dosis. 6 si se omite.
preventsProgressionbooleantrue = con una dosis activa la etapa no avanza; cada dosis aplaza el plazo de la etapa el tiempo que cubre.
suppressSymptomsbooleantrue = sin síntomas mientras hay una dosis activa.
reducesSymptomsnumber | booleanCon 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.
minIntervalHoursnumberHoras mínimas entre dos dosis. Sin él, la siguiente dosis solo se admite cuando la anterior se ha agotado.
curesAfterDosesnumberDosis que curan la enfermedad. Sin él la enfermedad es crónica: se controla, pero las dosis nunca la curan.
resetAfterHoursnumberHoras 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 }tableUn í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.

CampoTipoQué hace
steps[n].idstringIdentificador del paso.
steps[n].labelstringNombre del paso.
steps[n].kindstring'item', 'procedure' o 'appointment'. Un paso 'item' cuenta además como una dosis del tratamiento.
steps[n].itemstringÍtem que gasta el paso. Lo retira el recurso que aplica el paso.
steps[n].hoursnumberHoras reales de espera antes de este paso, contadas desde el paso anterior, o desde el diagnóstico en el primero.
steps[n].minigamestringMinijuego 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].difficultynumberDificultad del minijuego: 1 fácil, 2 normal, 3 difícil.
immunityHoursnumberHoras 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 healthDrain deja 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 lethalAfterHours sin 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.

data/diseases.lua
lua
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:

ox_inventory/data/items.lua
lua
['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:

text
/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

lua
proximity = {
    enabled = true,
    -- ...
},

Que el paciente vea lo que tiene sin diagnóstico

lua
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ónTipoPor defectoQué hace
label, icon, colorstringtexto, 'fa-baby', configurableCómo aparece el embarazo en las interfaces.
time.daysPerMonthnumber3Días reales que dura un mes de embarazo.
time.monthsnumber9Meses hasta el nacimiento.

Fertilidad · fertility ​

La usa el export RollPregnancy.

OpciónTipoPor defectoQué hace
baseChancenumber5Porcentaje base por encuentro sin protección.
fertileMultipliernumber3.0Multiplicador dentro de la ventana fértil.
cycleLengthnumber28Días del ciclo.
fertileWindowStart, fertileWindowEndnumber12, 16Primer y último día de la ventana fértil.
frequencyBonusnumber0.1Aumento por cada encuentro reciente (0.1 = +10 %).
frequencyMultMaxnumber1.5Multiplicador máximo que pueden alcanzar los encuentros recientes.
recentCooldownHoursnumber1Horas desde el último encuentro por debajo de las que el porcentaje se reduce.
recentReductionnumber0.5Multiplicador que se aplica en ese caso.
maxChancenumber60Porcentaje máximo después de aplicarlo todo.

Prueba · test ​

OpciónTipoPor defectoQué hace
falsePositiveChancenumber8Porcentaje de falsos positivos cuando no hay embarazo.
minHoursToDetectnumber12Horas desde la concepción a partir de las que la prueba lo detecta.

Barriga · belly ​

OpciónTipoPor defectoQué hace
enabledbooleanfalsetrue sustituye una prenda por una barriga según pasan los meses y la restaura tras el nacimiento. false = sin cambio de ropa.
componentnumber11Componente de ropa que se sustituye: 11 torso, 8 camiseta interior, 3 brazos.
modelsstring[]{ 'mp_f_freemode_01' }Modelos de personaje en los que se aplica.
stageslistacuatro 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].

CampoTipoQué hace
labelstringNombre del mes.
symptomstableSíntomas del mes, con la misma forma que en las enfermedades.
messagestringAviso que recibe la madre al empezar el mes. Una clave de locale o un texto literal.
checkupbooleantrue = 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ónTipoPor defectoQué hace
enabledbooleantruetrue crea las citas automáticamente. false = las pide el médico a mano.
kind, subtypestringtextoTipo y subtipo de la cita en la agenda de la MDT.
hoursAfterMonthStartnumber6Horas después del cambio de mes a las que se fija la cita.
durationMinnumber20Duración de la cita en minutos.

Parto · labor ​

OpciónTipoPor defectoQué hace
enabledbooleantruetrue = al llegar la fecha empiezan las contracciones. false = el bebé nace solo en la fecha prevista.
durationMinnumber30Minutos para ser atendida antes de que el parto ocurra fuera del hospital.
contractionsEverytable{ min = 2, max = 4 }Minutos entre contracciones.
contractionSecondsnumber4Segundos que dura cada contracción.
notifyFatherbooleantruetrue avisa también al padre. false = solo a la madre.
alertEmsbooleantruetrue envía un aviso a EMS cuando empieza el parto. Necesita Cuxial Police.
appointmentbooleantruetrue crea la cita de parto en la agenda. Necesita Cuxial Police y un embarazo ya conocido.

El parto solo empieza con la madre conectada.

© Cuxial