AI Core
Référence de l’API

Lib pour Lua

aiLib - la lib pour les ressources Lua, chargée depuis ai-lib comme ox_lib.

ai-lib contient un portage Lua de la lib. Il tourne dans la ressource qui le charge : points, raccourcis, commandes et callbacks appartiennent à cette ressource et partent avec elle.

fxmanifest.lua
dependency 'ai-lib'
shared_script '@ai-lib/init.lua'

Les modules se chargent à la première utilisation : aiLib.notify(...), aiLib.Points.new(), aiLib.addCommand(...). Les appels qui attendent (triggerServerCallback, menu.show, progress, spawnVehicle, progressFor) doivent tourner dans un thread. Les types sont la classe AiLib dans le init.lua d’ai-lib.

Les ressources JavaScript sans bundler chargent plutôt @ai-lib/dist/client.js / server.js : le même global aiLib avec les utilitaires /shared plus /client ou /server de la lib TypeScript.

Des deux côtés

FonctionRôle
aiLib.side'client' ou 'server'.
aiLib.every(ms, fn, options?)Travail périodique sur l’unique thread planificateur de la ressource (0 = chaque frame) ; job:set(active), job:stop(), job.running. Une tâche n’appelle jamais Wait.
aiLib.waitFor(check, timeout?, interval?)Attend que check renvoie une valeur.
aiLib.formatText(text, ...)Marqueurs {0}.
aiLib.locale(resource?)Renvoie t(key, ...) et la table de langue fusionnée.
aiLib.fail(error){ ok = false, error = error } pour les actions serveur.
aiLib.numbers.round(value, decimals?), groupDigits(value, separator?), headingTo(from, to)Utilitaires numériques.
aiLib.stripGameText(text)Balises HTML et codes GTA retirés.
aiLib.notify(...)Client (text, kind?, duration?) ; serveur (source, text, kind?, duration?).
aiLib.inventory, aiLib.world, aiLib.appearanceVia ai-core ; les membres diffèrent selon le côté (ci-dessous).

Client

FonctionRôle
aiLib.cacheped, playerId, serverId, vehicle, seat, weapon ; cache.onChange(key, handler).
aiLib.playerData.get(key), playerData.onChange(key, handler)Les données du joueur d’ai-core (character, money, jobs, duty, gangs, activeGang).
aiLib.triggerServerCallback(name, args?, timeout?)Interroge le serveur ; renvoie la réponse et une erreur.
aiLib.onServerCallback(name, handler), aiLib.onServerEvent(name, handler)Répond au serveur, écoute les événements serveur.
aiLib.callAction(name, args?, { fallback, timeout?, silent? })Exécute une action serveur, affiche le refus traduit, renvoie la réponse ok ou nil.
aiLib.progress(options)La barre de progression d’ai-lib (anim, scenario, canCancel, whileDead, freeze, disable) ; true quand elle est allée à son terme. progress.cancel(), progress.isRunning().
aiLib.menu.show(request, listeners?)Un menu ({ title, items, back? }, écouteurs onHover, onToggle) ; renvoie l’id choisi.
aiLib.input(request)Un dialogue de saisie ({ title, confirm, fields }) ; renvoie les valeurs ou nil.
aiLib.itemPicker({ title, target? })Outils d’admin : la grille d’objets d’ai-core.
aiLib.skillCheck(difficulty, keys?)Test d’adresse ; true quand chaque étape a été réussie.
aiLib.lockpick({ difficulty?, pins?, picks? })'opened', 'broken' ou 'cancelled'.
aiLib.showPrompt(id, text), hidePrompt(id), onPromptPressed(handler)Le prompt d’ai-lib.
aiLib.Points.new()Points d’interaction : :add(id, options), :addModel(id, options), :addVehicle(id, options), :remove(id), :clear(), :refresh().
aiLib.Zones.new()Zones : :add(id, options), :remove, :clear, :isInside.
aiLib.LocalPed.new(options)Un ped local (attach, seat) ; :remove().
aiLib.Blips.new(), aiLib.Blips.create(options)Blips : :add, :get, :remove, :clear.
aiLib.Keybind.new(options)Une touche réassignable (hint, icon, hintLabel) ; :disable(state).
aiLib.playercoords, heading, distanceTo, freeze, teleport (ground = 'find' ou sans z : le sol sous x / y), playAnim, stopAnim.
aiLib.playerPed(serverId)Le ped d’un joueur, 0 hors de portée.
aiLib.nearestPlayer(metres, { from?, filter? })L’id serveur de l’autre joueur le plus proche.
aiLib.nearestVehicle(metres, { networked?, notOwn?, filter? })Le véhicule le plus proche.
aiLib.waitForEntity(netId, timeout?)L’entité dès qu’elle existe ici, 0 après le délai.
aiLib.waypoint()Le point de passage sur la carte { x, y }.
aiLib.onShot(handler)La frame où le ped local tire.
aiLib.fadeOut(ms?), aiLib.fadeIn(ms?)Fondus de l’écran.
aiLib.controls.disable(reason, controls, group?), disableAll(reason, except?), enable(reason)Contrôles désactivés.
aiLib.hud.hide(reason), show(reason), visible()Masquer les HUD.
aiLib.keyHints.show(id, { label, keybind?, key?, icon? }), hide(id)Lignes d’aide de touches.
aiLib.gestures.isHandsUp(), isPointing(), provider()Mains en l’air et pointage.
aiLib.radial.add(item), remove(id), refresh()Entrées radiales via ai-core.
aiLib.inventory.openInventory(), hasItem(item, count?), currentWeapon()L’inventaire actif.
aiLib.world.pauseSync(reason), resumeSync(reason)Mettre en pause la synchro météo et heure.
aiLib.appearance.apply(ped, look), read(ped)Apparences via le script de vêtements actif.
aiLib.requestModel, requestAnimDict, requestAnimSet, requestPtfxAsset, requestTextureDict, requestWeaponAsset (name, timeout?)Charger une ressource du jeu.
aiLib.pedHeadshot(ped, transparent?, timeout?)Un handle de portrait et un nom de texture.
aiLib.locationName(coords?), vehicleLabel(vehicle), groundZ(x, y, z?)Noms et hauteur du sol.
aiLib.raycast(from, to, options?)Un tracé de ligne : { coords, normal, entity } ou nil.
Lua
local points = aiLib.Points.new()
points:add('shop', {
  coords = vector3(25.7, -1347.3, 29.5),
  label = 'Open shop',
  icon = 'basket-shopping',
  onPressed = function()
    local pick = aiLib.menu.show({ title = 'Shop', items = { { id = 'water', label = 'Water' } } })
    if pick then aiLib.callAction('myshop:buy', { pick }, { fallback = 'BUY_FAILED' }) end
  end,
})

Serveur

FonctionRôle
aiLib.onClientCallback(name, handler, { rate?, lock?, ace? })Répond aux callbacks client par la porte d’entrée.
aiLib.onClientEvent(name, handler, options?)Un événement réseau client par la porte d’entrée.
aiLib.triggerClientCallback(name, source, args?, timeout?)Interroge un client ; renvoie la réponse et une erreur.
aiLib.isAdmin(source, ace?)Si le joueur est un admin ai-core (ou a ace).
aiLib.RateLimit.new(count, windowMs)Une limite de rafale par joueur : limit:take(source), limit:release(source).
aiLib.progressFor(source, options)La barre d’ai-lib sur le client du joueur, minutée par le serveur (attend).
aiLib.minigameFor(source, options)Un mini-jeu sur le client du joueur : 'won', 'lost' ou 'broken' (attend).
aiLib.addCommand(name, { help?, params?, restricted? }, handler)Une commande ; handler(source, args, raw).
aiLib.onCharacter({ loaded?, unloaded? })Chargement et déchargement des personnages, en rejouant ceux chargés avant un redémarrage.
aiLib.onlinecharacter, name(src, fallback), jobs, gangs, jobGrade, gangGrade, dutyJob, sources (interroge ai-core à chaque appel).
aiLib.spawnVehicle(options)Un véhicule serveur (model, coords, asker, plate, fuel, keysTo, purpose, driver, seats, props, setup, locked, bucket, persistent, bags) ; attend.
aiLib.playersNear(source, radius), playersNearEntity(entity, radius)Joueurs autour.
aiLib.nearestPlayerTo(source, metres, filter?), nearestVehicleTo(source, metres, filter?)Le joueur ou le véhicule le plus proche.
aiLib.vehicleFromNet(netId), vehicleNearPlayer(source, netId, { metres?, driver? })Un véhicule vivant depuis le net id d’un client, ou 0.
aiLib.aiLog(channel, message, options?)Un log via ai-core.
aiLib.inventoryaddItem, removeItem, getItemCount, hasItem, canCarryItem, getItems, clearInventory, registerStash, openInventory, registerUsableItem, getItemDefinition.
aiLib.vehicleKeys.give(source, vehicle, purpose?), remove, hasClés de véhicule via ai-core.
aiLib.phonenumber, sourceOf, hasPhone, mail, message, notify.
aiLib.dispatch.alert(alert)Une alerte police via ai-core.
aiLib.prison.jail(src, minutes, by?), release(src), timeLeft(src)Peines de prison.
aiLib.worldgetWeather, setWeather, getTime, setTime, setBlackout, freezeTime.
aiLib.appearance.get(charId), provider()L’apparence enregistrée d’un personnage (attend).

Absents du côté Lua : les classes du panneau d’administration, PendingActions, PlayerMap, Cooldowns, les lecteurs d’entrée stricts, les classes de state bags (Lua lit Entity(e).state lui-même) et la base de données (les ressources Lua utilisent l’API oxmysql d’ai-mysql).

Sur cette page