Garages
Mettre en fourrière et ranger des véhicules, ouvrir un menu de garage et lister les véhicules garés d’un joueur via le script de garages qu’utilise le serveur.
Les appels de garages passent par ai-core, jamais par les exports ou événements propres à un script de garages (ai-garages compris). ai-core transmet chaque appel au script de garages actif : celui que choisit le réglage Garage script du panneau, ou le premier qui tourne (ai-garages, jg-advancedgarages, tgiann-realparking et les autres de la liste de compatibilité). Chaque script ne répond qu’aux actions qu’il possède vraiment, si bien qu’une action peut répondre false ou null avec un script et fonctionner avec un autre.
Un véhicule est un handle d’entité serveur.
GetGarageSystem
Le nom de ressource du script de garages auquel ai-core transmet.
Côté : Serveur · Attend : non · Lib : garages.provider()
GetGarageSystem(): string | nulllocal system = exports['ai-core']:GetGarageSystem() -- string ou nilParamètres
Aucun.
Retour
string | null : le nom de ressource du script de garages. null quand aucun ne tourne.
Exemple
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
Envoie à la fourrière un véhicule présent dans le monde. Avec les scripts de garages qui n’ont qu’un formulaire de fourrière sur l’écran du joueur, il ouvre plutôt ce formulaire pour le joueur by.
Côté : Serveur · Attend : non · Lib : garages.impound
ImpoundVehicle(vehicle: number, by?: number): booleanlocal taken = exports['ai-core']:ImpoundVehicle(vehicle, source)Paramètres
Prop
Type
Retour
boolean : true quand le script de garages a pris le véhicule en charge (ou ouvert son formulaire). false quand rien ne l’a pris : aucun script de garages ne tourne, il n’a pas de fourrière, le véhicule n’est pas un véhicule qu’il connaît, ou vehicle n’est pas un véhicule existant. Avec false, le véhicule est toujours dans le monde : supprimez-le vous-même s’il doit partir.
Exemple
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
Range un véhicule présent dans le monde dans un garage, avec son état.
Côté : Serveur · Attend : non · Lib : garages.store
StoreVehicleInGarage(vehicle: number, garage?: string | null, by?: number): booleanlocal stored = exports['ai-core']:StoreVehicleInGarage(vehicle, 'legion', source)Paramètres
Prop
Type
Retour
boolean : true quand le script de garages a pris le véhicule. false quand rien ne l’a pris (aucun script de garages, pas d’action de rangement, garage inconnu, un véhicule que le script ne possède pas) ou que vehicle n’est pas un véhicule existant.
Exemple
import { onClientCallback, resourceExport, vehicleOf } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";
const core = resourceExport("ai-core");
// Un voiturier range la voiture que conduit le joueur dans le garage le plus proche.
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
Ouvre le menu de garage du script de garages actif pour un joueur.
Côté : Serveur · Attend : non · Lib : garages.open
OpenGarage(source: number, garage?: string | null): booleanlocal opened = exports['ai-core']:OpenGarage(source, 'legion')Paramètres
Prop
Type
Retour
boolean : true quand le menu s’est ouvert. false quand le joueur n’est pas en ligne, qu’aucun script de garages ne tourne ou qu’il n’a pas de menu ouvrable depuis l’extérieur.
Exemple
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
Les véhicules d’un joueur gardés par le script de garages : dans un garage ou à la fourrière.
Côté : Serveur · Attend : non (répond via done) · Lib : garages.stored(source) renvoie une Promise
GetGaragedVehicles(source: number, done: (vehicles: GaragedVehicle[] | null) => void): voidexports['ai-core']:GetGaragedVehicles(source, function(vehicles) end) -- liste ou nilParamètres
Prop
Type
Retour
Rien. done reçoit une entrée par véhicule avec plate, model (ou null), garage (ou null) et impounded (GaragedVehicle), ou null quand le joueur n’est pas en ligne, qu’aucun script de garages ne tourne, qu’il ne sait pas lister les véhicules ou qu’il a échoué. Sans fonction comme done, l’appel ne fait rien.
Exemple
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");
// Le guichet de la fourrière liste les voitures du joueur mises en fourrière.
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) };
});