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()
GetGarageSystem(): string | nulllocal system = exports['ai-core']:GetGarageSystem() -- string o nilPará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
ImpoundVehicle(vehicle: number, by?: number): booleanlocal 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
StoreVehicleInGarage(vehicle: number, garage?: string | null, by?: number): booleanlocal 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
OpenGarage(source: number, garage?: string | null): booleanlocal 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
GetGaragedVehicles(source: number, done: (vehicles: GaragedVehicle[] | null) => void): voidexports['ai-core']:GetGaragedVehicles(source, function(vehicles) end) -- lista o nilPará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) };
});