AI Core
Dokumentacja APILib dla Lua

Funkcje tylko dla Lua

aiLib.playerData, aiLib.online, aiLib.isAdmin i tabela aiLib.menu: funkcje aiLib, których forma w Lua różni się od liba TypeScript.

Większość funkcji aiLib to odpowiednik w Lua funkcji TypeScript i jest opisana obok niej, w zakładce Lua (zobacz Każda funkcja aiLib). Te z tej strony mają w Lua inną nazwę, kształt albo zachowanie, więc są opisane tutaj.

Klient: dane gracza

aiLib.playerData.get

Ostatnia wartość, którą ai-core wysłał dla jednego klucza danych lokalnego gracza. Gdy od startu twojego zasobu nic nie przyszło, pyta ai-core raz (GetPlayerData) i zachowuje odpowiedź.

Strona: Klient · Czeka: nie

Lua
local value = aiLib.playerData.get(key)

TypeScript: te same dane przez getPlayerData(key) (zobacz Członkostwo i dane gracza).

Parametry

Prop

Type

Zwracana wartość

Wartość: tabela dla character, money ({ cash = 500, bank = 5000 }), jobs, job, gangs i metadata; string albo nil dla duty i activeGang. nil, dopóki żadna postać nie jest wczytana albo ai-core nie działa.

Przykład

client.lua
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

Uruchamia funkcję za każdym razem, gdy ai-core wypycha nową wartość jednego klucza lokalnego gracza (zmiana pracy, pieniądze, wejście na służbę). Dla money i metadata ai-core wysyła tylko zmienione wpisy; aiLib je scala, więc twój handler zawsze dostaje całą tabelę.

Strona: Klient · Czeka: nie

Lua
aiLib.playerData.onChange(key, function(value) end)

TypeScript: onPlayerData(key, handler) (zobacz Członkostwo i dane gracza).

Parametry

Prop

Type

Zwracana wartość

Nic. Nie da się usunąć handlera; znika razem z twoim zasobem.

Przykład

client.lua
aiLib.playerData.onChange('duty', function(job)
    if job == 'police' then
        aiLib.notify('You are now on duty', 'success')
    end
end)

Serwer: gracze online

aiLib.online czyta wczytanych graczy przez eksporty ai-core, jedno wywołanie eksportu na odczyt. Jest przeznaczone do sprawdzeń w chwili akcji (komenda, callback), nie do każdego ticku. online w TypeScript trzyma lokalne lustro z większą liczbą czytników i innymi kształtami wyników (zobacz Gracze).

aiLib.online.character

Wczytana postać gracza.

Strona: Serwer · Czeka: nie

Lua
local character = aiLib.online.character(src)

Parametry

Prop

Type

Zwracana wartość

Tabela CharacterInfo (id, citizenid, firstname, lastname, birthdate, sex, nationality...) albo nil, gdy gracz nie ma wczytanej postaci.

Przykład

server.lua
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

"Imię Nazwisko" postaci, w przeciwnym razie nazwa gracza w FiveM.

Strona: Serwer · Czeka: nie

Lua
local name = aiLib.online.name(src, fallback)

TypeScript: online.name(source, { fallback }) przyjmuje tabelę opcji zamiast wartości logicznej.

Parametry

Prop

Type

Zwracana wartość

string: imię i nazwisko postaci, w przeciwnym razie nazwa z FiveM (albo "" przy fallback = false lub gdy gracza już nie ma).

Przykład

server.lua
print(('%s opened the shop'):format(aiLib.online.name(source)))

aiLib.online.jobs

Każda praca gracza, na służbie czy nie.

Strona: Serwer · Czeka: nie

Lua
local jobs = aiLib.online.jobs(src)

TypeScript: online.jobs(source) zwraca tylko nazwy prac; Lua zwraca tabele członkostwa.

Parametry

Prop

Type

Zwracana wartość

Lista tabel JobMembership ({ job = 'police', grade = 2 }). Pusta lista, gdy gracz nie ma żadnej pracy albo postaci.

Przykład

server.lua
for _, membership in ipairs(aiLib.online.jobs(source)) do
    print(membership.job, membership.grade)
end

aiLib.online.gangs

Każdy gang gracza.

Strona: Serwer · Czeka: nie

Lua
local gangs = aiLib.online.gangs(src)

TypeScript: online.gangs(source) zwraca tylko nazwy gangów.

Parametry

Prop

Type

Zwracana wartość

Lista tabel GangMembership ({ gang = 'ballas', grade = 0 }) albo pusta lista.

Przykład

server.lua
local inAGang = #aiLib.online.gangs(source) > 0

aiLib.online.jobGrade

Stopień gracza w jednej pracy.

Strona: Serwer · Czeka: nie

Lua
local grade = aiLib.online.jobGrade(src, job)

Parametry

Prop

Type

Zwracana wartość

integer (0 = najniższy stopień) albo nil, gdy gracz nie ma tej pracy.

Przykład

server.lua
local grade = aiLib.online.jobGrade(source, 'police')
if not grade or grade < 2 then return aiLib.fail('NOT_ALLOWED') end

aiLib.online.gangGrade

Stopień gracza w jednym gangu.

Strona: Serwer · Czeka: nie

Lua
local grade = aiLib.online.gangGrade(src, gang)

Parametry

Prop

Type

Zwracana wartość

integer albo nil, gdy gracz nie należy do tego gangu.

Przykład

server.lua
local isBoss = (aiLib.online.gangGrade(source, 'ballas') or -1) >= 3

aiLib.online.dutyJob

Praca, w której gracz jest na służbie.

Strona: Serwer · Czeka: nie

Lua
local job = aiLib.online.dutyJob(src)

Parametry

Prop

Type

Zwracana wartość

Nazwa pracy albo nil, gdy jest poza służbą.

Przykład

server.lua
if aiLib.online.dutyJob(source) ~= 'police' then return aiLib.fail('NOT_ON_DUTY') end

aiLib.online.sources

Id serwerowe każdego gracza z wczytaną postacią.

Strona: Serwer · Czeka: nie

Lua
local players = aiLib.online.sources()

Zwracana wartość

Lista id serwerowych (pusta, gdy nikt nie jest wczytany albo ai-core nie działa).

Przykład

server.lua
for _, src in ipairs(aiLib.online.sources()) do
    if aiLib.online.dutyJob(src) == 'police' then
        aiLib.notify(src, 'Robbery in progress', 'warning')
    end
end

Każde wywołanie to wywołanie eksportu ai-core. W pętli po wszystkich graczach odczytaj to, czego potrzebujesz, raz na gracza i nigdy nie uruchamiaj tego co klatkę. Dla "ilu jest na służbie" czytaj stan globalny ai:duty:<job> (GlobalState['ai:duty:police']).

Serwer: uprawnienia

aiLib.isAdmin

Czy gracz jest administratorem ai-core (ACE ai.admin) albo ma podane przez ciebie ACE.

Strona: Serwer · Czeka: nie

Lua
local allowed = aiLib.isAdmin(src, ace)

TypeScript: isAdmin(ace?) jest tam za to strażnikiem dla onClientCallback / onClientEvent (zobacz Wejście z klienta). W Lua zabezpiecz callback jego opcją ace albo wywołaj aiLib.isAdmin sam.

Parametry

Prop

Type

Zwracana wartość

true, gdy gracz ma to ACE, w przeciwnym razie false.

Przykład

server.lua
RegisterCommand('fixall', function(source)
    if not aiLib.isAdmin(source) then return end
    -- tu praca tylko dla administratora
end, false)

Klient: tabela menu

aiLib.menu

Okna dialogowe są w jednej tabeli. Nazwy najwyższego poziomu to te same funkcje, zostawione dla krótkich wywołań:

W aiLib.menuTo samo coCzekaOdpowiada
menu.show(request, listeners?)(tylko tutaj)takid wybranej pozycji, '__back' dla powrotu z podmenu albo nil po zamknięciu.
menu.input(request)aiLib.input(request)takTabela wartości według name pola albo nil po zamknięciu.
menu.itemPicker(request)aiLib.itemPicker(request)takLista { name, count } albo nil. Tylko narzędzia administratora.
menu.skillCheck(difficulty, keys?)aiLib.skillCheck(difficulty, keys?)taktrue, gdy trafiono każdy etap.
menu.lockpick(options?)aiLib.lockpick(options?)tak'opened', 'broken' albo 'cancelled'.

Kształty żądań to MenuRequest, InputRequest, ItemPickerRequest i SkillDifficulty. Każda opcja i listener są opisane przy odpowiednikach TypeScript na stronie Wspólne UI.

client.lua
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)

Na tej stronie