AI Core
Referencia de la APIExports de cliente de ai-core

Objetos

Abre el inventario del jugador, comprueba un objeto, lee el arma en la mano y abre el selector de objetos de admin, sea cual sea el inventario del servidor.

Estos exports pasan por la capa de inventario de ai-core: responde el inventario que eligió el dueño del servidor (ai-inventory, o un inventario de terceros compatible). Tu script nunca llama a los exports de un inventario concreto, así que sigue funcionando cuando cambia el inventario. Mientras no hay ningún inventario en marcha, las comprobaciones responden false / null y abrir no hace nada.

El cliente solo lee y abre. Dar y quitar objetos siempre ocurre en el servidor (inventory de la lib en el servidor, o los exports de servidor de ai-core), donde el servidor comprueba primero al jugador.

OpenInventory

Abre la pantalla del inventario propio del jugador en el inventario activo (con lo que ese inventario muestre alrededor: el suelo, un maletero, una guantera).

Lado: Cliente · Espera: no

Firma
OpenInventory(): void
Lua
exports['ai-core']:OpenInventory() -- o aiLib.inventory.openInventory()

Parámetros

Ninguno.

Devuelve

Nada. Sin un inventario activo no se abre nada.

Ejemplo

resource/client/index.ts
import { inventory } from "@aicore-fivem/lib/client";

RegisterCommand("bag", () => inventory.openInventory(), false);

HasItem

Indica si el jugador tiene al menos cierta cantidad de un objeto. Úsalo para mostrar u ocultar una opción (un elemento radial, una opción de target) antes de pedir al servidor que haga algo.

Lado: Cliente · Espera: no

Firma
HasItem(item: string, count?: number): boolean
Lua
local has = exports['ai-core']:HasItem(item, count) -- o aiLib.inventory.hasItem(item, count)

Parámetros

Prop

Type

Devuelve

boolean: true cuando el jugador tiene al menos count. false cuando tiene menos, cuando item no es una cadena o cuando no hay ningún inventario en marcha.

Ejemplo

resource/client/index.ts
import { inventory, notify, triggerServerCallback } from "@aicore-fivem/lib/client";
import { Locale } from "common";

RegisterCommand(
  "picklock",
  async () => {
    // Una comprobación rápida para el jugador; el servidor vuelve a comprobar el objeto antes de hacer nada.
    if (!inventory.hasItem("lockpick")) return notify(Locale("NEED_LOCKPICK"), "error");
    await triggerServerCallback("myscript:picklock", []);
  },
  false,
);

Un tramposo puede falsear la respuesta de un cliente. Usa HasItem para lo que ve el jugador; el servidor debe comprobar y quitar el objeto por sí mismo.

GetCurrentWeapon

Devuelve el objeto de arma que el jugador tiene en la mano, con su etiqueta y su imagen, a través del inventario activo.

Lado: Cliente · Espera: no

Firma
GetCurrentWeapon(): HeldWeapon | null
Lua
local weapon = exports['ai-core']:GetCurrentWeapon() -- { name, label, image? } o nil

Parámetros

Ninguno.

Devuelve

HeldWeapon mientras hay un objeto de arma en la mano, null cuando las manos están vacías o no hay ningún inventario en marcha.

Prop

Type

Ejemplo

resource/client/weapon.ts
import { inventory, onCache } from "@aicore-fivem/lib/client";

// Léelo cuando cambie el arma en la mano, no en cada frame.
onCache("weapon", () => {
  const weapon = inventory.currentWeapon();
  SendNUIMessage({ action: "weapon", data: weapon });
});

OpenItemPicker

Abre el selector de objetos de ai-core: una cuadrícula con buscador de cada objeto del inventario activo con imágenes, donde el jugador arma una lista de objetos y cantidades. Está pensado para herramientas de admin (dar objetos a un jugador): la lista de objetos viene del servidor, que solo se la envía a los admins. La lista que toma el jugador llega más tarde como el evento de cliente ai-lib:client:menuResult.

Lado: Cliente · Espera: no (la respuesta llega como un evento; el itemPicker de la lib espera por ti)

Firma
OpenItemPicker(requestId: number, request: ItemPickerRequest): void
Lua
local list = aiLib.itemPicker({ title = 'Give items', target = 12 }) -- espera; llámalo dentro de un thread

Parámetros

Prop

Type

ItemPickerRequest

Consulta también ItemPickerRequest.

Prop

Type

Devuelve

Nada en el momento. Más tarde ai-core dispara ai-lib:client:menuResult con (resource, requestId, value): value es una lista PickedItem[] ({ name, count }) cuando el jugador la tomó, null cuando cerró el selector. El itemPicker(request) de la lib devuelve Promise<PickedItem[] | null> con ese valor, y aiLib.itemPicker(request) devuelve la lista o nil.

Ejemplo

resource/client/admin.ts
import { itemPicker, triggerServerCallback } from "@aicore-fivem/lib/client";
import { Locale } from "common";

// Herramienta de admin: elige objetos para un jugador, el servidor comprueba al admin y da cada objeto.
export async function giveItemsTo(target: number): Promise<void> {
  const list = await itemPicker({ title: Locale("GIVE_ITEMS"), target });
  if (!list || list.length === 0) return;
  await triggerServerCallback("myadmin:giveItems", [target, list]);
}

El selector solo muestra objetos a los admins (ai.admin): para cualquier otro la cuadrícula está vacía. El servidor responde como mucho a dos aperturas por jugador en 2 segundos; un target que no está conectado cuenta como el admin que elige. La respuesta del jugador son datos del cliente: tu servidor debe comprobar que quien llama es admin y comprobar cada objeto y cantidad antes de dar nada.

En esta página