AI Core
Référence de l’APIAI Core : exports serveur

EMS

Combien de médecins sont libres pour prendre un appel, et les appels de détresse des joueurs à terre, via le script EMS qui tourne ou ai-core lui-même.

La couche EMS répond à deux questions pour n’importe quel script : « combien de médecins peuvent prendre un appel ? » et « envoyer un appel de détresse aux médecins ». ai-core interroge la source EMS que choisit le réglage EMS source du panneau, ou le premier script EMS qui tourne. Ce que ce script ne sait pas répondre, ai-core y répond lui-même : les médecins libres d’après ses propres effectifs en service, et un appel de détresse sous forme d’alerte prioritaire aux métiers via la couche dispatch.

GetEmsSystem

La source EMS utilisée.

Côté : Serveur · Attend : non · Lib : ems.provider()

Signature
GetEmsSystem(): string | null
Lua
local system = exports['ai-core']:GetEmsSystem() -- 'ai-core' ou un nom de script

Paramètres

Aucun.

Retour

string | null : le nom de ressource du script EMS, ou "ai-core" quand la partie propre d’ai-core répond (aucun script EMS ne tourne). La partie propre d’ai-core est toujours là, donc en pratique ce n’est jamais null.

Exemple

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

const core = resourceExport("ai-core");

addCommand("emssystem", { help: "Shows the EMS source", restricted: true }, () => {
  console.log(core.GetEmsSystem());
});

GetAvailableMedics

Combien de médecins des métiers donnés peuvent prendre un appel maintenant. Un script EMS qui a son propre dispatch laisse de côté les médecins occupés ; la réponse propre d’ai-core est tout le monde en service.

Côté : Serveur · Attend : non · Lib : ems.available

Signature
GetAvailableMedics(jobs: string[]): number
Lua
local medics = exports['ai-core']:GetAvailableMedics({ 'ambulance' })

Paramètres

Prop

Type

Retour

number : les médecins libres. 0 pour aucun, une liste vide ou une valeur qui n’est pas une liste. Quand le script EMS échoue, c’est l’effectif en service propre d’ai-core qui répond.

Exemple

import { onClientCallback, resourceExport } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";

const core = resourceExport("ai-core");
const EMS_JOBS = ["ambulance"];

// Le bouton « réapparaître à l’hôpital » ne fonctionne que tant qu’aucun médecin ne peut venir.
onClientCallback("myscript:respawn", (source) => {
  if (!core.IsPlayerDead(source)) return fail("NOT_DOWN");
  if (core.GetAvailableMedics(EMS_JOBS) > 0) return fail("MEDICS_AVAILABLE");
  // ... déplacer le joueur à l’hôpital et le réanimer
  return { ok: true };
});

SendDistress

Envoie aux médecins l’appel de détresse d’un joueur à terre. Avec un script EMS qui prend les appels, l’appel y va ; sinon ai-core envoie une alerte prioritaire (code 10-52, une icône de trousse médicale, la position du joueur) aux membres en service de jobs via le système d’alertes actif.

Côté : Serveur · Attend : non · Lib : ems.distress

Signature
SendDistress(source: number, call: DistressCall): boolean
Lua
local sent = exports['ai-core']:SendDistress(source, { jobs = { 'ambulance' }, message = 'Unconscious' })

Paramètres

Prop

Type

DistressCall

Prop

Type

Voir DistressCall.

Retour

boolean : true quand quelque chose a pris l’appel. false quand le joueur n’est pas en ligne, que jobs est vide, que le script EMS l’a refusé, ou que l’alerte propre d’ai-core n’a trouvé aucun système d’alertes en cours.

Exemple

import { onClientCallback, Cooldowns, resourceExport } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";
import { Locale } from "common";

const core = resourceExport("ai-core");
const cooldowns = new Cooldowns();

// Le bouton « appeler un médecin » de l’écran de mort, une fois par minute.
onClientCallback("myscript:distress", (source) => {
  if (!core.IsPlayerDead(source)) return fail("NOT_DOWN");
  if (!cooldowns.take(source, 60_000)) return fail("WAIT");
  const sent = core.SendDistress(source, { jobs: ["ambulance"], message: Locale("DISTRESS_UNCONSCIOUS") });
  return sent ? { ok: true } : fail("NO_MEDICS");
});

Sur cette page