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
OpenInventory(): voidexports['ai-core']:OpenInventory() -- ou aiLib.inventory.openInventory()Paramètres
Aucun.
Retour
Rien. Sans inventaire actif, rien ne s’ouvre.
Exemple
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
HasItem(item: string, count?: number): booleanlocal 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
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
GetCurrentWeapon(): HeldWeapon | nulllocal weapon = exports['ai-core']:GetCurrentWeapon() -- { name, label, image? } ou nilParamè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
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)
OpenItemPicker(requestId: number, request: ItemPickerRequest): voidlocal list = aiLib.itemPicker({ title = 'Give items', target = 12 }) -- attend ; appelez dans un threadParamè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
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.
Synchro de la météo et de l’heure
Mettre en pause la synchro de la météo et de l’heure du serveur dans le jeu d’un joueur pendant que votre script fixe les siennes (un intérieur, une scène), la reprendre, et savoir si elle est en pause.
Menu radial
Ajouter, retirer et rafraîchir des entrées sur le menu radial qu’utilise le serveur, avec conditions, sous-menus et handlers d’appui.