AI Core
Referencia de la API

Lib: cliente

@aicore-fivem/lib/client - cada utilidad de cliente con su firma, y su gemela en Lua de aiLib cuando existe.

TypeScript
import { Points, notify, progress, cache } from "@aicore-fivem/lib/client";

La entrada de cliente también reexporta las utilidades de /fivem (every, ByResource, Reasons, caller, onStop, plateOf, las de exports y de idioma, las clases de state bags): ver Lib: shared y fivem. La última columna nombra la gemela en Lua de aiLib (Lib para Lua).

Hablar con el servidor

UtilidadQuéLua
triggerServerCallback(name, args = [], timeoutMs?): Promise<unknown>Pregunta al servidor (allí onClientCallback); valida la respuesta.triggerServerCallback
onServerCallback(name, handler: (...args) => unknown): voidResponde al triggerClientCallback del servidor.onServerCallback
onServerEvent(name, handler) / onServerEvent(name, { args }, handler)Un evento de red del servidor; los emits que no vienen del servidor se descartan. args valida los datos.onServerEvent
fromServer(): booleanSi el evento que se está manejando vino del servidor.
callAction(name, args = [], { fallback, timeout?, silent? })Ejecuta una acción del servidor, muestra por sí misma el rechazo traducido y resuelve la respuesta ok o null.callAction
isActionOk(reply), replyError(reply, fallback)Leen un ActionResult a mano.
TypeScript
const reply = await callAction("buy", [itemId], { fallback: "BUY_FAILED" });
if (reply) notify(t("BOUGHT"), "success");

El jugador local

UtilidadQuéLua
cacheped, playerId, serverId, vehicle, seat, weapon (false = ninguno), mantenidos por el único vigilante de ai-core.cache
onCache(key, handler: (value, old) => void): voidSe ejecuta cuando cambia un valor en caché.cache.onChange
readPlayerState(ped), readWeapon(ped)Vehículo, asiento y arma de un ped en este momento.
player.coords(), player.heading(), player.distanceTo(point), player.ped()Lecturas de posición (desde la caché).player
player.freeze(state: boolean)Congela el ped.player.freeze
player.teleport(to: { x, y, z? }, { heading?, ground?, fade?, keepVehicle? }): Promise<void>Teletransporte tras un fundido con carga de colisiones; sin z cae al suelo.player.teleport
player.playAnim(dict, clip, options?): Promise<void>, player.stopAnim()Reproduce o detiene una animación.player.playAnim, player.stopAnim
player.holdAnim(dict, clip, { ...options, while? })Mantiene una animación hasta stop() o hasta que while() sea false.
fadeOut(ms = 300), fadeIn(ms = 400)Fundidos de pantalla; cada uno resuelve al terminar.fadeOut, fadeIn
getPlayerData(key), onPlayerData(key, handler): () => void, seedPlayerData(data)Los datos del jugador de ai-core (character, money, jobs, duty, job, gangs, activeGang, metadata).playerData.get, playerData.onChange
hasJob(jobs, minGrade = 0), inGang(gangs, minGrade = 0), onDutyIn(jobs)Comprobaciones de pertenencia (una lista vacía = todos).
onMembershipChange(fn)Cambiaron trabajos, servicio o bandas.
allows(rule: AccessRule): booleanSi el jugador puede usar un lugar (el online.allows del servidor decide lo mismo).
playerPed(serverId): numberEl ped de un jugador por id de servidor, 0 fuera de scope.playerPed
nearestPlayer(metres, { from?, filter? }): number | nullEl id de servidor del otro jugador más cercano.nearestPlayer

Lugares y el mundo

UtilidadQuéLua
new Points()Cada lugar que usa un jugador: prompt o target (lo elige el dueño), NPC, blip.Points.new()
points.add(id, { coords, label, icon?, radius?, height?, canShow?, onPressed, onEnter?, onExit?, ped?, blip?, world?, promptOnly?, preferTarget? })Añade un punto; label puede ser una función.points:add
points.addModel(id, { models, label, icon?, radius?, canShow?(entity), onPressed(entity), vehicles?, inVehicle? })Un punto en cada objeto de ciertos modelos (cajeros, sillas).points:addModel
points.addVehicle(id, { label, icon?, radius?, canShow?(vehicle), onPressed(vehicle) })Un punto en cada vehículo en red.points:addVehicle
points.remove(id), clear(), refresh(id?), isInside(id)Gestionan los puntos; refresh vuelve a leer canShow.
new Zones(): add(id, options), remove, clear, isInside, sizeÁreas sin interacción.Zones.new()
new LocalPed({ model, coords, ... }): entity, removeUn ped que solo ve este cliente, creado cerca del jugador.LocalPed.new()
new Blips(): add(id, options), get, remove, clear; createBlip(options)Blips con nombre.Blips.new(), Blips.create()
showPrompt(id, text, at?), hidePrompt(id), onPromptPressed(handler)El prompt de ai-lib a mano (Points lo usa).showPrompt, hidePrompt, onPromptPressed
new AdminWorld(files): get, onChange, view, recordsLa copia en el cliente de los archivos del panel sync: "all" de un script.
TypeScript
const points = new Points();
points.add("shop", {
  coords: { x: 25.7, y: -1347.3, z: 29.5 },
  label: t("OPEN_SHOP"),
  icon: "basket-shopping",
  blip: { sprite: 52, color: 2, scale: 0.8, label: t("SHOP") },
  onPressed: () => openShop(),
});

Interfaz

UtilidadQuéLua
notify(text, kind = "info", duration?)Una tarjeta de notificación.notify
progress({ label, duration, anim?, scenario?, face?, allowVehicle?, canCancel?, whileDead?, freeze?, disable? }): Promise<boolean>Una acción temporizada con la barra de ai-lib; false si se cancela.progress
cancelProgress(), isProgressRunning()Detienen o comprueban la barra de este recurso.progress.cancel(), progress.isRunning()
menu(request, onHover? | { onHover, onToggle }): Promise<string | null>El menú de ai-lib; resuelve con el id elegido.menu.show
input(request): Promise<Record<string, string | number> | null>El diálogo de entrada de ai-lib.input
itemPicker({ title, target? }): Promise<PickedItem[] | null>Herramientas de admin: la cuadrícula de objetos de ai-core.itemPicker
skillCheck(difficulty | difficulty[], keys = ["e"]): Promise<boolean>Prueba de habilidad ("easy" | "medium" | "hard" o { areaSize, speedMultiplier }).skillCheck
lockpick({ difficulty?, pins?, picks? }): Promise<"opened" | "broken" | "cancelled">Minijuego de forzar cerradura.lockpick
new NuiScreen(name, { cursor?, onClose?, closeCallback? }): open, close, send, on, isOpenUna NUI a pantalla completa: foco, HUD ocultos, mensaje de cierre, callbacks.
hud.hide(reason), hud.show(reason), hud.visible(), hud.onChange(fn)Ocultan los HUD alrededor de una interfaz a pantalla completa.hud
keyHints.show(id, { label, keybind?, key?, icon? }), keyHints.hide(id)Una línea de ayuda de teclas en el HUD.keyHints
radial.add(item), radial.remove(id), radial.refresh()Elementos en el menú radial que esté en marcha.radial
controls.disable(reason, controls, group?), controls.enable(reason), controls.disableAll(reason, except?)Controles desactivados, una sola tarea por frame.controls
new Keybind({ name, description, defaultKey, defaultMapper, hint?, icon?, hintLabel?, onPressed, onReleased })Una tecla reasignable; el panel puede fijar su valor por defecto. isPressed(), currentKey(), disable(state).Keybind.new()
TypeScript
const done = await progress({
  label: t("REPAIRING"),
  duration: 8000,
  anim: { dict: "mini@repair", clip: "fixing_a_player" },
  canCancel: true,
});

A través de AI Core

UtilidadQuéLua
inventory.openInventory(), inventory.hasItem(item, count = 1), inventory.currentWeapon()El inventario activo.inventory
medical.isDead(), medical.onChange(fn)El jugador local está abatido, en cualquier script de muerte.
gestures.isHandsUp(), isPointing(), provider()Manos arriba y señalar de cualquier script de emotes.gestures
appearance.apply(ped, look), appearance.read(ped)Aspectos a través del script de ropa activo.appearance
world.pauseSync(reason), world.resumeSync(reason)Pausan la sincronización de clima y hora.world

Vehículos y entidades

UtilidadQuéLua
nearestVehicle(metres, { networked?, notOwn?, filter? }): numberEl vehículo más cercano.nearestVehicle
drivenVehicle(): number | falseEl vehículo que conduce el jugador.
waitForEntity(netId, timeoutMs = 5000): Promise<number>La entidad cuando existe aquí, 0 tras el tiempo límite.waitForEntity
entityFromNetId(netId, type?): numberLa entidad ahora o 0 (tipo 1 ped, 2 vehículo, 3 objeto).
getVehicleProps(vehicle), setVehicleProps(vehicle, props), setVehicleSetup(vehicle, setup)Leen y aplican el aspecto de un vehículo.
new PreviewVehicle(): show(model, at, setup?), clear()Un vehículo local de exposición.
vehicleLabel(model | hash | vehicle): stringEl nombre visible de un vehículo.vehicleLabel

Sondeos, carga de recursos, temporización

UtilidadQuéLua
raycast(from, to, { flags?, ignore?, options? }): RayHit | nullUn sondeo en línea: { coords, normal, entity }.raycast
groundZ(x, y, z = 1000): number | nullLa altura del suelo, null mientras la colisión no está cargada.groundZ
locationName(coords?): { street, crossing?, zone }Nombres de calle y zona.locationName
waypoint(): { x, y } | nullEl waypoint del mapa.waypoint
pedHeadshot(ped, transparent = false, timeoutMs = 5000)El handle y el nombre de textura del retrato de un ped.pedHeadshot
onShot(handler: (weapon) => void): () => voidEl frame en que dispara el ped local.onShot
requestModel, requestAnimDict, requestAnimSet, requestPtfxAsset, requestTextureDict, requestWeaponAsset (name, timeoutMs = 10000)Cargan un recurso del juego.mismos nombres
attachProp(model, { ped?, bone, offset?, rotation?, collision?, rotationOrder? }): Promise<number>Un prop local sujeto a un hueso del ped.
new TickLoop(onFrame, name?): set(active), runningUna tarea por frame encendida solo cuando hace falta.
new AreaFollower(event, cellSize = 64): start, stopInforma la celda de la cuadrícula del jugador a un AreaStream del servidor.
new ScriptCamera(type?): start, move, glideTo, attach, pointAt, setFov, shake, blur, stopUna cámara scripteada, devuelta a la cámara del juego al detenerse.

En esta página