Skip to content

Exports y eventos

API pública de Cuxial Diseases: exports, hooks y eventos para infectar, hacer pruebas, tratar y curar desde otros recursos.

Lee el estado médico de un personaje, cámbialo y reacciona a lo que le ocurre desde tus propios recursos.

Todos los exports de servidor reciben un target que puede ser un id de servidor (number) o un citizenid (string). Con un citizenid el export funciona también con el jugador desconectado.

Leer casos ​

ExportDevuelve
GetCatalog()table<string, table>. Resumen de cada enfermedad: id, label, category, icon, color, description, stages, testItem, treatmentItem, curable, cureSteps.
GetDiseaseDef(disease)table | nil. La entrada completa de data/diseases.lua.
GetCases(target)table[]. Casos activos del personaje.
GetCase(target, disease)table | nil. Un caso activo. Sin disease, el más reciente.
IsInfected(target, disease)boolean. Sin disease, comprueba cualquier enfermedad.
IsImmune(target, disease)boolean.
GetHistory(target, limit)table[]. Casos del personaje, curados incluidos. limit vale 50 por defecto, 200 como máximo.
GetLog(target, limit)table[]. Registro del personaje: caseId, event, detail, actor, at. limit vale 50 por defecto, 200 como máximo.
GetActiveCases(limit, onlyDiagnosed)table[]. Casos activos de todo el servidor. limit vale 100 por defecto, 500 como máximo. onlyDiagnosed = true devuelve solo los diagnosticados.
lua
if exports.cuxial_diseases:IsInfected(source, 'gripe') then
    local case = exports.cuxial_diseases:GetCase(source, 'gripe')
    print(case.stageLabel, case.treatmentActive)
end

Caso ​

Forma de cada caso que devuelven los exports anteriores. Las fechas son marcas de tiempo Unix en segundos.

CampoTipoDescripción
idnumberId del caso.
citizenidstringPersonaje.
disease, label, category, icon, colorstringEnfermedad y cómo se presenta.
stage, stageLabelstringEtapa actual.
stageIndex, stageCountnumberPosición de la etapa y número de etapas.
severitystring'mild', 'moderate', 'severe' o 'critical'.
lethalbooleanSi la etapa actual es letal.
statusstring'active', 'controlled' (hay una dosis activa) o 'cured'.
diagnosed, diagnosedAt, diagnosedByboolean, number, stringDiagnóstico.
infectedAt, infectedBynumber, stringCuándo y por quién.
stageSince, progressesAtnumberInicio de la etapa y cuándo cambia.
lastTreatment, treatmentUntilnumberÚltima dosis y fin de su efecto.
treatmentActivebooleanSi hay una dosis en efecto ahora.
treatmentDosesnumberDosis contadas hasta ahora.
cureStep, cureStepsnumber, tablePasos del plan de cura ya hechos, y el plan.
cureStepAt, nextStepAtnumberCuándo se hizo el último paso, y desde cuándo se puede hacer el siguiente (nil si no tiene espera).
curedAt, curedBynumber, stringCura.
notesstringNotas del médico.

Cambiar casos ​

Infect ​

Da una enfermedad a un personaje.

lua
exports.cuxial_diseases:Infect(target, disease, infectedBy, opts)
ParámetroTipoDescripción
targetnumber | stringId de servidor o citizenid.
diseasestringid de data/diseases.lua.
infectedBystringOrigen, que se guarda con el caso. Opcional.
opts.stagestringEtapa en la que empieza. La primera por defecto.
opts.ignoreImmunitybooleantrue infecta aunque el personaje sea inmune.
opts.actornumber | stringQuién lo hizo, para el registro.
opts.deferStagebooleantrue = si el personaje está desconectado, la etapa empieza a contar en su siguiente entrada.

Devuelve: boolean, string. true, o false y un motivo: 'invalid_target', 'unknown_disease', 'already_infected', 'immune' o 'db_error'.

lua
-- Comida en mal estado
local ok, reason = exports.cuxial_diseases:Infect(source, 'gastroenteritis', 'bad_food')

RollContagion ​

Tira el contagio entre dos personajes cuando exactamente uno de ellos tiene la enfermedad. Usa contagion.sexual del catálogo.

lua
exports.cuxial_diseases:RollContagion(first, second, disease, mods)
ParámetroTipoDescripción
first, secondnumber | stringLos dos personajes.
diseasestringEnfermedad que se tira.
mods.condomUsedbooleanAplica condomProtection.
mods.condomSabotagedbooleanAnula la protección.
mods.chanceOverridenumberPorcentaje que se usa en lugar del del catálogo.

Devuelve: boolean, string. Si alguien se ha infectado, y el motivo: 'infected', 'no_roll', 'protected', 'none_infected', 'both_infected', 'immune', 'no_sexual_contagion' o 'invalid_target'.

lua
local infected = exports.cuxial_diseases:RollContagion(srcA, srcB, 'vih', { condomUsed = true })

RunTest ​

Hace a un personaje la prueba de una enfermedad. Un resultado positivo marca el caso como diagnosticado.

lua
exports.cuxial_diseases:RunTest(target, disease, actor, opts)
ParámetroTipoDescripción
targetnumber | stringId de servidor o citizenid.
diseasestringEnfermedad que se comprueba.
actornumber | stringQuién hace la prueba, para el registro. Opcional.
opts.accuracynumberDe 0 a 100. Por debajo de 70 añade probabilidad de resultado no concluyente. Opcional.

Devuelve: string. 'negative', 'inconclusive' o 'positive'.

lua
local result = exports.cuxial_diseases:RunTest(patient, 'neumonia', source)

ApplyItem ​

Aplica un ítem que se ha consumido: una dosis por cada caso activo que trate, y la vacuna si es un vaccine.item. Úsalo cuando sea tu propio recurso el que gestiona el uso del ítem.

lua
exports.cuxial_diseases:ApplyItem(target, item, actor)

Devuelve: table[]. Una entrada por efecto: { disease, label, effect }, donde effect es 'dose', 'cured' o 'vaccine'. Las vacunas añaden permanent y hours. Vacía si el ítem no hizo nada.

lua
local effects = exports.cuxial_diseases:ApplyItem(source, 'paracetamol', source)

Diagnose ​

Marca un caso como diagnosticado.

lua
exports.cuxial_diseases:Diagnose(target, disease, actor)

Devuelve: boolean, string. false, 'not_infected' si no hay caso.

lua
exports.cuxial_diseases:Diagnose(patient, 'gripe', source)

Treat ​

Aplica una dosis del tratamiento de una enfermedad.

lua
exports.cuxial_diseases:Treat(target, disease, actor)

Devuelve: boolean, string, boolean. Si va bien: true, la etapa actual y si esa dosis ha curado la enfermedad. Si falla: false y 'not_infected', 'no_treatment', 'too_soon' o 'invalid_target'.

lua
local ok, stage, cured = exports.cuxial_diseases:Treat(patient, 'gripe', source)

AdvanceCureStep ​

Completa el paso actual del plan de cura. El último paso cura al paciente.

lua
exports.cuxial_diseases:AdvanceCureStep(target, disease, actor)

Devuelve: boolean, string, boolean, number. Si va bien: true, el id del paso y si el paciente queda curado. Si falla: false y 'not_infected', 'no_cure_plan' o 'too_soon'; con 'too_soon' el cuarto valor son los segundos que faltan.

lua
local ok, step, cured, wait = exports.cuxial_diseases:AdvanceCureStep(citizenid, 'neumonia', source)
if not ok and step == 'too_soon' then
    print(('Siguiente paso en %d minutos'):format(math.ceil(wait / 60)))
end

Retira el item del paso del inventario en tu recurso antes de llamar al export.

Regress ​

Recaída: retrocede un paso en el plan de cura y anula el tratamiento activo. Pensado para el paciente que falta a una cita.

lua
exports.cuxial_diseases:Regress(target, disease, actor)

Devuelve: boolean, number | string. true y el paso en el que queda el plan, o false, 'not_infected'.

lua
exports.cuxial_diseases:Regress(citizenid, 'neumonia', 'no_show')

Cure ​

Cura una enfermedad y aplica la inmunidad indicada en el catálogo.

lua
exports.cuxial_diseases:Cure(target, disease, actor, reason)
ParámetroTipoDescripción
targetnumber | stringId de servidor o citizenid.
diseasestringEnfermedad que se cura. Sin él, el caso más reciente.
actornumber | stringQuién cura, para el registro. Opcional.
reasonstringSe guarda en el registro. 'manual' por defecto.

Devuelve: boolean, string. false, 'not_infected' si no hay caso.

lua
exports.cuxial_diseases:Cure(source, 'gripe', 'hospital_bed', 'bed_rest')

GrantImmunity ​

Hace a un personaje inmune a una enfermedad. Nunca acorta una inmunidad más larga.

lua
exports.cuxial_diseases:GrantImmunity(target, disease, hours, source)
ParámetroTipoDescripción
hoursnumber | stringHoras de inmunidad, o 'permanent'.
sourcestringOrigen, que se guarda con la inmunidad. 'vaccine' por defecto.

Devuelve: boolean. false si la enfermedad no existe.

lua
exports.cuxial_diseases:GrantImmunity(source, 'gripe', 72, 'event_reward')

SetNotes ​

Guarda las notas del médico sobre un caso. Se cortan a 2000 caracteres.

lua
exports.cuxial_diseases:SetNotes(target, disease, notes)

Devuelve: boolean.

Hooks ​

Ejecuta tu código cuando le ocurre algo a un caso.

onDisease ​

lua
local handle = exports.cuxial_diseases:onDisease(event, fn)

Devuelve: number. Un identificador para quitar el hook más adelante.

offDisease ​

lua
exports.cuxial_diseases:offDisease(handle)

Devuelve: boolean.

lua
local handle = exports.cuxial_diseases:onDisease('collapse', function(e)
    -- e.source es el id de servidor del paciente
    if e.source then TriggerEvent('my_ambulance:knockDown', e.source) end
end)

Cada hook se envía también como evento de servidor con el nombre cuxial_diseases:<evento>, con la misma tabla:

lua
AddEventHandler('cuxial_diseases:cure', function(e)
    print(e.citizenid, e.disease, e.reason)
end)
EventoCuándoCampos
infectSe crea un casocaseId, citizenid, disease, stage, infectedBy
progressCambia la etapacaseId, citizenid, disease, from, stage, lethal
diagnoseSe diagnostica un casocaseId, citizenid, disease, stage, by
treatSe aplica una dosiscaseId, citizenid, disease, stage, doses
expireTermina el efecto de una dosiscaseId, citizenid, disease, stage
routine_resetEl contador de dosis vuelve a cerocaseId, citizenid, disease, stage, doses
stepSe completa un paso de curacaseId, citizenid, disease, step, total, stepId
regressUna recaídacaseId, citizenid, disease, stage, step
cureSe cura un casocaseId, citizenid, disease, stage, reason
collapseColapsa una etapa letalcaseId, citizenid, disease, stage, source
vaccineSe aplica una vacunacitizenid, disease, permanent
conceiveEmpieza un embarazoid, mother, father
pregnancy_revealedUn embarazo pasa a ser conocidoid, mother
pregnancy_monthEmpieza un mes nuevoid, mother, month
laborEmpieza el partoid, mother, father
birthNacimientoid, mother, father, reason, by
terminateSe termina un embarazoid, mother, reason

Embarazo ​

ExportDevuelve
GetPregnancy(target)table | nil. Embarazo activo: id, mother, father, status, revealed, conceivedAt, dueDate, month, months, monthLabel, week, trimester, trimesterLabel, daysToBirth, secondsToBirth, labor, laborSince, laborDeadline, notes.
IsPregnant(target)boolean.
IsFertile(target)boolean. Si el personaje está hoy dentro de la ventana fértil.
GetPregnancyHistory(target, limit)table[]. Embarazos del personaje, con la misma forma. limit vale 20 por defecto, 100 como máximo.
RollPregnancy(mother, father, stats)boolean, number | string. Tira un embarazo con las reglas de fertility. stats es opcional: recentCount, lastEncounterAt, encounterRef. Devuelve true y el id, o false y 'already_pregnant' o 'no_roll'.
Conceive(mother, father, opts)boolean, number | string. Inicia un embarazo sin tirada. opts.encounterRef, opts.actor. Falla con 'invalid_mother' o 'already_pregnant'.
SetPregnancyEncounter(mother, ref)boolean. Guarda en el embarazo una referencia numérica tuya.
PregnancyTest(target, actor)string. 'positive', 'false_positive' o 'negative'. Un positivo marca el embarazo como conocido.
RevealPregnancy(target, actor)boolean. Marca el embarazo como conocido.
StartLabor(target)boolean. Empieza el parto ahora.
DeliverBaby(target, actor, reason)boolean, string. Registra el nacimiento. false, 'not_pregnant' si no hay embarazo.
TerminatePregnancy(target, actor, reason)boolean, string. Termina el embarazo.
SetPregnancyNotes(target, notes)boolean. Notas del médico.
lua
local ok, id = exports.cuxial_diseases:RollPregnancy(motherSrc, fatherSrc, { recentCount = 2 })

local result = exports.cuxial_diseases:PregnancyTest(source, source)
if result == 'positive' then
    local info = exports.cuxial_diseases:GetPregnancy(source)
    print(info.week, info.daysToBirth)
end

Tu recurso decide qué personaje es la madre antes de llamar a RollPregnancy o Conceive.

Exports de cliente ​

GetMyState ​

Devuelve el estado médico del jugador local, con los síntomas que tiene en efecto ahora mismo.

lua
local cases = exports.cuxial_diseases:GetMyState()

Devuelve: table[]. Cada entrada trae id, disease, label, icon, color, stage, stageLabel, severity, lethal, symptoms, treatmentActive, treatmentUntil y diagnosed. label es nil mientras el paciente no sabe lo que tiene. Un embarazo es una entrada más, con disease = 'pregnancy'.

IsSick ​

lua
local sick = exports.cuxial_diseases:IsSick()

Devuelve: boolean. true cuando el estado tiene al menos una entrada, embarazo incluido.

lua
if exports.cuxial_diseases:IsSick() then
    -- recuperación de aguante más lenta, un icono en el HUD...
end

GetPregnancyState ​

lua
local pregnancy = exports.cuxial_diseases:GetPregnancyState()

Devuelve: table | nil. month, months, week, belly y labor del embarazo del jugador local.

Eventos de cliente ​

Los dos son eventos locales: escúchalos con AddEventHandler en un script de cliente.

EventoParámetrosCuándo
cuxial_diseases:client:StateChangedcasesCambia el estado médico del jugador. Misma tabla que GetMyState.
cuxial_diseases:client:TestResultShownitem, resultsEl jugador ha usado un ítem de prueba. results lista los resultados no negativos: { disease, label, result }. Vacía = negativo.
lua
AddEventHandler('cuxial_diseases:client:StateChanged', function(cases)
    SendNUIMessage({ action = 'sick', value = #cases > 0 })
end)

© Cuxial