AI Core
Référence de l’APIExports client d’ai-core

Objets

Ouvrir l’inventaire du joueur, vérifier un objet, lire l’arme en main et ouvrir le sélecteur d’objets d’administration, quel que soit l’inventaire du serveur.

Ces exports passent par la couche d’inventaire d’ai-core : l’inventaire que le propriétaire du serveur a choisi (ai-inventory, ou un inventaire tiers pris en charge) y répond. Votre script n’appelle jamais les exports d’un inventaire précis, il continue donc de fonctionner quand l’inventaire change. Tant qu’aucun inventaire ne tourne, les vérifications répondent false / null et l’ouverture ne fait rien.

Le client ne fait que lire et ouvrir. Donner et retirer des objets se fait toujours sur le serveur (inventory de la lib côté serveur, ou les exports serveur d’ai-core), où le serveur vérifie d’abord le joueur.

OpenInventory

Ouvre l’écran d’inventaire du joueur dans l’inventaire actif (avec ce que cet inventaire montre autour : le sol, un coffre de véhicule, une boîte à gants).

Côté : Client · Attend : non

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

Paramètres

Aucun.

Retour

Rien. Sans inventaire actif, rien ne s’ouvre.

Exemple

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

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

HasItem

Indique si le joueur possède au moins une quantité d’un objet. Utilisez-le pour afficher ou masquer une option (une entrée radiale, une option de ciblage) avant de demander au serveur de faire quelque chose.

Côté : Client · Attend : non

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

Paramètres

Prop

Type

Retour

boolean : true quand le joueur en possède au moins count. false quand il en a moins, quand item n’est pas une chaîne, ou quand aucun inventaire ne tourne.

Exemple

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

RegisterCommand(
  "picklock",
  async () => {
    // Une vérification rapide pour le joueur ; le serveur revérifie l’objet avant de faire quoi que ce soit.
    if (!inventory.hasItem("lockpick")) return notify(Locale("NEED_LOCKPICK"), "error");
    await triggerServerCallback("myscript:picklock", []);
  },
  false,
);

Une réponse client peut être falsifiée par un tricheur. Utilisez HasItem pour ce que voit le joueur ; le serveur doit lui-même vérifier et retirer l’objet.

GetCurrentWeapon

Renvoie l’objet arme que le joueur tient en main, avec son libellé et son image, via l’inventaire actif.

Côté : Client · Attend : non

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

Paramètres

Aucun.

Retour

HeldWeapon tant qu’un objet arme est en main, null quand les mains sont vides ou qu’aucun inventaire ne tourne.

Prop

Type

Exemple

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

// Le lire quand l’arme en main change, pas à chaque frame.
onCache("weapon", () => {
  const weapon = inventory.currentWeapon();
  SendNUIMessage({ action: "weapon", data: weapon });
});

OpenItemPicker

Ouvre le sélecteur d’objets d’ai-core : une grille de recherche de chaque objet de l’inventaire actif avec images, où le joueur compose une liste d’objets et de quantités. Il est destiné aux outils d’administration (donner des objets à un joueur) : la liste d’objets vient du serveur, qui ne l’envoie qu’aux admins. La liste que prend le joueur arrive plus tard par l’événement client ai-lib:client:menuResult.

Côté : Client · Attend : non (la réponse arrive par un événement ; itemPicker de la lib attend pour vous)

Signature
OpenItemPicker(requestId: number, request: ItemPickerRequest): void
Lua
local list = aiLib.itemPicker({ title = 'Give items', target = 12 }) -- attend ; appelez dans un thread

Paramètres

Prop

Type

ItemPickerRequest

Voir aussi ItemPickerRequest.

Prop

Type

Retour

Rien sur le moment. Plus tard, ai-core déclenche ai-lib:client:menuResult avec (resource, requestId, value) : value est une liste PickedItem[] ({ name, count }) quand le joueur l’a prise, null quand il a fermé le sélecteur. itemPicker(request) de la lib renvoie Promise<PickedItem[] | null> avec cette valeur, et aiLib.itemPicker(request) renvoie la liste ou nil.

Exemple

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

// Outil d’admin : choisir des objets pour un joueur, le serveur vérifie l’admin et donne chaque objet.
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]);
}

Le sélecteur ne montre les objets qu’aux admins (ai.admin) : pour tous les autres, la grille est vide. Le serveur répond à au plus deux ouvertures par joueur en 2 secondes ; une target qui n’est pas en ligne compte comme l’admin qui choisit. La réponse du joueur est une donnée client : votre serveur doit vérifier que l’appelant est admin et vérifier chaque objet et chaque quantité avant de donner quoi que ce soit.

Sur cette page