AI Core
Referencia de la APILib: cliente

Peds, blips y props

LocalPed, Blips, createBlip, attachProp, PreviewVehicle y player.holdAnim - NPC locales, blips del mapa, props en la mano, vehículos de exposición y animaciones mantenidas.

Cosas que solo ve este cliente: un NPC detrás de un mostrador, blips del mapa, un prop en la mano del jugador, un coche de exposición. Ninguno está en red, así que nunca chocan con el bloqueo de entidades y no le cuestan nada al servidor. Un punto ya crea su propio NPC y su blip (ped y blip de points.add); usa estas clases para los que no tienen un punto.

Peds locales

new LocalPed

Un ped que solo ve este cliente (un tendero, un NPC de trabajo). Se crea cuando el jugador se acerca a menos de distance de coords y se elimina cuando se aleja, así que mil NPC en el mapa no cuestan nada hasta que alguien se acerca. Está quieto y congelado, no puede recibir daño e ignora los eventos (disparos, empujones).

Lado: Cliente · Espera: no (el modelo se carga en segundo plano cuando el jugador se acerca)

Firma
new LocalPed(options: LocalPedOptions)
Lua
local ped = aiLib.LocalPed.new(options)

Parámetros

Prop

Type

LocalPedOptions

Prop

Type

Miembros

Prop

Type

Ejemplo

import { LocalPed } from "@aicore-fivem/lib/client";

const guard = new LocalPed({
  model: "s_m_m_security_01",
  coords: { x: -1037.6, y: -2737.8, z: 20.2, heading: 330 },
  scenario: "WORLD_HUMAN_GUARD_STAND",
  distance: 80,
  onSpawn: (ped) => SetPedComponentVariation(ped, 0, 1, 0, 0),
});

// Más tarde, cuando termina el trabajo:
guard.remove();

La distancia se mide desde coords, no desde un padre al que está unido. Un ped que sigue a una entidad en movimiento (attach o seat en un vehículo que se va) necesita una distance grande y su propia comprobación de alcance, o se queda donde se creó.

Blips

createBlip

Crea un blip con nombre en el mapa y devuelve su handle. Lo quitas tú mismo con RemoveBlip(handle); para los blips que reconstruyes cuando cambia el panel, usa un grupo Blips.

Lado: Cliente · Espera: no

Firma
createBlip(options: BlipOptions): number
Lua
local blip = aiLib.Blips.create(options)

Parámetros

Prop

Type

BlipOptions

Prop

Type

Un estilo de blip elegido en tu panel de administración (el widget blip, leído con readBlipStyle) se expande directamente en estas opciones: createBlip({ ...style, coords, label }).

Devuelve

number: el handle del blip.

Ejemplo

import { createBlip, createLocale } from "@aicore-fivem/lib/client";

const Locale = createLocale<typeof import("../../locales/en.json")>();

// Un destino de entrega con ruta GPS; se quita al entregar.
const target = createBlip({
  coords: { x: 1197.4, y: -3253.6, z: 7.1 },
  sprite: 478,
  color: 5,
  label: Locale("DELIVERY"),
  shortRange: false,
  route: true,
});
// ... al entregar:
RemoveBlip(target);

new Blips

Un grupo de blips por id: add reemplaza un blip con el mismo id y clear los quita todos. Usa un grupo por funcionalidad.

Lado: Cliente · Espera: no

Firma
new Blips()
Lua
local blips = aiLib.Blips.new()

Métodos

Prop

Type

En Lua llama a los métodos con dos puntos: blips:add(id, options).

Ejemplo

import { Blips, createLocale } from "@aicore-fivem/lib/client";

const Locale = createLocale<typeof import("../../locales/en.json")>();
const blips = new Blips();

const GARAGES = [
  { id: "legion", coords: { x: 215.8, y: -810.1, z: 30.7 } },
  { id: "airport", coords: { x: -796.5, y: -2023.3, z: 9.2 } },
];

for (const garage of GARAGES)
  blips.add(garage.id, { coords: garage.coords, sprite: 357, color: 3, label: Locale("GARAGE") });

// Se cerró un garaje:
blips.remove("airport");

Props y animaciones mantenidas

attachProp

Crea un prop local y lo une a un hueso de un ped (un teléfono en la mano, una caja llevada delante). El prop no tiene colisión salvo que la pidas.

Lado: Cliente · Espera: sí (Promise: primero carga el modelo)

Firma
attachProp(model: string | number, options: AttachPropOptions): Promise<number>

Sin equivalente en Lua: crea el objeto y llama tú mismo a AttachEntityToEntity.

Parámetros

Prop

Type

AttachPropOptions

Prop

Type

Devuelve

Promise<number>: la entidad del prop, o 0 cuando el modelo no carga o el ped ya no existe. Nunca se rechaza.

Ejemplo

import { attachProp, player } from "@aicore-fivem/lib/client";

export async function readNewspaper(): Promise<void> {
  const paper = await attachProp("prop_cliff_paper", {
    bone: 18905,
    offset: { x: 0.12, y: 0.03, z: 0.02 },
    rotation: { x: 10, y: 0, z: 0 },
  });
  const hold = player.holdAnim("amb@world_human_tourist_map@male@base", "base");
  setTimeout(() => {
    hold.stop();
    if (paper) DeleteEntity(paper);
  }, 10_000);
}

El prop lo eliminas tú mismo con DeleteEntity. Los props que olvidaste se eliminan cuando tu recurso se detiene.

player.holdAnim

Mantiene una animación en reproducción hasta que la detienes. Cuando una caída, un golpe o un ragdoll la interrumpe, se vuelve a poner en medio segundo. Úsalo para cargar algo, sostener un teléfono o un bucle de trabajo. Una animación mantenida por recurso: una nueva reemplaza la anterior.

Lado: Cliente · Espera: no

Firma
player.holdAnim(dict: string, clip: string, options?: HoldAnimOptions): { stop(): void }

Sin equivalente en Lua: reproduce la animación con aiLib.player.playAnim y compruébala con una tarea aiLib.every.

Parámetros

Prop

Type

HoldAnimOptions

Prop

Type

Devuelve

{ stop(): void }: llama a stop() para terminar la animación mantenida y limpiar las tareas del ped. Llamar a stop() en una animación mantenida que ya fue reemplazada no hace nada.

Ejemplo

import { attachProp, cache, player } from "@aicore-fivem/lib/client";

export async function carryBox(): Promise<void> {
  const box = await attachProp("hei_prop_heist_box", {
    bone: 60309,
    offset: { x: 0.025, y: 0.08, z: 0.255 },
    rotation: { x: -145, y: 290, z: 0 },
  });
  // Termina sola cuando el jugador se sube a un vehículo.
  player.holdAnim("anim@heists@box_carry@", "idle", {
    while: () => cache.vehicle === false,
  });
  setTimeout(() => box && DeleteEntity(box), 60_000);
}

Vehículos de exposición

new PreviewVehicle

Un vehículo local de vista previa para exposiciones y tiendas: congelado, no se puede dañar, cerrado y limpio. Mostrar un modelo nuevo reemplaza el anterior, y la última llamada siempre gana (una llamada anterior que aún carga su modelo no hace nada). Se elimina con clear() y cuando tu recurso se detiene. Nada está en red.

Lado: Cliente · Espera: show sí (Promise)

Firma
new PreviewVehicle()

Sin equivalente en Lua.

Miembros

Prop

Type

Ejemplo

import { PreviewVehicle, setVehicleSetup } from "@aicore-fivem/lib/client";

const preview = new PreviewVehicle();
const STAGE = { x: -44.4, y: -1097.1, z: 26.4, heading: 120 };

export async function showCar(model: string, color: number): Promise<void> {
  const vehicle = await preview.show(model, STAGE, (v) => setVehicleSetup(v, { colors: [color, color] }));
  if (vehicle) SetVehicleNumberPlateText(vehicle, "SHOWROOM");
}

export function leaveShowroom(): void {
  preview.clear();
}

En esta página