Fahrzeuge und Entities
nearestVehicle, drivenVehicle, waitForEntity, entityFromNetId und die Helfer für Fahrzeug-Props - Fahrzeuge und Entities auf dem Client finden und das Aussehen eines Fahrzeugs lesen oder anwenden.
Fahrzeuge in der Nähe des Spielers finden, Netzwerk-IDs vom Server in lokale Entities umwandeln und das Aussehen eines Fahrzeugs lesen oder anwenden. Ein Fahrzeug zu spawnen geht nur auf dem Server (spawnVehicle auf Fahrzeuge); ein lokales Ausstellungsauto ist PreviewVehicle.
Fahrzeuge finden
nearestVehicle
Das nächstgelegene Fahrzeug innerhalb einer Entfernung um den lokalen Spieler. Das Fahrzeug, in dem der Spieler sitzt, hat Vorrang, außer bei notOwn. Nutze filter, um Fahrzeuge zu überspringen, die nicht passen, damit der Kofferraum, hinter dem der Spieler steht, vor einem näheren Auto daneben gewinnt.
Seite: Client · Wartet: nein
nearestVehicle(metres: number, options?: { networked?: boolean; notOwn?: boolean; filter?: (vehicle: number) => boolean }): numberlocal vehicle = aiLib.nearestVehicle(metres, options) -- 0, wenn keinsParameter
Prop
Type
Optionen
Prop
Type
Rückgabewert
number: das Fahrzeug-Handle, oder 0, wenn keins innerhalb von metres ist.
Beispiel
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" });
}Es geht jedes Fahrzeug durch, das der Client kennt, rufe es also bei einem Tastendruck oder einer Aktion auf, nicht in jedem Frame. Sende das Fahrzeug als Netzwerk-ID an den Server; der Server wandelt es mit vehicleFromNet oder vehicleNearPlayer zurück und prüft die Entfernung.
drivenVehicle
Das Fahrzeug, das der lokale Spieler fährt (er sitzt auf dem Fahrersitz).
Seite: Client · Wartet: nein
drivenVehicle(): number | falseKein Lua-Zwilling: aiLib.cache.seat == -1 and aiLib.cache.vehicle.
Rückgabewert
number | false: das Fahrzeug-Handle, wenn der Spieler der Fahrer ist, false zu Fuß oder als Beifahrer.
Beispiel
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,
);Entities aus Netzwerk-IDs
Der Server sendet Entities als Netzwerk-IDs. Auf einem Client existiert die Entity eventuell noch nicht (der Spieler ist weit weg, oder sie wurde gerade erstellt).
waitForEntity
Wartet, bis die Entity einer Netzwerk-ID auf diesem Client existiert, und gibt sie zurück.
Seite: Client · Wartet: ja (Promise in TypeScript, hält in Lua den Thread an)
waitForEntity(netId: number, timeoutMs?: number): Promise<number>local entity = aiLib.waitForEntity(netId, timeout) -- innerhalb eines Threads aufrufenParameter
Prop
Type
Rückgabewert
Promise<number>: das lokale Entity-Handle, oder 0 nach dem Timeout. Es wird nie abgelehnt.
Beispiel
import { onServerEvent, waitForEntity } from "@aicore-fivem/lib/client";
import { readId } from "@aicore-fivem/lib/shared";
// Der Server hat ein Job-Fahrzeug gespawnt und sendet seine Net-ID.
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
Die lokale Entity einer Netzwerk-ID genau jetzt, ohne zu warten. Prüft optional den Entity-Typ.
Seite: Client · Wartet: nein
entityFromNetId(netId: number, type?: 1 | 2 | 3): numberKein Lua-Zwilling: NetworkDoesEntityExistWithNetworkId(netId) and NetToEnt(netId) or 0.
Parameter
Prop
Type
Rückgabewert
number: das Entity-Handle, oder 0, wenn sie nicht auf diesem Client ist oder nicht vom Typ type.
Beispiel
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);
});Aussehen von Fahrzeugen
getVehicleProps
Liest jede Eigenschaft eines Fahrzeugs, das dieser Client sehen kann: Kennzeichen, Farben, Mods, Extras, Neon, Schaden. Speichere das Ergebnis, um später dasselbe Aussehen wiederherzustellen.
Seite: Client · Wartet: nein
getVehicleProps(vehicle: number): VehiclePropsKein Lua-Zwilling.
Parameter
Prop
Type
Rückgabewert
VehicleProps: v (Formatversion 1), model, plate (getrimmt), plateIndex, colors, extraColors, customPrimary, customSecondary (RGB oder null), wheelType, windowTint, livery, mods (nach Mod-Typ 0-49; Schalt-Mods 17-22 als 1 oder 0), xenonColor, neon (vier Booleans), neonColor, tyreSmoke, extras (nach Extra-ID), dirt, engineHealth, bodyHealth.
Beispiel
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" });
}Die Props kommen vom Client des Spielers: Der Server muss sie parsen und prüfen (toVehicleProps aus @aicore-fivem/lib/shared), bevor er sie speichert.
setVehicleProps
Wendet gespeicherte Eigenschaften auf ein Fahrzeug an. Funktioniert nur bei einem Fahrzeug, das dieser Client kontrolliert; andere Spieler bekommen das Aussehen über das Netzwerk.
Seite: Client · Wartet: nein
setVehicleProps(vehicle: number, props: VehicleProps): voidKein Lua-Zwilling.
Parameter
Prop
Type
Rückgabewert
void.
Beispiel
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);
},
);Ein Fahrzeug, das mit spawnVehicle({ props }) gespawnt wurde, bekommt sein Aussehen bereits von ai-core auf dem besitzenden Client angewendet. setVehicleProps brauchst du nur für deine eigenen Abläufe.
setVehicleSetup
Wendet ein Spawn-Setup auf ein neues Fahrzeug an: maximale Leistung, Farben, Lackierung, Tönung, Schmutz, Motor an. Funktioniert nur bei einem Fahrzeug, das dieser Client kontrolliert.
Seite: Client · Wartet: nein
setVehicleSetup(vehicle: number, setup: VehicleSetup): voidKein Lua-Zwilling.
Parameter
Prop
Type
VehicleSetup
Prop
Type
Der Typ ist VehicleSetup.
Rückgabewert
void.
Beispiel
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 }),
);
}Ebenen über ai-core
medical, appearance, gestures, seatbelt, fuel, mdt, radial, world und inventory - Client-Aufrufe, die das Death-, Kleidungs-, Emote-, Gurt-, Sprit-, MDT-, Radial-, Wetter- oder Inventar-Skript erreichen, das der Server betreibt.
Abfragen und Laden
raycast, groundZ, locationName, vehicleLabel, waypoint, pedHeadshot, onShot und die request-Lader - das Spiel nach der Welt fragen und Spiel-Assets laden.