AI Core
Referência da APIExports de cliente do ai-core

Itens

Abra o inventário do jogador, verifique um item, leia a arma na mão e abra o seletor de itens do admin, seja qual for o inventário do servidor.

Estes exports passam pela camada de inventário do ai-core: o inventário que o dono do servidor escolheu (ai-inventory, ou um inventário de terceiros suportado) responde a eles. Seu script nunca chama os exports de um inventário específico, então continua funcionando quando o inventário muda. Enquanto nenhum inventário está rodando, as verificações respondem false / null e abrir não faz nada.

O cliente só lê e abre. Dar e tirar itens sempre acontece no servidor (inventory da lib no servidor, ou os exports de servidor do ai-core), onde o servidor verifica o jogador antes.

OpenInventory

Abre a tela do inventário do próprio jogador no inventário ativo (com o que esse inventário mostrar ao redor: o chão, um porta-malas, um porta-luvas).

Lado: Cliente · Espera: não

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

Parâmetros

Nenhum.

Retorno

Nada. Sem um inventário ativo nada abre.

Exemplo

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

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

HasItem

Diz se o jogador tem pelo menos uma quantidade de um item. Use para mostrar ou esconder uma opção (um item radial, uma opção de target) antes de pedir algo ao servidor.

Lado: Cliente · Espera: não

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

Parâmetros

Prop

Type

Retorno

boolean: true quando o jogador tem pelo menos count. false quando tem menos, quando item não é string ou quando nenhum inventário está rodando.

Exemplo

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

RegisterCommand(
  "picklock",
  async () => {
    // Uma verificação rápida para o jogador; o servidor verifica o item de novo antes de fazer qualquer coisa.
    if (!inventory.hasItem("lockpick")) return notify(Locale("NEED_LOCKPICK"), "error");
    await triggerServerCallback("myscript:picklock", []);
  },
  false,
);

Uma resposta do cliente pode ser falsificada por um trapaceiro. Use HasItem para o que o jogador vê; o servidor precisa verificar e remover o item ele mesmo.

GetCurrentWeapon

Retorna o item de arma que o jogador segura na mão, com o rótulo e a imagem dele, pelo inventário ativo.

Lado: Cliente · Espera: não

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

Parâmetros

Nenhum.

Retorno

HeldWeapon enquanto um item de arma está na mão, null quando as mãos estão vazias ou nenhum inventário está rodando.

Prop

Type

Exemplo

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

// Leia quando a arma na mão muda, não a cada frame.
onCache("weapon", () => {
  const weapon = inventory.currentWeapon();
  SendNUIMessage({ action: "weapon", data: weapon });
});

OpenItemPicker

Abre o seletor de itens do ai-core: uma grade pesquisável com cada item do inventário ativo e suas imagens, onde o jogador monta uma lista de itens e quantidades. É feito para ferramentas de admin (dar itens a um jogador): a lista de itens vem do servidor, que só a envia para admins. A lista que o jogador escolhe chega depois como o evento de cliente ai-lib:client:menuResult.

Lado: Cliente · Espera: não (a resposta chega como evento; o itemPicker da lib espera por você)

Assinatura
OpenItemPicker(requestId: number, request: ItemPickerRequest): void
Lua
local list = aiLib.itemPicker({ title = 'Give items', target = 12 }) -- espera; chame dentro de uma thread

Parâmetros

Prop

Type

ItemPickerRequest

Veja também ItemPickerRequest.

Prop

Type

Retorno

Nada na hora. Depois o ai-core dispara ai-lib:client:menuResult com (resource, requestId, value): value é uma lista PickedItem[] ({ name, count }) quando o jogador confirmou, null quando fechou o seletor. O itemPicker(request) da lib retorna Promise<PickedItem[] | null> com esse valor, e aiLib.itemPicker(request) retorna a lista ou nil.

Exemplo

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

// Ferramenta de admin: escolha itens para um jogador; o servidor verifica o admin e dá cada item.
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]);
}

O seletor só mostra itens para admins (ai.admin): para qualquer outra pessoa a grade fica vazia. O servidor responde no máximo duas aberturas por jogador em 2 segundos; um target que não está online conta como o admin que escolhe. A resposta do jogador é dado do cliente: seu servidor precisa verificar se quem chama é admin e conferir cada item e quantidade antes de dar qualquer coisa.

Nesta página