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
OpenInventory(): voidexports['ai-core']:OpenInventory() -- o aiLib.inventory.openInventory()Parámetros
Ninguno.
Devuelve
Nada. Sin un inventario activo no se abre nada.
Ejemplo
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
HasItem(item: string, count?: number): booleanlocal 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
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
GetCurrentWeapon(): HeldWeapon | nulllocal weapon = exports['ai-core']:GetCurrentWeapon() -- { name, label, image? } o nilPará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
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)
OpenItemPicker(requestId: number, request: ItemPickerRequest): voidlocal list = aiLib.itemPicker({ title = 'Give items', target = 12 }) -- espera; llámalo dentro de un threadPará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
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.
Sincronización de clima y hora
Pausa la sincronización de clima y hora del servidor en el juego de un jugador mientras tu script pone los suyos (un interior, una escena), reanúdala y lee si está en pausa.
Menú radial
Añade, quita y refresca elementos en el menú radial que tenga el servidor, con condiciones, submenús y handlers de pulsación.