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
OpenInventory(): voidexports['ai-core']:OpenInventory() -- ou aiLib.inventory.openInventory()Parâmetros
Nenhum.
Retorno
Nada. Sem um inventário ativo nada abre.
Exemplo
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
HasItem(item: string, count?: number): booleanlocal 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
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
GetCurrentWeapon(): HeldWeapon | nulllocal weapon = exports['ai-core']:GetCurrentWeapon() -- { name, label, image? } ou nilParâ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
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ê)
OpenItemPicker(requestId: number, request: ItemPickerRequest): voidlocal list = aiLib.itemPicker({ title = 'Give items', target = 12 }) -- espera; chame dentro de uma threadParâ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
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.
Sincronização de clima e hora
Pause a sincronização de clima e hora do servidor no jogo de um jogador enquanto seu script define a própria (um interior, uma cena), retome-a e leia se está pausada.
Menu radial
Adicione, remova e atualize itens no menu radial que o servidor roda, com condições, submenus e handlers de clique.