AI Core
Prace i służbyai-death

ai-death dla deweloperów

Reanimacja, leczenie i stan powalenia przez warstwę medyczną AI Core, eksporty serwera ai-death, state bag dead i zdarzenie reanimacji QB.

Aby reanimować, uleczyć lub sprawdzić powalonego gracza ze swojego skryptu, używaj medical z biblioteki (TypeScript) lub eksportów RevivePlayer / HealPlayer / IsPlayerDead z ai-core (Lua). Przechodzą przez warstwę medyczną AI Core i działają z każdym działającym skryptem śmierci (ai-death, qbx_medical, qb-ambulancejob, esx_ambulancejob, wasabi_ambulance...). Eksporty ai-death opisane niżej to to, co wywołuje ta warstwa, gdy działa ai-death.

Funkcje biblioteki (zalecane)

medical.revive

Stawia powalonego gracza na nogi tam, gdzie leży.

Strona: serwer · Czeka: nie

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

W Lua nie ma aiLib.medical: wywołaj eksport ai-core jak wyżej.

Parametry

Prop

Type

Zwraca

true, gdy gracz był powalony i teraz wstał. false, gdy nie był powalony albo nie działa żaden skrypt śmierci.

Przykład

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

// /revive <id> dla administratorów 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

Pełne zdrowie dla gracza, który nie jest powalony.

Strona: serwer · Czeka: nie

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

Zwraca

true, gdy skrypt śmierci przyjął wywołanie. false, gdy nie działa żaden skrypt śmierci.

Z ai-death leczenie powalonego gracza stawia peda na nogi, ale zachowuje stan powalenia. Sprawdź medical.isDead(source) i najpierw wywołaj medical.revive.

medical.isDead

Czy gracz jest powalony.

Strona: serwer · Czeka: nie

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

Zwraca

true, dopóki gracz jest powalony. false, gdy stoi albo nie działa żaden skrypt śmierci.

medical.provider

Skrypt śmierci, którego używa warstwa medyczna.

Strona: serwer · Czeka: nie

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

Zwraca

Nazwa zasobu albo null / nil, gdy nie działa żaden obsługiwany skrypt śmierci.

medical.isDead (client)

Stan powalenia lokalnego gracza, po stronie klienta, bez względu na działający skrypt śmierci. Skrypty śmierci utrzymują powalonego peda przy życiu, aby go animować, więc samo IsEntityDead nie wystarcza.

Strona: klient · Czeka: nie

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

Przykład

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

RegisterCommand("emote", () => {
  if (medical.isDead()) return notify("Not while down", "error");
  // ... odtwórz emotkę
}, false);

medical.onChange((dead) => {
  if (dead) SendNUIMessage({ action: "close" }); // zamknij swój ekran, gdy gracz zostanie powalony
});

Eksporty serwera

Warstwa medyczna wywołuje je, gdy działa ai-death. Typowane jako AiDeathServerExports w @aicore-fivem/shared, więc resourceExport("ai-death") je zna. Revive i IsDead odpowiadają też jako exports.qbx_medical:Revive / IsDead. Każdy eksport odpowiada też pod swoim odpowiednikiem pisanym małą literą (revive).

Revive

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

Stawia powalonego gracza na nogi tam, gdzie leży. true, gdy był powalony, w przeciwnym razie false.

IsDead

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

true, dopóki gracz jest powalony.

Heal

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

Pełne zdrowie dla gracza, który nie jest powalony. Nic nie zwraca. Na powalonym graczu stawia peda na nogi, ale stan powalenia zostaje: najpierw wywołaj Revive.

State bag dead

true w state bagu gracza, dopóki ai-death trzyma go powalonego; zapisuje go serwer. Klucz to PLAYER_BAGS.dead w @aicore-fivem/shared.

Lua
local down = Player(source).state.dead == true   -- serwer
local down = LocalPlayer.state.dead == true      -- klient, lokalny gracz
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;

Czytaj go tylko wtedy, gdy wiesz, że działa ai-death; medical.isDead działa z każdym skryptem śmierci.

Metadane postaci isdead

true podczas powalenia, zapisywane w postaci (klucz QBCore), więc gracz, który połączy się ponownie, będąc powalonym, wraca powalony. Nie zapisuj go: ai-death ustawia go, gdy gracz zostaje powalony, i czyści, gdy wstaje.

Zdarzenie klienta hospital:client:Revive

Zdarzenie reanimacji QBCore. Gdy serwer wyśle je do gracza, ai-death reanimuje go tam, gdzie stoi (używają go skrypty QB i menu administratora).

Strona: serwer -> klient · Argumenty: brak

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

To zdarzenie nie czyści stanu powalenia na serwerze tak, jak robi to medical.revive. W nowym kodzie używaj medical.revive(source).

Prywatne zdarzenia i callbacki

Własny kontrakt skryptu (resource/common/death.ts). Mogą się zmieniać między wersjami: nie wywołuj ich ani nie nasłuchuj ich z innych zasobów.

NazwaKierunekCo przenosi
ai-death:client:downserwer -> gracz(seconds, medics, callSeconds): gracz jest powalony; odrodzenie otwiera się po seconds, medics są teraz wolni, lekarza można wezwać ponownie po callSeconds.
ai-death:client:reviveserwer -> gracz(point | null): znów na nogach w szpitalu albo tam, gdzie leży.
ai-death:respawncallback klienta(): odrodzenie w najbliższym szpitalu po upływie licznika (płaci opłatę).
ai-death:treatcallback klienta(hospitalId): płatne leczenie w punkcie rejestracji.
ai-death:distresscallback klienta(): wezwij lekarza; odpowiada { ok, seconds }.

Na tej stronie