Nur-Lua-Helfer
aiLib.playerData, aiLib.online, aiLib.isAdmin und die Tabelle aiLib.menu: die aiLib-Funktionen, deren Lua-Form sich von der TypeScript-Lib unterscheidet.
Die meisten aiLib-Funktionen sind der Lua-Zwilling einer TypeScript-Funktion und werden daneben dokumentiert, mit einem Lua-Tab (siehe Jede aiLib-Funktion). Die auf dieser Seite haben in Lua einen anderen Namen, eine andere Form oder ein anderes Verhalten, daher werden sie hier dokumentiert.
Client: Spielerdaten
aiLib.playerData.get
Der letzte Wert, den ai-core für einen Schlüssel der Daten des lokalen Spielers gesendet hat. Wenn seit dem Start deiner Ressource nichts angekommen ist, fragt es ai-core einmal (GetPlayerData) und behält die Antwort.
Seite: Client · Wartet: nein
local value = aiLib.playerData.get(key)TypeScript: dieselben Daten über getPlayerData(key) (siehe Mitgliedschaft und Spielerdaten).
Parameter
Prop
Type
Rückgabewert
Der Wert: eine Tabelle für character, money ({ cash = 500, bank = 5000 }), jobs, job, gangs und metadata; ein String oder nil für duty und activeGang. nil, solange kein Charakter geladen ist oder ai-core nicht läuft.
Beispiel
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
Führt jedes Mal eine Funktion aus, wenn ai-core einen neuen Wert eines Schlüssels für den lokalen Spieler schickt (ein Jobwechsel, Geld, Dienstantritt). Für money und metadata sendet ai-core nur die geänderten Einträge; aiLib führt sie zusammen, sodass dein Handler immer die ganze Tabelle bekommt.
Seite: Client · Wartet: nein
aiLib.playerData.onChange(key, function(value) end)TypeScript: onPlayerData(key, handler) (siehe Mitgliedschaft und Spielerdaten).
Parameter
Prop
Type
Rückgabewert
Nichts. Es gibt keine Möglichkeit, den Handler zu entfernen; er verschwindet mit deiner Ressource.
Beispiel
aiLib.playerData.onChange('duty', function(job)
if job == 'police' then
aiLib.notify('You are now on duty', 'success')
end
end)Server: Online-Spieler
aiLib.online liest geladene Spieler über die Exports von ai-core, ein Export-Aufruf pro Lesezugriff. Es ist für Abfragen gedacht, wenn eine Aktion passiert (ein Befehl, ein Callback), nicht für jeden Tick. Das TypeScript-online hält einen lokalen Spiegel mit mehr Lesern und anderen Rückgabeformen (siehe Spieler).
aiLib.online.character
Der geladene Charakter eines Spielers.
Seite: Server · Wartet: nein
local character = aiLib.online.character(src)Parameter
Prop
Type
Rückgabewert
Eine CharacterInfo-Tabelle (id, citizenid, firstname, lastname, birthdate, sex, nationality...), oder nil, wenn der Spieler keinen Charakter geladen hat.
Beispiel
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
"Vorname Nachname" des Charakters, sonst der FiveM-Name des Spielers.
Seite: Server · Wartet: nein
local name = aiLib.online.name(src, fallback)TypeScript: online.name(source, { fallback }) nimmt eine Optionstabelle statt eines Booleans.
Parameter
Prop
Type
Rückgabewert
string: der Charaktername, sonst der FiveM-Name (oder "" bei fallback = false oder wenn der Spieler weg ist).
Beispiel
print(('%s opened the shop'):format(aiLib.online.name(source)))aiLib.online.jobs
Jeder Job eines Spielers, im Dienst oder nicht.
Seite: Server · Wartet: nein
local jobs = aiLib.online.jobs(src)TypeScript: online.jobs(source) gibt nur die Job-Namen zurück; Lua gibt die Mitgliedschaftstabellen zurück.
Parameter
Prop
Type
Rückgabewert
Eine Liste von JobMembership-Tabellen ({ job = 'police', grade = 2 }). Eine leere Liste, wenn der Spieler keinen hat oder keinen Charakter.
Beispiel
for _, membership in ipairs(aiLib.online.jobs(source)) do
print(membership.job, membership.grade)
endaiLib.online.gangs
Jede Gang eines Spielers.
Seite: Server · Wartet: nein
local gangs = aiLib.online.gangs(src)TypeScript: online.gangs(source) gibt nur die Gang-Namen zurück.
Parameter
Prop
Type
Rückgabewert
Eine Liste von GangMembership-Tabellen ({ gang = 'ballas', grade = 0 }), oder eine leere Liste.
Beispiel
local inAGang = #aiLib.online.gangs(source) > 0aiLib.online.jobGrade
Der Rang eines Spielers in einem Job.
Seite: Server · Wartet: nein
local grade = aiLib.online.jobGrade(src, job)Parameter
Prop
Type
Rückgabewert
integer (0 = der niedrigste Rang), oder nil, wenn der Spieler nicht in diesem Job ist.
Beispiel
local grade = aiLib.online.jobGrade(source, 'police')
if not grade or grade < 2 then return aiLib.fail('NOT_ALLOWED') endaiLib.online.gangGrade
Der Rang eines Spielers in einer Gang.
Seite: Server · Wartet: nein
local grade = aiLib.online.gangGrade(src, gang)Parameter
Prop
Type
Rückgabewert
integer, oder nil, wenn der Spieler nicht in dieser Gang ist.
Beispiel
local isBoss = (aiLib.online.gangGrade(source, 'ballas') or -1) >= 3aiLib.online.dutyJob
Der Job, für den ein Spieler im Dienst ist.
Seite: Server · Wartet: nein
local job = aiLib.online.dutyJob(src)Parameter
Prop
Type
Rückgabewert
Der Jobname, oder nil, wenn außer Dienst.
Beispiel
if aiLib.online.dutyJob(source) ~= 'police' then return aiLib.fail('NOT_ON_DUTY') endaiLib.online.sources
Die Server-IDs aller Spieler mit geladenem Charakter.
Seite: Server · Wartet: nein
local players = aiLib.online.sources()Rückgabewert
Eine Liste von Server-IDs (leer, wenn niemand geladen ist oder ai-core nicht läuft).
Beispiel
for _, src in ipairs(aiLib.online.sources()) do
if aiLib.online.dutyJob(src) == 'police' then
aiLib.notify(src, 'Robbery in progress', 'warning')
end
endJeder Aufruf ist ein Export-Aufruf an ai-core. Lies in einer Schleife über alle Spieler, was du brauchst, einmal pro Spieler, und führe es nie in jedem Frame aus. Für „wie viele sind im Dienst“ lies stattdessen den Global State ai:duty:<job> (GlobalState['ai:duty:police']).
Server: Berechtigungen
aiLib.isAdmin
Ob ein Spieler ein ai-core-Admin ist (ACE ai.admin) oder die ACE hat, die du angibst.
Seite: Server · Wartet: nein
local allowed = aiLib.isAdmin(src, ace)TypeScript: isAdmin(ace?) ist stattdessen ein Guard für onClientCallback / onClientEvent (siehe Client-Eingaben). In Lua sicherst du einen Callback mit seiner Option ace ab, oder du rufst aiLib.isAdmin selbst auf.
Parameter
Prop
Type
Rückgabewert
true, wenn der Spieler die ACE hat, sonst false.
Beispiel
RegisterCommand('fixall', function(source)
if not aiLib.isAdmin(source) then return end
-- Arbeit nur für Admins hier
end, false)Client: die Menü-Tabelle
aiLib.menu
Die Dialoge liegen in einer Tabelle. Die Namen auf oberster Ebene sind dieselben Funktionen, für kurze Aufrufe behalten:
Auf aiLib.menu | Dasselbe wie | Wartet | Antwortet |
|---|---|---|---|
menu.show(request, listeners?) | (nur hier) | ja | Die id des gewählten Eintrags, '__back' für das Zurück eines Untermenüs, oder nil, wenn geschlossen. |
menu.input(request) | aiLib.input(request) | ja | Eine Tabelle der Werte nach Feld-name, oder nil, wenn geschlossen. |
menu.itemPicker(request) | aiLib.itemPicker(request) | ja | Eine Liste von { name, count }, oder nil. Nur Admin-Werkzeuge. |
menu.skillCheck(difficulty, keys?) | aiLib.skillCheck(difficulty, keys?) | ja | true, wenn jede Stufe getroffen wurde. |
menu.lockpick(options?) | aiLib.lockpick(options?) | ja | 'opened', 'broken' oder 'cancelled'. |
Die Anfrageformen sind MenuRequest, InputRequest, ItemPickerRequest und SkillDifficulty. Jede Option und jeder Listener ist bei den TypeScript-Zwillingen unter Gemeinsame UI dokumentiert.
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 für Lua
aiLib: wie eine Lua-Ressource ai-lib lädt, wann du einen Thread brauchst, wie Lua-Vektoren und -Tabellen nach TypeScript gelangen, und wo jede Funktion dokumentiert ist.
Jede aiLib-Funktion
die vollständige Liste der aiLib-Mitglieder: Client- oder Server-Seite, ob der Aufruf wartet, und die Seite, die es mit seinem Lua-Tab dokumentiert.