Véhicules et entités
nearestVehicle, drivenVehicle, waitForEntity, entityFromNetId et les helpers de propriétés de véhicule : trouver des véhicules et des entités côté client, et lire ou appliquer l’apparence d’un véhicule.
Trouver les véhicules proches du joueur, convertir les ids réseau envoyés par le serveur en entités locales, et lire ou appliquer l’apparence d’un véhicule. Faire apparaître un véhicule se fait uniquement côté serveur (spawnVehicle sur Véhicules) ; une voiture de showroom locale est un PreviewVehicle.
Trouver des véhicules
nearestVehicle
Le véhicule le plus proche du joueur local dans un rayon donné. Le véhicule dans lequel le joueur est assis passe en premier, sauf avec notOwn. Utilisez filter pour ignorer les véhicules qui ne conviennent pas, de sorte que le coffre derrière lequel se tient le joueur l’emporte sur une voiture plus proche à côté.
Côté : client · Attend : non
nearestVehicle(metres: number, options?: { networked?: boolean; notOwn?: boolean; filter?: (vehicle: number) => boolean }): numberlocal vehicle = aiLib.nearestVehicle(metres, options) -- 0 s’il n’y en a aucunParamètres
Prop
Type
Options
Prop
Type
Retour
number : le handle du véhicule, ou 0 quand aucun n’est dans le rayon metres.
Exemple
import { callAction, nearestVehicle, notify } from "@aicore-fivem/lib/client";
export async function impound(): Promise<void> {
const vehicle = nearestVehicle(5, { notOwn: true, filter: (v) => GetPedInVehicleSeat(v, -1) === 0 });
if (!vehicle) return notify("No empty vehicle near", "error");
await callAction("mypolice:impound", [NetworkGetNetworkIdFromEntity(vehicle)], { fallback: "IMPOUND_FAILED" });
}Il parcourt tous les véhicules que le client connaît : appelez-le donc sur une pression de touche ou une action, pas à chaque frame. Envoyez le véhicule au serveur sous forme d’id réseau ; le serveur le reconvertit avec vehicleFromNet ou vehicleNearPlayer et vérifie la distance.
drivenVehicle
Le véhicule que conduit le joueur local (assis sur le siège conducteur).
Côté : client · Attend : non
drivenVehicle(): number | falsePas d’équivalent Lua : aiLib.cache.seat == -1 and aiLib.cache.vehicle.
Retour
number | false : le handle du véhicule quand le joueur est le conducteur, false à pied ou en tant que passager.
Exemple
import { drivenVehicle, notify } from "@aicore-fivem/lib/client";
RegisterCommand(
"flip",
() => {
const vehicle = drivenVehicle();
if (vehicle === false) return notify("You must drive a vehicle", "error");
SetVehicleOnGroundProperly(vehicle);
},
false,
);Entités depuis des ids réseau
Le serveur envoie les entités sous forme d’ids réseau. Sur un client, l’entité peut ne pas encore exister (le joueur est loin, ou elle vient d’être créée).
waitForEntity
Attend que l’entité d’un id réseau existe sur ce client et la renvoie.
Côté : client · Attend : oui (Promise en TypeScript, cède la main (yield) du thread en Lua)
waitForEntity(netId: number, timeoutMs?: number): Promise<number>local entity = aiLib.waitForEntity(netId, timeout) -- à appeler dans un threadParamètres
Prop
Type
Retour
Promise<number> : le handle de l’entité locale, ou 0 après le délai. Elle n’est jamais rejetée.
Exemple
import { onServerEvent, waitForEntity } from "@aicore-fivem/lib/client";
import { readId } from "@aicore-fivem/lib/shared";
// Le serveur a fait apparaître un véhicule de métier et envoie son id réseau.
onServerEvent(
"myjob:vehicle",
{ args: ([id]) => { const netId = readId(id); return netId === null ? null : [netId]; } },
async (netId) => {
const vehicle = await waitForEntity(netId);
if (vehicle) SetVehicleFuelLevel(vehicle, 100);
},
);entityFromNetId
L’entité locale d’un id réseau à l’instant, sans attendre. Vérifie éventuellement le type de l’entité.
Côté : client · Attend : non
entityFromNetId(netId: number, type?: 1 | 2 | 3): numberPas d’équivalent Lua : NetworkDoesEntityExistWithNetworkId(netId) and NetToEnt(netId) or 0.
Paramètres
Prop
Type
Retour
number : le handle de l’entité, ou 0 quand elle n’est pas sur ce client ou n’est pas du type type.
Exemple
import { entityFromNetId, EntityState, stateBoolean } from "@aicore-fivem/lib/client";
const sirens = new EntityState("sirensMuted", stateBoolean);
sirens.onChange((netId, muted) => {
const vehicle = entityFromNetId(netId, 2);
if (vehicle) SetVehicleHasMutedSirens(vehicle, muted === true);
});Apparence du véhicule
getVehicleProps
Lit toutes les propriétés d’un véhicule que ce client peut voir : plaque, couleurs, mods, extras, néons, dégâts. Stockez le résultat pour remettre plus tard la même apparence.
Côté : client · Attend : non
getVehicleProps(vehicle: number): VehiclePropsPas d’équivalent Lua.
Paramètres
Prop
Type
Retour
VehicleProps : v (version de format 1), model, plate (sans espaces superflus), plateIndex, colors, extraColors, customPrimary, customSecondary (RGB ou null), wheelType, windowTint, livery, mods (par type de mod 0-49 ; les mods à bascule 17-22 valent 1 ou 0), xenonColor, neon (quatre booléens), neonColor, tyreSmoke, extras (par id d’extra), dirt, engineHealth, bodyHealth.
Exemple
import { callAction, drivenVehicle, getVehicleProps } from "@aicore-fivem/lib/client";
export async function saveLook(): Promise<void> {
const vehicle = drivenVehicle();
if (vehicle === false) return;
await callAction("mygarage:saveProps", [NetworkGetNetworkIdFromEntity(vehicle), getVehicleProps(vehicle)], { fallback: "SAVE_FAILED" });
}Les propriétés viennent du client du joueur : le serveur doit les analyser et les vérifier (toVehicleProps de @aicore-fivem/lib/shared) avant de les stocker.
setVehicleProps
Applique des propriétés stockées à un véhicule. Ne fonctionne que sur un véhicule que ce client contrôle ; les autres joueurs reçoivent l’apparence par le réseau.
Côté : client · Attend : non
setVehicleProps(vehicle: number, props: VehicleProps): voidPas d’équivalent Lua.
Paramètres
Prop
Type
Retour
void.
Exemple
import { onServerEvent, setVehicleProps, waitForEntity } from "@aicore-fivem/lib/client";
import { readId, toVehicleProps } from "@aicore-fivem/lib/shared";
onServerEvent(
"mygarage:look",
{
args: ([id, raw]) => {
const netId = readId(id);
const props = toVehicleProps(raw);
return netId === null || props === null ? null : [netId, props];
},
},
async (netId, props) => {
const vehicle = await waitForEntity(netId);
if (vehicle && NetworkHasControlOfEntity(vehicle)) setVehicleProps(vehicle, props);
},
);Un véhicule apparu avec spawnVehicle({ props }) reçoit déjà son apparence, appliquée par ai-core sur le client propriétaire. Vous n’avez besoin de setVehicleProps que pour vos propres flux.
setVehicleSetup
Applique une configuration d’apparition à un véhicule tout juste créé : performances au maximum, couleurs, livrée, teinte des vitres, saleté, moteur allumé. Ne fonctionne que sur un véhicule que ce client contrôle.
Côté : client · Attend : non
setVehicleSetup(vehicle: number, setup: VehicleSetup): voidPas d’équivalent Lua.
Paramètres
Prop
Type
VehicleSetup
Prop
Type
Le type est VehicleSetup.
Retour
void.
Exemple
import { PreviewVehicle, setVehicleSetup } from "@aicore-fivem/lib/client";
const preview = new PreviewVehicle();
export function showMaxed(model: string): Promise<number> {
return preview.show(model, { x: -44.4, y: -1097.1, z: 26.4, heading: 120 }, (vehicle) =>
setVehicleSetup(vehicle, { maxed: true, primary: [20, 200, 120], windowTint: 1 }),
);
}Couches via ai-core
medical, appearance, gestures, seatbelt, fuel, mdt, radial, world et inventory : des appels client qui atteignent le script de mort, de vêtements, d’emotes, de ceinture, de carburant, de MDT, de menu radial, de météo ou d’inventaire que fait tourner le serveur.
Sondes et chargement
raycast, groundZ, locationName, vehicleLabel, waypoint, pedHeadshot, onShot et les chargeurs request : interroger le jeu sur le monde et charger les assets du jeu.