AI Core
Trabajos y serviciosai-death

ai-death para desarrolladores

Reanimar, curar y el estado de abatido a través de la capa médica de AI Core, los exports de servidor de ai-death, el state bag dead y el evento de reanimación de QB.

Para reanimar, curar o comprobar a un jugador abatido desde tu script, usa medical de la lib (TypeScript) o los exports RevivePlayer / HealPlayer / IsPlayerDead de ai-core (Lua). Pasan por la capa médica de AI Core y funcionan con el script de muerte que esté en uso (ai-death, qbx_medical, qb-ambulancejob, esx_ambulancejob, wasabi_ambulance...). Los exports de ai-death de más abajo son los que llama esa capa mientras ai-death está en marcha.

Funciones de la lib (recomendado)

medical.revive

Levanta a un jugador abatido donde está tumbado.

Lado: Servidor · Espera: no

Firma
medical.revive(source: number): boolean
Lua
local ok = exports['ai-core']:RevivePlayer(source)

No hay aiLib.medical en Lua: llama al export de ai-core como arriba.

Parámetros

Prop

Type

Devuelve

true cuando el jugador estaba abatido y ahora está en pie. false cuando no estaba abatido o no hay script de muerte en marcha.

Ejemplo

import { addCommand, medical, notify } from "@aicore-fivem/lib/server";

// /revive <id> para los administradores de ai-core.
addCommand(
  "revive",
  { help: "Revive a player", restricted: true, params: [{ name: "id", type: "playerId" }] as const },
  (source, { id }) => {
    if (!medical.revive(id) && source > 0) notify(source, "That player is not down", "error");
  },
);

medical.heal

Salud completa para un jugador que no está abatido.

Lado: Servidor · Espera: no

Firma
medical.heal(source: number): boolean
Lua
local ok = exports['ai-core']:HealPlayer(source)

Devuelve

true cuando un script de muerte aceptó la llamada. false cuando no hay script de muerte en marcha.

Con ai-death, curar a un jugador abatido levanta al ped pero mantiene el estado de abatido. Comprueba medical.isDead(source) y llama antes a medical.revive.

medical.isDead

Si un jugador está abatido.

Lado: Servidor · Espera: no

Firma
medical.isDead(source: number): boolean
Lua
local down = exports['ai-core']:IsPlayerDead(source)

Devuelve

true mientras el jugador está abatido. false cuando está en pie o no hay script de muerte en marcha.

medical.provider

El script de muerte que usa la capa médica.

Lado: Servidor · Espera: no

Firma
medical.provider(): string | null
Lua
local name = exports['ai-core']:GetMedicalSystem() -- 'ai-death', 'qbx_medical'... o nil

Devuelve

El nombre del recurso, o null / nil cuando no hay ningún script de muerte soportado en marcha.

medical.isDead (client)

El estado de abatido del jugador local, en el cliente, sea cual sea el script de muerte en uso. Los scripts de muerte mantienen vivo a un ped abatido para animarlo, así que IsEntityDead solo no basta.

Lado: Cliente · Espera: no

Firma
medical.isDead(): boolean
medical.onChange(fn: (dead: boolean) => void): void
Lua
local down = exports['ai-core']:IsDead()

Ejemplo

import { medical, notify } from "@aicore-fivem/lib/client";

RegisterCommand("emote", () => {
  if (medical.isDead()) return notify("Not while down", "error");
  // ... reproducir el emote
}, false);

medical.onChange((dead) => {
  if (dead) SendNUIMessage({ action: "close" }); // cierra tu pantalla cuando el jugador cae
});

Exports de servidor

La capa médica los llama mientras ai-death está en marcha. Tipados como AiDeathServerExports en @aicore-fivem/shared, así que resourceExport("ai-death") los conoce. Revive e IsDead también responden como exports.qbx_medical:Revive / IsDead. Cada export también responde bajo su gemelo en minúsculas (revive).

Revive

Firma
Revive(source: number): boolean
Lua
local ok = exports['ai-death']:Revive(source)

Levanta a un jugador abatido donde está tumbado. true cuando estaba abatido, false en otro caso.

IsDead

Firma
IsDead(source: number): boolean
Lua
local down = exports['ai-death']:IsDead(source)

true mientras el jugador está abatido.

Heal

Firma
Heal(source: number): void
Lua
exports['ai-death']:Heal(source)

Salud completa para un jugador que no está abatido. No devuelve nada. En un jugador abatido levanta al ped pero el estado de abatido se queda: llama antes a Revive.

State bag dead

true en el state bag del jugador mientras ai-death lo mantiene abatido; el servidor lo escribe. La clave es PLAYER_BAGS.dead en @aicore-fivem/shared.

Lua
local down = Player(source).state.dead == true   -- servidor
local down = LocalPlayer.state.dead == true      -- cliente, el jugador local
TypeScript
import { PlayerState, stateBoolean } from "@aicore-fivem/lib/server";
import { PLAYER_BAGS } from "@aicore-fivem/shared";

const dead = new PlayerState(PLAYER_BAGS.dead, stateBoolean);
const down = dead.get(source) === true;

Léelo solo cuando sepas que ai-death está en marcha; medical.isDead funciona con cualquier script de muerte.

Metadata del personaje isdead

true mientras está abatido, guardado en el personaje (la clave de QBCore), así que un jugador que se reconecta abatido vuelve abatido. No lo escribas: ai-death lo fija cuando el jugador cae y lo borra cuando se levanta.

Evento de cliente hospital:client:Revive

El evento de reanimación de QBCore. Cuando el servidor se lo envía a un jugador, ai-death lo reanima donde está (lo usan scripts de QB y menús de administración).

Lado: Servidor -> cliente · Argumentos: ninguno

emitNet("hospital:client:Revive", target);

Este evento no borra el estado de abatido del servidor como hace medical.revive. Usa medical.revive(source) en código nuevo.

Eventos y callbacks privados

El contrato propio del script (resource/common/death.ts). Pueden cambiar entre versiones: no los dispares ni los escuches desde otros recursos.

NombreDirecciónQué transporta
ai-death:client:downservidor -> jugador(seconds, medics, callSeconds): el jugador está abatido; la reaparición se abre tras seconds, hay medics libres ahora y se puede volver a llamar a un médico tras callSeconds.
ai-death:client:reviveservidor -> jugador(point | null): de nuevo en pie en un hospital, o donde está tumbado.
ai-death:respawncallback de cliente(): reaparecer en el hospital más cercano tras el temporizador (paga la tarifa).
ai-death:treatcallback de cliente(hospitalId): tratamiento de pago en un punto de recepción.
ai-death:distresscallback de cliente(): llamar a un médico; responde { ok, seconds }.

En esta página