Skip to content

Exports y eventos

API pública de Cuxial Police: exports y eventos para enviar avisos, consultar el servicio, encarcelar y más.

Envía avisos, consulta quién está de servicio, encarcela jugadores o abre la tablet desde tus propios recursos. Todo lo que no aparece aquí es interno y puede cambiar sin aviso.

Todos los exports se llaman como exports.cuxial_police:Nombre(...).

Avisos (servidor) ​

SendDispatchAlert ​

Envía un aviso a los miembros de servicio de las facciones o trabajos elegidos.

lua
local id = exports.cuxial_police:SendDispatchAlert(data)
CampoTipoDescripción
titlestringTítulo del aviso. Obligatorio.
messagestringTexto del aviso.
typestringTipo de aviso. También decide la facción cuando no se indica factions (ver abajo).
severitystringEtiqueta libre como 'low', 'normal', 'high', 'critical'.
coordsvector3 | tablePosición, como vec3 o { x, y, z }.
streetstringNombre de la calle.
codestring | numberCódigo del aviso. Un número correlativo si se omite.
reporterstringQuién informa.
suspect, suspects, vehicle, weaponstableDatos estructurados que muestra la tarjeta del aviso.
imagesstring[]URLs de imágenes.
triage, vitalstableDatos médicos para avisos de EMS.
metadatatableDatos libres.
centralbooleantrue añade además el aviso al tablero de Central.
factionsstring[]Destinatarios: 'police', 'ems', 'fib'.
jobsstring[]Nombres de trabajo. Si se indica, sustituye a factions.

Devuelve: string con el id del aviso, o nil cuando los datos no son válidos.

Cuando no se indica ni jobs ni factions, la facción sale de type:

typeVa a
robbery, shots, vehicle, drugs, assault, chase, domestic, firePolicía, y la agencia federal cuando el addon está activado
medical, crash, crashfire, cardiac, overdoseEMS
Cualquier otroTodas las facciones
lua
exports.cuxial_police:SendDispatchAlert({
    type = 'robbery',
    title = 'ROBO EN CURSO',
    message = 'Tienda, sospechoso armado',
    severity = 'high',
    coords = GetEntityCoords(GetPlayerPed(source)),
    central = true,
    factions = { 'police' },
})

SendAlert ​

Forma corta del mismo aviso.

lua
exports.cuxial_police:SendAlert(data)

Acepta title, message, code, street, distance, coords, metadata, annotation, central, jobs, factions y type. Sin title se usa uno genérico.

AddCentralAlert ​

Añade una entrada al tablero de Central sin enviarla a las barras de avisos.

lua
exports.cuxial_police:AddCentralAlert(alert)
CampoTipoDescripción
titlestringTítulo.
messagestringTexto.
codestring | numberCódigo. Aleatorio si se omite.
streetstringNombre de la calle.
coordstablePosición.
metadatatableDatos libres.
factionsstring[]Facciones que ven la entrada.

ClearCentralAlerts ​

Vacía el tablero de Central.

lua
exports.cuxial_police:ClearCentralAlerts()

Avisos (cliente) ​

SendDispatchAlert ​

Envía un aviso desde el jugador que informa. Acepta los mismos campos que el export de servidor, salvo code.

lua
local sent = exports.cuxial_police:SendDispatchAlert(data)

coords y street se rellenan con la posición del jugador cuando se omiten. Cada jugador está limitado por dispatch.sendAlertCooldown. Cuando quien envía no es miembro de una facción, central y critical se ignoran.

Devuelve: boolean. false cuando data no es una tabla.

lua
exports.cuxial_police:SendDispatchAlert({
    type = 'medical',
    title = 'EMERGENCIA MÉDICA',
    message = 'Persona inconsciente',
    factions = { 'ems' },
})

Avisos de disparos ​

Cuxial Police no detecta los disparos por sí mismo. Lanza este evento de cliente desde tu recurso de armas, en el cliente del jugador que ha disparado:

lua
TriggerEvent('cuxial:gunshot', weaponName, weaponLabel)
ParámetroTipoDescripción
weaponNamestringNombre del arma, que se comprueba contra la lista de ignoradas (data.gunshotwhitelist).
weaponLabelstringNombre que se muestra en el aviso. Opcional.

No se envía aviso cuando quien dispara está de servicio en una facción, cuando su trabajo está en dispatch.ignoredJobs, cuando el arma está ignorada o silenciada, ni con dispatch.enabled = false.

Con ox_inventory ​

ox_inventory ya sabe cuándo dispara el jugador. Abre ox_inventory/client.lua, busca el bloque que gestiona un disparo y añade el evento como primera línea:

ox_inventory/client.lua
lua
elseif weaponAmmo then
    if IsPedShooting(playerPed) then
        TriggerEvent('cuxial:gunshot', currentWeapon.name, Items[currentWeapon.name] and Items[currentWeapon.name].label or currentWeapon.name)

        local currentAmmo
        -- ...

Reinicia ox_inventory y después cuxial_police. El nombre de arma que se envía es el del ítem (WEAPON_PISTOL), el mismo que escribes en data.gunshotwhitelist.

Al actualizar ox_inventory se sustituye client.lua. Vuelve a añadir la línea después de cada actualización.

Servicio (servidor) ​

ExportDevuelveDescripción
GetCopsOnDuty()numberMiembros de servicio, todas las facciones juntas.
IsCopOnDuty(src)booleanSi ese jugador está de servicio en una facción.
GetOnDutySources()number[]Ids de servidor de servicio.
GetOnDutySourcesByFaction(faction)number[]Ids de servidor de servicio en 'police', 'ems' o 'fib'.
GetFactionOfSource(src)string | nilFacción de un jugador de servicio.
GetCopData()tableCopia de la plantilla de servicio, con el id de servidor como clave.
SetCopReference(src, sprite, color, colorId)booleanCambia el blip en el mapa de un miembro de servicio. Un parámetro nil se deja como está.
lua
for _, src in ipairs(exports.cuxial_police:GetOnDutySourcesByFaction('police')) do
    TriggerClientEvent('myresource:notify', src, 'Alarma del banco')
end
lua
if exports.cuxial_police:GetCopsOnDuty() < 3 then
    return -- no hay unidades suficientes para este robo
end

Ciudadanos (servidor) ​

GetCitizenFlags ​

lua
local flags = exports.cuxial_police:GetCitizenFlags(citizenid)

Devuelve: { wanted = boolean, dangerous = boolean }. Los dos son false con un identificador vacío.

GetAnkleByCitizen ​

lua
local ankle = exports.cuxial_police:GetAnkleByCitizen(citizenid)

Devuelve: la tobillera activa de ese ciudadano, o nil.

Panel de inicio (servidor) ​

La pestaña de inicio de la policía muestra una lista de robos recientes que alimentan tus recursos.

ExportDescripción
AddRobbery({ name, location, status })Añade una entrada. status es 'pending' por defecto. Se conservan las últimas 100.
GetRobberies()Devuelve la lista.
ClearRobberies()Vacía la lista.
lua
exports.cuxial_police:AddRobbery({ name = 'Joyería', location = 'Vinewood' })

Prisión (servidor) ​

Estos exports actúan sobre la prisión integrada. Los meses se convierten a tiempo real con prison.monthSeconds y tienen como tope limits.maxSentenceMonths.

ExportDevuelveDescripción
Jail(src, months, reason, officerSrc)booleanEncarcela a un jugador conectado. reason y officerSrc son opcionales.
JailOffline(citizenid, months, reason)booleanEncarcela a un ciudadano desconectado.
Unjail(src)booleanLibera a un jugador conectado.
UnjailOffline(citizenid)booleanLibera a un ciudadano por su identificador.
IsJailed(src)booleanSi ese jugador está cumpliendo condena.
GetPrisonerData(src)table | nil{ jail_time, remaining_sec, months }. jail_time son los meses que quedan.
GetActiveSentences()tablePresos conectados con el id de ciudadano como clave: { name, months, remaining_sec }.
lua
exports.cuxial_police:Jail(target, 12, 'Robo a mano armada', source)

Citas médicas ​

Servidor ​

ExportDevuelveDescripción
CreateAppointment(data, opts)fila | nil, motivoReserva una cita.
GetPatientAppointments(citizenid, opts)table[]Citas de un paciente. opts: kind, openOnly, limit.
GetAgenda(opts)table[]Citas en un intervalo. opts: from, to (tiempo Unix), doctorCitizenid, kind.
CancelAppointment(id, reason)boolean, motivoCancela una cita. Se avisa al paciente cuando lb-phone está iniciado.
CheckInAppointment(id, citizenid)boolean, motivoMarca la llegada del paciente.

Campos de data para CreateAppointment:

CampoTipoDescripción
citizenidstringPaciente. Obligatorio.
scheduledAtnumberTiempo Unix de la cita. Obligatorio; tiene que ser futuro.
kindstring'consulta' (por defecto), 'control', 'cura', 'analisis', 'vacuna', 'obstetricia', 'psicologia' o 'cronico'.
durationMinnumberDuración en minutos, de 5 a 240.
pricenumberPrecio. Sale de appointments.prices si se omite.
doctorCitizenidstringMédico asignado.

opts.doctorName es el nombre que figura como autor cuando no se indica médico.

lua
local appointment, reason = exports.cuxial_police:CreateAppointment({
    citizenid = citizenid,
    kind = 'consulta',
    scheduledAt = os.time() + 3600,
}, { doctorName = 'Recepción' })

Cliente ​

Para una app de teléfono o cualquier interfaz del paciente.

ExportDescripción
GetMyAppointments()Devuelve las citas del jugador.
ConfirmMyAppointment(id)Confirma la asistencia.
CancelMyAppointment(id)Cancela la cita.
CheckInMyAppointment(id)Hace el check-in. El jugador tiene que estar en un punto de recepción.

InvalidateConditionCache ​

Llámalo después de escribir en la tabla cuxial_ems_conditions desde otro recurso, para que la comprobación de fármacos recargue a ese paciente.

lua
exports.cuxial_police:InvalidateConditionCache(citizenid)

Ajustes (servidor) ​

getSetting ​

Devuelve el valor en vivo de una sección de ajustes.

lua
local value = exports.cuxial_police:getSetting(id)
ParámetroTipoDescripción
idstringId de la sección, como 'config.jobs' o 'data.permissions'.

Devuelve: la sección como tabla plana (los vectores pasan a { x, y, z }), o nil con un id desconocido.

lua
local jobs = exports.cuxial_police:getSetting('config.jobs')
if jobs.policeJobs[jobName] then
    -- el trabajo pertenece a la facción de policía
end

Addon federal (servidor) ​

Estos exports solo existen cuando el addon está activado.

ExportDevuelveDescripción
FibGetCase(id)table | nilUn expediente.
FibAddTimeline(id, kind, actor, text, data)booleanAñade una entrada a la cronología de un expediente. false si el expediente no existe.
FibGetOrgHeat(gangId)numberCalor de una organización; 0 si no se conoce.
FibCitizenFlags(citizenid)table | nil{ watchlist, threat, org, warrant }, o nil cuando la agencia no tiene nada del ciudadano.
FibActiveArrestWarrant(citizenid)table | nil{ id, number, expires_at, case_id } de la orden de arresto activa.
FibDevicesNear(coords, radius)table[]Dispositivos activos alrededor de un punto: { id, kind, dist }. radius es 30.0 por defecto.
lua
local warrant = exports.cuxial_police:FibActiveArrestWarrant(citizenid)
if warrant then
    print(('Orden de arresto %s'):format(warrant.number))
end

Exports de cliente ​

cuxial_mdt ​

Abre la tablet. Es también el manejador del item cuxial_mdt.

lua
exports.cuxial_police:cuxial_mdt()

Los exports prescription, death_certificate, fib_camera, fib_mic y fib_gps son manejadores de item para el inventario y no están pensados para llamarlos a mano.

Eventos de cliente ​

Eventos locales para manejar la interfaz desde otro recurso de cliente, como un menú radial.

EventoParámetrosQué hace
cuxial:tablet:openningunoAbre la tablet.
cuxial:tablet:closeningunoCierra la tablet.
cuxial:tablet:toggleningunoAbre o cierra la tablet.
cuxial:quickmenu:openningunoAbre el menú rápido.
cuxial:quickmenu:closeningunoCierra el menú rápido.
cuxial:quickmenu:toggleningunoAbre o cierra el menú rápido.
cuxial:duty:toggleningunoEntra o sale de servicio.
cuxial:duty:setstatePone el servicio a true o false.
cuxial:duty:getcbLlama a cb(onDuty).
lua
TriggerEvent('cuxial:tablet:open')

Eventos que puedes escuchar:

EventoParámetrosCuándo
cuxial_police:client:SetDutystateHa cambiado el estado de servicio del jugador.
cuxial_police:client:NewAlertalertEl jugador ha recibido un aviso.
cuxial_police:client:JobChangeCleanupningunoEl jugador ha salido de la facción o ha cambiado de trabajo.
lua
RegisterNetEvent('cuxial_police:client:SetDuty', function(state)
    print(state and 'De servicio' or 'Fuera de servicio')
end)

Eventos de servidor ​

EventoParámetrosCuándo
cuxial_police:internal:JobChangedsrc, oldJob, newJobHa cambiado el trabajo de un jugador.
cuxial_police:internal:PrisonReleasedcitizenid, causeSe ha liberado a un preso de la prisión integrada. cause es 'served' o 'police'.
cuxial_police:settingsAppliedidSe ha aplicado una sección de ajustes. También se lanza en el cliente.
lua
AddEventHandler('cuxial_police:internal:PrisonReleased', function(citizenid, cause)
    print(('%s liberado (%s)'):format(citizenid, cause))
end)

State bags ​

State bagEnValor
cuffedJugadortrue mientras el jugador está esposado.
escortedJugadortrue mientras el jugador está siendo escoltado.
escortedByJugadorId de servidor del agente que escolta.
lua
if Player(source).state.cuffed then return end

© Cuxial