Vehículos y entidades
nearestVehicle, drivenVehicle, waitForEntity, entityFromNetId y las utilidades de props de vehículo - encontrar vehículos y entidades en el cliente y leer o aplicar el aspecto de un vehículo.
Encontrar vehículos cerca del jugador, convertir los network ids del servidor en entidades locales y leer o aplicar el aspecto de un vehículo. Hacer aparecer un vehículo es solo de servidor (spawnVehicle en Vehículos); un coche local de exposición es PreviewVehicle.
Encontrar vehículos
nearestVehicle
El vehículo más cercano al jugador local dentro de una distancia. El vehículo en el que está sentado el jugador gana primero, salvo con notOwn. Usa filter para omitir los vehículos que no encajan, para que el maletero detrás del que está el jugador gane a un coche más cercano a su lado.
Lado: Cliente · Espera: no
nearestVehicle(metres: number, options?: { networked?: boolean; notOwn?: boolean; filter?: (vehicle: number) => boolean }): numberlocal vehicle = aiLib.nearestVehicle(metres, options) -- 0 cuando no hay ningunoParámetros
Prop
Type
Opciones
Prop
Type
Devuelve
number: el handle del vehículo, o 0 cuando no hay ninguno a menos de metres.
Ejemplo
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" });
}Recorre todos los vehículos que conoce el cliente, así que llámalo al pulsar una tecla o en una acción, no en cada frame. Envía el vehículo al servidor como network id; el servidor lo convierte de vuelta con vehicleFromNet o vehicleNearPlayer y comprueba la distancia.
drivenVehicle
El vehículo que conduce el jugador local (sentado en el asiento del conductor).
Lado: Cliente · Espera: no
drivenVehicle(): number | falseSin equivalente en Lua: aiLib.cache.seat == -1 and aiLib.cache.vehicle.
Devuelve
number | false: el handle del vehículo cuando el jugador es el conductor, false a pie o como pasajero.
Ejemplo
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,
);Entidades a partir de network ids
El servidor envía las entidades como network ids. En un cliente puede que la entidad aún no exista (el jugador está lejos, o se acaba de crear).
waitForEntity
Espera hasta que la entidad de un network id existe en este cliente y la devuelve.
Lado: Cliente · Espera: sí (Promise en TypeScript, cede el hilo en Lua)
waitForEntity(netId: number, timeoutMs?: number): Promise<number>local entity = aiLib.waitForEntity(netId, timeout) -- llamar dentro de un hiloParámetros
Prop
Type
Devuelve
Promise<number>: el handle de la entidad local, o 0 tras el tiempo límite. Nunca se rechaza.
Ejemplo
import { onServerEvent, waitForEntity } from "@aicore-fivem/lib/client";
import { readId } from "@aicore-fivem/lib/shared";
// El servidor hizo aparecer un vehículo de trabajo y envía su 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
La entidad local de un network id ahora mismo, sin esperar. Opcionalmente comprueba el tipo de entidad.
Lado: Cliente · Espera: no
entityFromNetId(netId: number, type?: 1 | 2 | 3): numberSin equivalente en Lua: NetworkDoesEntityExistWithNetworkId(netId) and NetToEnt(netId) or 0.
Parámetros
Prop
Type
Devuelve
number: el handle de la entidad, o 0 cuando no está en este cliente o no es de type.
Ejemplo
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);
});Aspecto del vehículo
getVehicleProps
Lee todas las propiedades de un vehículo que este cliente puede ver: matrícula, colores, mejoras, extras, neón, daños. Guarda el resultado para volver a poner el mismo aspecto más tarde.
Lado: Cliente · Espera: no
getVehicleProps(vehicle: number): VehiclePropsSin equivalente en Lua.
Parámetros
Prop
Type
Devuelve
VehicleProps: v (versión de formato 1), model, plate (recortada), plateIndex, colors, extraColors, customPrimary, customSecondary (RGB o null), wheelType, windowTint, livery, mods (por tipo de mejora 0-49; las mejoras de activar/desactivar 17-22 como 1 o 0), xenonColor, neon (cuatro booleanos), neonColor, tyreSmoke, extras (por id de extra), dirt, engineHealth, bodyHealth.
Ejemplo
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" });
}Las props vienen del cliente del jugador: el servidor debe procesarlas y comprobarlas (toVehicleProps de @aicore-fivem/lib/shared) antes de guardarlas.
setVehicleProps
Aplica propiedades guardadas a un vehículo. Solo funciona en un vehículo que este cliente controla; los demás jugadores reciben el aspecto a través de la red.
Lado: Cliente · Espera: no
setVehicleProps(vehicle: number, props: VehicleProps): voidSin equivalente en Lua.
Parámetros
Prop
Type
Devuelve
void.
Ejemplo
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 vehículo creado con spawnVehicle({ props }) ya recibe su aspecto aplicado por ai-core en el cliente dueño. Solo necesitas setVehicleProps para tus propios flujos.
setVehicleSetup
Aplica una configuración de spawn a un vehículo nuevo: rendimiento al máximo, colores, livery, tintado, suciedad, motor encendido. Solo funciona en un vehículo que este cliente controla.
Lado: Cliente · Espera: no
setVehicleSetup(vehicle: number, setup: VehicleSetup): voidSin equivalente en Lua.
Parámetros
Prop
Type
VehicleSetup
Prop
Type
El tipo es VehicleSetup.
Devuelve
void.
Ejemplo
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 }),
);
}Capas a través de ai-core
medical, appearance, gestures, seatbelt, fuel, mdt, radial, world e inventory - llamadas de cliente que llegan al script de muerte, ropa, emotes, cinturón, combustible, MDT, menú radial, clima o inventario que use el servidor.
Sondeos y carga
raycast, groundZ, locationName, vehicleLabel, waypoint, pedHeadshot, onShot y los cargadores request - preguntar al juego sobre el mundo y cargar recursos del juego.