Helpers propres à Lua
aiLib.playerData, aiLib.online, aiLib.isAdmin et la table aiLib.menu : les fonctions aiLib dont la forme Lua diffère de la lib TypeScript.
La plupart des fonctions aiLib sont l’équivalent Lua d’une fonction TypeScript et sont documentées à côté d’elle, avec un onglet Lua (voir Toutes les fonctions aiLib). Celles de cette page ont un nom, une forme ou un comportement différent en Lua, elles sont donc documentées ici.
Client : données du joueur
aiLib.playerData.get
La dernière valeur envoyée par ai-core pour une clé des données du joueur local. Si rien n’est arrivé depuis le démarrage de votre ressource, elle demande une fois à ai-core (GetPlayerData) et garde la réponse.
Côté : client · Attend : non
local value = aiLib.playerData.get(key)TypeScript : les mêmes données via getPlayerData(key) (voir Appartenance et données du joueur).
Paramètres
Prop
Type
Retour
La valeur : une table pour character, money ({ cash = 500, bank = 5000 }), jobs, job, gangs et metadata ; une chaîne ou nil pour duty et activeGang. nil tant qu’aucun personnage n’est chargé ou qu’ai-core ne tourne pas.
Exemple
RegisterCommand('cash', function()
local money = aiLib.playerData.get('money') or {}
aiLib.notify(('Cash: $%s'):format(aiLib.numbers.groupDigits(money.cash or 0)), 'info')
end, false)aiLib.playerData.onChange
Exécute une fonction chaque fois qu’ai-core pousse une nouvelle valeur d’une clé pour le joueur local (un changement de métier, l’argent, la prise de service). Pour money et metadata, ai-core n’envoie que les entrées modifiées ; aiLib les fusionne, si bien que votre gestionnaire reçoit toujours la table entière.
Côté : client · Attend : non
aiLib.playerData.onChange(key, function(value) end)TypeScript : onPlayerData(key, handler) (voir Appartenance et données du joueur).
Paramètres
Prop
Type
Retour
Rien. Il n’existe aucun moyen de retirer le gestionnaire ; il disparaît avec votre ressource.
Exemple
aiLib.playerData.onChange('duty', function(job)
if job == 'police' then
aiLib.notify('You are now on duty', 'success')
end
end)Serveur : joueurs en ligne
aiLib.online lit les joueurs chargés via les exports d’ai-core, un appel d’export par lecture. Il est prévu pour des recherches au moment d’une action (une commande, un callback), pas pour chaque tick. Le online TypeScript garde un miroir local avec plus de lecteurs et des formes de retour différentes (voir Joueurs).
aiLib.online.character
Le personnage chargé d’un joueur.
Côté : serveur · Attend : non
local character = aiLib.online.character(src)Paramètres
Prop
Type
Retour
Une table CharacterInfo (id, citizenid, firstname, lastname, birthdate, sex, nationality...), ou nil quand le joueur n’a aucun personnage chargé.
Exemple
aiLib.addCommand('whoami', { help = 'Shows your character id' }, function(source)
local character = aiLib.online.character(source)
if not character then return end
aiLib.notify(source, ('Character #%d (%s)'):format(character.id, character.citizenid), 'info')
end)aiLib.online.name
Le « Prénom Nom » du personnage, sinon le nom FiveM du joueur.
Côté : serveur · Attend : non
local name = aiLib.online.name(src, fallback)TypeScript : online.name(source, { fallback }) prend une table d’options au lieu d’un booléen.
Paramètres
Prop
Type
Retour
string : le nom du personnage, sinon le nom FiveM (ou "" avec fallback = false, ou quand le joueur est parti).
Exemple
print(('%s opened the shop'):format(aiLib.online.name(source)))aiLib.online.jobs
Tous les métiers d’un joueur, en service ou non.
Côté : serveur · Attend : non
local jobs = aiLib.online.jobs(src)TypeScript : online.jobs(source) ne renvoie que les noms des métiers ; Lua renvoie les tables d’appartenance.
Paramètres
Prop
Type
Retour
Une liste de tables JobMembership ({ job = 'police', grade = 2 }). Une liste vide quand le joueur n’en a aucun ou n’a pas de personnage.
Exemple
for _, membership in ipairs(aiLib.online.jobs(source)) do
print(membership.job, membership.grade)
endaiLib.online.gangs
Tous les gangs d’un joueur.
Côté : serveur · Attend : non
local gangs = aiLib.online.gangs(src)TypeScript : online.gangs(source) ne renvoie que les noms des gangs.
Paramètres
Prop
Type
Retour
Une liste de tables GangMembership ({ gang = 'ballas', grade = 0 }), ou une liste vide.
Exemple
local inAGang = #aiLib.online.gangs(source) > 0aiLib.online.jobGrade
Le grade d’un joueur dans un métier.
Côté : serveur · Attend : non
local grade = aiLib.online.jobGrade(src, job)Paramètres
Prop
Type
Retour
integer (0 = le grade le plus bas), ou nil quand le joueur n’a pas ce métier.
Exemple
local grade = aiLib.online.jobGrade(source, 'police')
if not grade or grade < 2 then return aiLib.fail('NOT_ALLOWED') endaiLib.online.gangGrade
Le grade d’un joueur dans un gang.
Côté : serveur · Attend : non
local grade = aiLib.online.gangGrade(src, gang)Paramètres
Prop
Type
Retour
integer, ou nil quand le joueur n’est pas dans ce gang.
Exemple
local isBoss = (aiLib.online.gangGrade(source, 'ballas') or -1) >= 3aiLib.online.dutyJob
Le métier pour lequel un joueur est en service.
Côté : serveur · Attend : non
local job = aiLib.online.dutyJob(src)Paramètres
Prop
Type
Retour
Le nom du métier, ou nil quand il n’est pas en service.
Exemple
if aiLib.online.dutyJob(source) ~= 'police' then return aiLib.fail('NOT_ON_DUTY') endaiLib.online.sources
Les ids serveur de tous les joueurs qui ont un personnage chargé.
Côté : serveur · Attend : non
local players = aiLib.online.sources()Retour
Une liste d’ids serveur (vide quand personne n’est chargé ou qu’ai-core ne tourne pas).
Exemple
for _, src in ipairs(aiLib.online.sources()) do
if aiLib.online.dutyJob(src) == 'police' then
aiLib.notify(src, 'Robbery in progress', 'warning')
end
endChaque appel est un appel d’export vers ai-core. Dans une boucle sur tous les joueurs, lisez ce dont vous avez besoin une seule fois par joueur, et ne l’exécutez jamais à chaque frame. Pour « combien sont en service », lisez plutôt le global state ai:duty:<job> (GlobalState['ai:duty:police']).
Serveur : permissions
aiLib.isAdmin
Indique si un joueur est admin d’ai-core (ACE ai.admin), ou possède l’ACE que vous nommez.
Côté : serveur · Attend : non
local allowed = aiLib.isAdmin(src, ace)TypeScript : isAdmin(ace?) est à la place une garde pour onClientCallback / onClientEvent (voir Entrées client). En Lua, protégez un callback avec son option ace, ou appelez aiLib.isAdmin vous-même.
Paramètres
Prop
Type
Retour
true quand le joueur possède l’ACE, sinon false.
Exemple
RegisterCommand('fixall', function(source)
if not aiLib.isAdmin(source) then return end
-- travail réservé aux admins ici
end, false)Client : la table menu
aiLib.menu
Les boîtes de dialogue se trouvent sur une seule table. Les noms de premier niveau sont les mêmes fonctions, gardés pour des appels courts :
Sur aiLib.menu | Identique à | Attend | Répond |
|---|---|---|---|
menu.show(request, listeners?) | (seulement ici) | oui | L’id de l’entrée choisie, '__back' pour le retour d’un sous-menu, ou nil à la fermeture. |
menu.input(request) | aiLib.input(request) | oui | Une table des valeurs par name de champ, ou nil à la fermeture. |
menu.itemPicker(request) | aiLib.itemPicker(request) | oui | Une liste de { name, count }, ou nil. Outils d’admin uniquement. |
menu.skillCheck(difficulty, keys?) | aiLib.skillCheck(difficulty, keys?) | oui | true quand chaque étape a été réussie. |
menu.lockpick(options?) | aiLib.lockpick(options?) | oui | 'opened', 'broken' ou 'cancelled'. |
Les formes de requête sont MenuRequest, InputRequest, ItemPickerRequest et SkillDifficulty. Chaque option et chaque écouteur sont documentés avec les équivalents TypeScript sur Interface partagée.
RegisterCommand('fine', function()
local values = aiLib.input({
title = 'Write a fine',
confirm = 'Send',
fields = {
{ name = 'amount', label = 'Amount', type = 'number', min = 1, max = 10000 },
{ name = 'reason', label = 'Reason', type = 'text', maxLength = 80 },
},
})
if values then aiLib.callAction('mypolice:fine', { values.amount, values.reason }, { fallback = 'FINE_FAILED' }) end
end, false)Lib pour Lua
aiLib : comment une ressource Lua charge ai-lib, quand utiliser un thread, comment les vecteurs et tables Lua passent vers TypeScript, et où chaque fonction est documentée.
Toutes les fonctions aiLib
La liste complète des membres d’aiLib : côté, si l’appel attend, et la page qui le documente avec son onglet Lua.