AI Core
Работы и службыai-death

ai-death для разработчиков

Реанимация, лечение и состояние без сознания через медицинский слой AI Core, серверные экспорты ai-death, state bag dead и событие реанимации QB.

Чтобы реанимировать, вылечить или проверить лежащего без сознания игрока из своего скрипта, используйте medical из lib (TypeScript) или экспорты ai-core RevivePlayer / HealPlayer / IsPlayerDead (Lua). Они идут через медицинский слой AI Core и работают с любым запущенным скриптом смерти (ai-death, qbx_medical, qb-ambulancejob, esx_ambulancejob, wasabi_ambulance...). Экспорты ai-death ниже являются тем, что вызывает этот слой, пока запущен ai-death.

Функции lib (рекомендуется)

medical.revive

Поднимает лежащего без сознания игрока там, где он лежит.

Сторона: сервер · Ожидание: нет

Сигнатура
medical.revive(source: number): boolean
Lua
local ok = exports['ai-core']:RevivePlayer(source)

В Lua нет aiLib.medical: вызывайте экспорт ai-core, как выше.

Параметры

Prop

Type

Возвращает

true, если игрок лежал без сознания и теперь поднялся. false, если он не был без сознания или ни один скрипт смерти не запущен.

Пример

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

// /revive <id> для администраторов 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

Полное здоровье для игрока, который не лежит без сознания.

Сторона: сервер · Ожидание: нет

Сигнатура
medical.heal(source: number): boolean
Lua
local ok = exports['ai-core']:HealPlayer(source)

Возвращает

true, если скрипт смерти принял вызов. false, если ни один скрипт смерти не запущен.

С ai-death лечение лежащего без сознания игрока поднимает педа, но сохраняет состояние без сознания. Проверьте medical.isDead(source) и сначала вызовите medical.revive.

medical.isDead

Лежит ли игрок без сознания.

Сторона: сервер · Ожидание: нет

Сигнатура
medical.isDead(source: number): boolean
Lua
local down = exports['ai-core']:IsPlayerDead(source)

Возвращает

true, пока игрок без сознания. false, если он на ногах или ни один скрипт смерти не запущен.

medical.provider

Скрипт смерти, который использует медицинский слой.

Сторона: сервер · Ожидание: нет

Сигнатура
medical.provider(): string | null
Lua
local name = exports['ai-core']:GetMedicalSystem() -- 'ai-death', 'qbx_medical'... или nil

Возвращает

Имя ресурса или null / nil, если ни один поддерживаемый скрипт смерти не запущен.

medical.isDead (client)

Состояние без сознания локального игрока на клиенте, какой бы скрипт смерти ни был запущен. Скрипты смерти держат лежащего педа живым, чтобы анимировать его, поэтому одного IsEntityDead недостаточно.

Сторона: клиент · Ожидание: нет

Сигнатура
medical.isDead(): boolean
medical.onChange(fn: (dead: boolean) => void): void
Lua
local down = exports['ai-core']:IsDead()

Пример

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

RegisterCommand("emote", () => {
  if (medical.isDead()) return notify("Not while down", "error");
  // ... проиграть эмоцию
}, false);

medical.onChange((dead) => {
  if (dead) SendNUIMessage({ action: "close" }); // закрыть ваш экран, когда игрок теряет сознание
});

Серверные экспорты

Медицинский слой вызывает их, пока запущен ai-death. Типизированы как AiDeathServerExports в @aicore-fivem/shared, поэтому resourceExport("ai-death") их знает. Revive и IsDead также отвечают как exports.qbx_medical:Revive / IsDead. Каждый экспорт также отвечает под своим двойником в нижнем регистре (revive).

Revive

Сигнатура
Revive(source: number): boolean
Lua
local ok = exports['ai-death']:Revive(source)

Поднимает лежащего без сознания игрока там, где он лежит. true, если он был без сознания, иначе false.

IsDead

Сигнатура
IsDead(source: number): boolean
Lua
local down = exports['ai-death']:IsDead(source)

true, пока игрок без сознания.

Heal

Сигнатура
Heal(source: number): void
Lua
exports['ai-death']:Heal(source)

Полное здоровье для игрока, который не лежит без сознания. Ничего не возвращает. Лежащего без сознания игрока поднимает, но состояние без сознания остаётся: сначала вызовите Revive.

State bag dead

true в state bag игрока, пока ai-death держит его без сознания; пишет его сервер. Ключ PLAYER_BAGS.dead в @aicore-fivem/shared.

Lua
local down = Player(source).state.dead == true   -- сервер
local down = LocalPlayer.state.dead == true      -- клиент, локальный игрок
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;

Читайте его, только если знаете, что запущен ai-death; medical.isDead работает с любым скриптом смерти.

Метаданные персонажа isdead

true, пока игрок без сознания, хранится в персонаже (ключ QBCore), поэтому игрок, который переподключился без сознания, возвращается без сознания. Не пишите в него: ai-death выставляет его, когда игрок теряет сознание, и очищает, когда тот поднимается.

Клиентское событие hospital:client:Revive

Событие реанимации QBCore. Когда сервер отправляет его игроку, ai-death реанимирует его там, где он стоит (его используют скрипты QB и админ-меню).

Сторона: сервер -> клиент · Аргументы: нет

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

Это событие не очищает состояние без сознания на сервере так, как это делает medical.revive. В новом коде используйте medical.revive(source).

Приватные события и колбэки

Собственный контракт скрипта (resource/common/death.ts). Они могут меняться между версиями: не вызывайте и не слушайте их из других ресурсов.

ИмяНаправлениеЧто передаёт
ai-death:client:downserver -> player(seconds, medics, callSeconds): игрок без сознания; возрождение открывается через seconds, medics свободны сейчас, врача можно вызвать снова через callSeconds.
ai-death:client:reviveserver -> player(point | null): снова на ногах в больнице или там, где лежал.
ai-death:respawnclient callback(): возродиться в ближайшей больнице после таймера (оплачивает сбор).
ai-death:treatclient callback(hospitalId): платное лечение в точке регистрации.
ai-death:distressclient callback(): вызвать врача; отвечает { ok, seconds }.

На этой странице