AI Core
API-ReferenzAI Core: Server-Exports

Garagen

Fahrzeuge beschlagnahmen und einparken, ein Garagenmenü öffnen und die eingeparkten Fahrzeuge eines Spielers auflisten, über das Garagen-Skript, das der Server nutzt.

Garagen-Aufrufe laufen über ai-core, nie über die eigenen Exports oder Events eines Garagen-Skripts (ai-garages eingeschlossen). ai-core leitet jeden Aufruf an das aktive Garagen-Skript weiter: das, das die Panel-Einstellung Garage script (Garagen-Skript) wählt, oder das erste, das läuft (ai-garages, jg-advancedgarages, tgiann-realparking und die anderen aus der Kompatibilitätsliste). Jedes Skript beantwortet nur die Aktionen, die es wirklich hat, sodass jede Aktion mit einem Skript false oder null antworten und mit einem anderen funktionieren kann.

Ein Fahrzeug ist ein Server-Entity-Handle.

GetGarageSystem

Der Ressourcenname des Garagen-Skripts, an das ai-core weiterleitet.

Seite: Server · Wartet: nein · Lib: garages.provider()

Signature
GetGarageSystem(): string | null
Lua
local system = exports['ai-core']:GetGarageSystem() -- String oder nil

Parameter

Keine.

Rückgabe

string | null: der Ressourcenname des Garagen-Skripts. null, wenn keines läuft.

Beispiel

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

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

addCommand("garagesystem", { help: "Shows the garage script in use", restricted: true }, () => {
  console.log(core.GetGarageSystem() ?? "none");
});

ImpoundVehicle

Schickt ein Fahrzeug in der Welt zur Beschlagnahmestelle. Bei Garagen-Skripten, die nur ein Beschlagnahme-Formular auf dem Bildschirm des Spielers haben, öffnet es stattdessen dieses Formular für den Spieler in by.

Seite: Server · Wartet: nein · Lib: garages.impound

Signature
ImpoundVehicle(vehicle: number, by?: number): boolean
Lua
local taken = exports['ai-core']:ImpoundVehicle(vehicle, source)

Parameter

Prop

Type

Rückgabe

boolean: true, wenn das Garagen-Skript das Fahrzeug übernommen (oder sein Formular geöffnet) hat. false, wenn nichts es übernommen hat: Kein Garagen-Skript läuft, es hat keine Beschlagnahme, das Fahrzeug ist ihm unbekannt, oder vehicle ist kein existierendes Fahrzeug. Bei false ist das Fahrzeug noch in der Welt: Lösche es selbst, wenn es weg muss.

Beispiel

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

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

onClientCallback("myscript:impound", { args: oneArg(readId) }, (source, netId) => {
  if (core.GetDutyJob(source) !== "police") return fail("NOT_POLICE");
  const vehicle = vehicleNearPlayer(source, netId, { metres: 5 });
  if (!vehicle) return fail("TOO_FAR");
  if (!core.ImpoundVehicle(vehicle, source)) DeleteEntity(vehicle);
  return { ok: true };
});

StoreVehicleInGarage

Stellt ein Fahrzeug aus der Welt mit seinem Zustand in eine Garage.

Seite: Server · Wartet: nein · Lib: garages.store

Signature
StoreVehicleInGarage(vehicle: number, garage?: string | null, by?: number): boolean
Lua
local stored = exports['ai-core']:StoreVehicleInGarage(vehicle, 'legion', source)

Parameter

Prop

Type

Rückgabe

boolean: true, wenn das Garagen-Skript das Fahrzeug übernommen hat. false, wenn nichts es übernommen hat (kein Garagen-Skript, keine Einpark-Aktion, unbekannte Garage, ein Fahrzeug, das dem Skript nicht gehört) oder vehicle kein existierendes Fahrzeug ist.

Beispiel

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

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

// Ein Parkservice stellt das Auto, das der Spieler fährt, in die nächste Garage.
onClientCallback("myscript:valetStore", (source) => {
  const vehicle = vehicleOf(source, { driver: true });
  if (!vehicle) return fail("NOT_DRIVING");
  return core.StoreVehicleInGarage(vehicle, null, source) ? { ok: true } : fail("STORE_FAILED");
});

OpenGarage

Öffnet das Garagenmenü des aktiven Garagen-Skripts für einen Spieler.

Seite: Server · Wartet: nein · Lib: garages.open

Signature
OpenGarage(source: number, garage?: string | null): boolean
Lua
local opened = exports['ai-core']:OpenGarage(source, 'legion')

Parameter

Prop

Type

Rückgabe

boolean: true, wenn sich das Menü geöffnet hat. false, wenn der Spieler nicht online ist, kein Garagen-Skript läuft oder es kein Menü hat, das von außen geöffnet werden kann.

Beispiel

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

const core = resourceExport("ai-core");
const MOTEL_GARAGE = { x: 273.1, y: -343.9, z: 44.9 };

onClientCallback("myscript:motelGarage", { guards: [near(MOTEL_GARAGE, 3)] }, (source) =>
  core.OpenGarage(source, "motel") ? { ok: true } : fail("GARAGE_FAILED"),
);

GetGaragedVehicles

Die Fahrzeuge eines Spielers, die das Garagen-Skript verwahrt: in einer Garage oder in der Beschlagnahmestelle.

Seite: Server · Wartet: nein (antwortet über done) · Lib: garages.stored(source) gibt ein Promise zurück

Signature
GetGaragedVehicles(source: number, done: (vehicles: GaragedVehicle[] | null) => void): void
Lua
exports['ai-core']:GetGaragedVehicles(source, function(vehicles) end) -- Liste oder nil

Parameter

Prop

Type

Rückgabe

Nichts. done erhält einen Eintrag pro Fahrzeug mit plate, model (oder null), garage (oder null) und impounded (GaragedVehicle), oder null, wenn der Spieler nicht online ist, kein Garagen-Skript läuft, es keine Fahrzeuge auflisten kann oder fehlgeschlagen ist. Ohne eine Funktion als done tut der Aufruf nichts.

Beispiel

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

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

// Der Schalter der Beschlagnahmestelle listet die beschlagnahmten Autos des Spielers.
onClientCallback("myscript:impoundList", async (source) => {
  const list = await new Promise<GaragedVehicle[] | null>((resolve) => core.GetGaragedVehicles(source, resolve));
  if (!list) return fail("GARAGE_UNKNOWN");
  return { ok: true, plates: list.filter((v) => v.impounded).map((v) => v.plate) };
});

Auf dieser Seite