AI Core
Referencia de la APIAI Core: exports de servidor

Garajes

Envía vehículos al depósito y guárdalos, abre un menú de garaje y lista los vehículos guardados de un jugador a través del script de garajes que tenga el servidor.

Las llamadas de garaje pasan por ai-core, nunca por los exports o eventos propios de un script de garajes (ai-garages incluido). ai-core reenvía cada llamada al script de garajes activo: el que elige el ajuste Garage script (script de garajes) del panel, o el primero que esté en marcha (ai-garages, jg-advancedgarages, tgiann-realparking y los demás de la lista de compatibilidad). Cada script solo responde a las acciones que tiene de verdad, así que cualquier acción puede responder false o null con un script y funcionar con otro.

Un vehículo es un handle de entidad del servidor.

GetGarageSystem

El nombre de recurso del script de garajes al que reenvía ai-core.

Lado: Servidor · Espera: no · Lib: garages.provider()

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

Parámetros

Ninguno.

Devuelve

string | null: el nombre de recurso del script de garajes. null cuando no hay ninguno en marcha.

Ejemplo

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

Envía al depósito un vehículo que está en el mundo. Con scripts de garajes que solo tienen un formulario de depósito en la pantalla del jugador, en su lugar abre ese formulario para el jugador indicado en by.

Lado: Servidor · Espera: no · Lib: garages.impound

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

Parámetros

Prop

Type

Devuelve

boolean: true cuando el script de garajes se hizo cargo del vehículo (o abrió su formulario). false cuando nada lo recogió: no hay ningún script de garajes en marcha, no tiene depósito, el vehículo no es uno que conozca o vehicle no es un vehículo existente. Con false el vehículo sigue en el mundo: bórralo tú si debe desaparecer.

Ejemplo

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

Guarda en un garaje un vehículo que está en el mundo, con su estado.

Lado: Servidor · Espera: no · Lib: garages.store

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

Parámetros

Prop

Type

Devuelve

boolean: true cuando el script de garajes recogió el vehículo. false cuando nada lo recogió (no hay script de garajes, no hay acción de guardar, garaje desconocido, un vehículo que no es del script) o vehicle no es un vehículo existente.

Ejemplo

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

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

// Un aparcacoches guarda el coche que conduce el jugador en el garaje más cercano.
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

Abre el menú de garaje del script de garajes activo para un jugador.

Lado: Servidor · Espera: no · Lib: garages.open

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

Parámetros

Prop

Type

Devuelve

boolean: true cuando se abrió el menú. false cuando el jugador no está conectado, no hay ningún script de garajes en marcha o no tiene un menú que se pueda abrir desde fuera.

Ejemplo

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

Los vehículos de un jugador que guarda el script de garajes: en un garaje o en el depósito.

Lado: Servidor · Espera: no (responde mediante done) · Lib: garages.stored(source) devuelve una Promise

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

Parámetros

Prop

Type

Devuelve

Nada. done recibe una entrada por vehículo con plate, model (o null), garage (o null) e impounded (GaragedVehicle), o null cuando el jugador no está conectado, no hay ningún script de garajes en marcha, no puede listar vehículos o falló. Sin una función como done la llamada no hace nada.

Ejemplo

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

// El mostrador del depósito lista los coches del jugador que están en el depósito.
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) };
});

En esta página