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.
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
| Fonction | Rô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.appearance | Via ai-core ; les membres diffèrent selon le côté (ci-dessous). |
Client
| Fonction | Rôle |
|---|---|
aiLib.cache | ped, 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.player | coords, 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. |
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
| Fonction | Rô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.online | character, 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.inventory | addItem, removeItem, getItemCount, hasItem, canCarryItem, getItems, clearInventory, registerStash, openInventory, registerUsableItem, getItemDefinition. |
aiLib.vehicleKeys.give(source, vehicle, purpose?), remove, has | Clés de véhicule via ai-core. |
aiLib.phone | number, 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.world | getWeather, 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).