AI Core
Dokumentacja APIAI Core: eksporty serwerowe

Garaże

Odholowuj i odstawiaj pojazdy, otwieraj menu garażu i wyświetlaj pojazdy gracza w garażu przez skrypt garażu, którego używa serwer.

Wywołania garażu przechodzą przez ai-core, nigdy przez własne eksporty lub zdarzenia skryptu garażu (łącznie z ai-garages). ai-core przekazuje każde wywołanie do aktywnego skryptu garażu: tego, który wybiera ustawienie Garage script w panelu, albo pierwszego działającego (ai-garages, jg-advancedgarages, tgiann-realparking i inne z listy zgodności). Każdy skrypt odpowiada tylko na akcje, które naprawdę ma, więc każda akcja może odpowiedzieć false lub null przy jednym skrypcie i działać przy innym.

Pojazd to serwerowy uchwyt encji.

GetGarageSystem

Nazwa zasobu skryptu garażu, do którego ai-core przekazuje wywołania.

Strona: Serwer · Czeka: nie · Lib: garages.provider()

Sygnatura
GetGarageSystem(): string | null
Lua
local system = exports['ai-core']:GetGarageSystem() -- string lub nil

Parametry

Brak.

Zwraca

string | null: nazwa zasobu skryptu garażu. null, gdy żaden nie działa.

Przykład

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

Wysyła pojazd ze świata na parking policyjny. Przy skryptach garażu, które mają tylko formularz odholowania na ekranie gracza, zamiast tego otwiera ten formularz dla gracza w by.

Strona: Serwer · Czeka: nie · Lib: garages.impound

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

Parametry

Prop

Type

Zwraca

boolean: true, gdy skrypt garażu przejął pojazd (lub otworzył swój formularz). false, gdy nic go nie przejęło: nie działa żaden skrypt garażu, nie ma parkingu policyjnego, pojazd nie jest mu znany albo vehicle nie jest istniejącym pojazdem. Przy false pojazd nadal jest w świecie: usuń go sam, jeśli musi zniknąć.

Przykład

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

Odstawia pojazd ze świata do garażu, z jego stanem.

Strona: Serwer · Czeka: nie · Lib: garages.store

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

Parametry

Prop

Type

Zwraca

boolean: true, gdy skrypt garażu przejął pojazd. false, gdy nic go nie przejęło (brak skryptu garażu, brak akcji odstawienia, nieznany garaż, pojazd, który nie należy do skryptu) albo vehicle nie jest istniejącym pojazdem.

Przykład

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

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

// Parkingowy odstawia samochód, którym jedzie gracz, do najbliższego garażu.
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

Otwiera menu garażu aktywnego skryptu garażu dla gracza.

Strona: Serwer · Czeka: nie · Lib: garages.open

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

Parametry

Prop

Type

Zwraca

boolean: true, gdy menu się otworzyło. false, gdy gracz nie jest online, nie działa żaden skrypt garażu albo nie ma menu, które da się otworzyć z zewnątrz.

Przykład

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

Pojazdy gracza trzymane przez skrypt garażu: w garażu albo na parkingu policyjnym.

Strona: Serwer · Czeka: nie (odpowiada przez done) · Lib: garages.stored(source) zwraca Promise

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

Parametry

Prop

Type

Zwraca

Nic. done dostaje jeden wpis na pojazd z plate, model (lub null), garage (lub null) i impounded (GaragedVehicle) albo null, gdy gracz nie jest online, nie działa żaden skrypt garażu, nie umie wyświetlić pojazdów albo zawiódł. Bez funkcji jako done wywołanie nic nie robi.

Przykład

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");

// Okienko parkingu policyjnego wyświetla odholowane samochody gracza.
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) };
});

Na tej stronie