Cuxial Medical
EMS avanzado, heridas por zona corporal y muerte progresiva. Reemplaza qb-ambulancejob.
Resumen
Sistema avanzado de EMS, heridas por zona corporal y muerte progresiva (QBox · ESX · QBCore)
Sistema médico realista que reemplaza por completo qb-ambulancejob. Modelo de heridas por hueso/zona, fases de muerte progresivas, pantalla de muerte NUI, camillas físicas con prop streameado, finishers con arma blanca, dispatch de EMS y una API de eventos y exports muy completa para integrarse con otros recursos.
Requisitos
Requiere cuxial_bridge. Descárgalo e inícialo antes que este script (ver la doc del bridge). El bridge es lo que le da compatibilidad con QBox, ESX y QBCore.
Compatible con QBox, ESX y QBCore. No necesitas listar tu framework como dependencia: el bridge lo detecta y lo conecta por ti.
Asegúrate de tener estos recursos instalados e iniciados antes que el script:
Instalación
- Instala cuxial_bridge si aún no lo tienes (ver su doc).
- Sube la carpeta cuxial_medical a resources/[cuxial]/.
- Instala las dependencias listadas arriba.
- Importa el archivo .sql incluido a tu base de datos (si el script lo trae).
- Añade los ensure a tu server.cfg respetando el orden.
- Reinicia el servidor por completo.
# Tu framework (QBox / ESX / QBCore) ya debe estar iniciado
ensure ox_lib
ensure oxmysql
# Núcleo de Cuxial — siempre antes que los scripts
ensure cuxial_bridge
ensure ox_inventory
ensure ox_target
ensure pma-voice
# El script
ensure cuxial_medicalSi el script incluye un .sql, impórtalo una sola vez. Algunos scripts hacen migraciones automáticas — revisa el README incluido.
Configuración
Toda la configuración editable está en texto plano (la lógica va protegida por Cfx.re Escrow). Edita estos ficheros para ajustar el script a tu servidor:
- config.lua
- data/
Protegido por Cfx.re Escrow — Compatible con QBox · ESX · QBCore (vía cuxial_bridge) — config.lua y data/ abiertos y editables — Reemplaza qb-ambulancejob (no correr ambos) — Soporte por tickets en la web — Actualizaciones incluidas
Comandos
/revive [id]Revive a un jugador o a ti mismo (permiso mod)/heal [id]Cura HP, heridas y needs (permiso mod)/kill [id]Mata a un jugador al instante (permiso mod)/stretcherColoca/spawnea una camilla frente a ti/delstretcherElimina la camilla cercana/mdstretcherElimina todas las camillas (permiso mod)Características
- Heridas por 9 zonas corporales — tipo (bala/arma blanca/golpe/quemadura), severidad 1-4 y sangrado
- Detección automática de arma y zona — +300 armas mapeadas (vanilla + custom)
- Efectos en gameplay — cojera, temblor al apuntar, bloqueo de salto/sprint, blackouts
- Muerte en 3 fases progresivas — herido → desangrándote → inconsciente
- Last Stand — arrastrarse (crawl), rotar y voltearse mientras estás caído
- Pantalla de muerte NUI — contador de fase, EMS online, costo de respawn, efecto de sangre
- Zoom de cámara con clic derecho durante el estado herido/muerto
- Voz amortiguada (audio submix) para jugadores muertos vía pma-voice
- EMS completo — revivir (CPR sincronizado), curar, sedar y tratar heridas por tipo
- Camillas físicas (strykerpro) — cargar pacientes, meter en ambulancia, 8 poses, extras
- Camas de hospital con ox_target + respawn en cama con animación de levantarse
- Finishers — remates con arma blanca sobre jugadores caídos (sync scene)
- Dispatch — los heridos llaman EMS con G; los médicos on-duty reciben la cola con calle
- Persistencia — estado de muerte y heridas sobreviven al relog + logs en base de datos
- Logs de Discord (webhook) de muertes, revives y combate
- API de eventos y exports extensa para integración con otros recursos
- Estado server-autoritativo, sanitización de payloads, rate-limiting y anti-cheat
- Multi-idioma — español e inglés incluidos (ox_lib locale)
Sistema de heridas
En vez de una sola barra de vida, cada disparo o golpe registra una herida localizada. El script detecta el arma y la zona del cuerpo impactada y aplica una herida con tipo, severidad y sangrado propios — con más de 300 armas mapeadas (vanilla y custom).
| Tipo | Origen | Severidad |
|---|---|---|
shot | Armas de fuego | Alta |
stabbed | Arma blanca / melee cortante | Media-alta |
beat | Puños y melee contundente | Media |
burned | Fuego y explosiones | Media |
Cada herida vive en una de las 9 zonas corporales, con una severidad de 1 a 4 y un valor de sangrado independiente que drena vida con el tiempo hasta que un EMS la trata o el jugador se venda.
- Efectos en gameplay reales — cojera, temblor al apuntar, bloqueo de salto/sprint y blackouts según la gravedad.
- Sangrado progresivo que obliga a buscar tratamiento antes de desangrarse.
- El diagnóstico permite a los EMS ver exactamente qué zona y tipo de herida tratar.
El estado de heridas es server-autoritativo y se replica por statebag (cuxial:injuries), así que cualquier recurso puede leerlo sin pedirlo al servidor.
Muerte progresiva
Morir no es instantáneo. El jugador atraviesa fases con temporizador antes de poder reaparecer, dando margen real a los EMS para llegar y revivir. El estado vital vive en el statebag cuxial:state (alive · laststand · dead) y la fase en cuxial:phase.
| Fase | Estado | Qué ocurre |
|---|---|---|
1 | Herido | El jugador cae; empieza la cuenta atrás de la fase. |
2 | Desangrándote | La vida drena; aún puede ser estabilizado por un EMS. |
3 | Inconsciente | Estado crítico; se habilita el respawn con costo. |
- Last Stand — arrastrarse (crawl), rotar y voltearse mientras estás caído.
- Pantalla de muerte NUI — contador de fase, EMS online, costo de respawn y efecto de sangre.
- Voz amortiguada (audio submix) para jugadores muertos vía pma-voice.
- Persistencia — el estado de muerte y las heridas sobreviven al relog.
Compatibilidad opt-in: puede replicar el estado a qbx_medical:deathState y disparar los eventos de qbx_medical/ESX para no romper recursos que dependan de ellos.
API para desarrolladores
El recurso expone una API amplia de exports, eventos (hooks) y statebags replicados para integrarse con otros scripts sin tocar su código. Todos los exports se llaman como exports.cuxial_medical:Nombre(...).
| Statebag | Valor | Significado |
|---|---|---|
cuxial:state | alive · laststand · dead | Estado vital principal del jugador. |
cuxial:phase | 0 (vivo) · 1–3 | Fase de muerte actual. |
cuxial:injuries | table | nil | Heridas activas (fuente de verdad replicada). |
cuxial:revive | { hp, anim, seq } | Señal de revivir que escucha el cliente. |
| Export | Descripción |
|---|---|
RevivePlayer(src) | Revive y limpia heridas/needs. |
RevivePlayerWithHP(src, hp) | Revive con HP exacto (1–200). |
HealPlayer(src, full, quiet) | Cura o revive al jugador. |
IsPlayerDead(src) | false | 'dead' | 'laststand'. |
GetMedicalState(src) | { isDead, phase, deathInjury, injuries }. |
InjurePlayer(src, zona, tipo, nivel, bleed) | Aplica una herida. |
GetPlayerInjuries(src) | Devuelve las heridas activas. |
DiagnosePlayer(src) | Diagnóstico completo para EMS. |
GetEMSCount() | Nº de EMS on-duty. |
GetMedicalHistory(citizenid, limit) | Historial médico persistido. |
| Export | Descripción |
|---|---|
IsInjured() | ¿El jugador local tiene heridas? |
IsBleeding() | ¿Está sangrando? |
IsLimping() | ¿Está cojeando? |
getMedicalState() | Estado médico del jugador local. |
toggleStretcher() | Coloca/recoge la camilla. |
ToggleDuty() | Alterna servicio EMS (on/off duty). |
Además, cada subsistema emite eventos suscribibles con hooks on…/off… — por ejemplo onInjury, onDeath, onTreatment, onDispatch o onStretcher — para reaccionar en tiempo real sin sondear el estado.
local h = exports.cuxial_medical:onInjury('applied', function(p)
print(p.bodyPart, p.injury, p.level)
end)
-- cuando ya no lo necesites
exports.cuxial_medical:offInjury('applied', h)La referencia completa de exports, eventos y statebags viene en el README del recurso.
Rendimiento
NUI display-only; deltas en red (dispatch/stretcher) y broadcasts scoped a EMS