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
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
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
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
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
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
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
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
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
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
for _, membership in ipairs(aiLib.online.jobs(source)) do
print(membership.job, membership.grade)
endaiLib.online.gangs
Każdy gang gracza.
Strona: Serwer · Czeka: nie
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
local inAGang = #aiLib.online.gangs(source) > 0aiLib.online.jobGrade
Stopień gracza w jednej pracy.
Strona: Serwer · Czeka: nie
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
local grade = aiLib.online.jobGrade(source, 'police')
if not grade or grade < 2 then return aiLib.fail('NOT_ALLOWED') endaiLib.online.gangGrade
Stopień gracza w jednym gangu.
Strona: Serwer · Czeka: nie
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
local isBoss = (aiLib.online.gangGrade(source, 'ballas') or -1) >= 3aiLib.online.dutyJob
Praca, w której gracz jest na służbie.
Strona: Serwer · Czeka: nie
local job = aiLib.online.dutyJob(src)Parametry
Prop
Type
Zwracana wartość
Nazwa pracy albo nil, gdy jest poza służbą.
Przykład
if aiLib.online.dutyJob(source) ~= 'police' then return aiLib.fail('NOT_ON_DUTY') endaiLib.online.sources
Id serwerowe każdego gracza z wczytaną postacią.
Strona: Serwer · Czeka: nie
local players = aiLib.online.sources()Zwracana wartość
Lista id serwerowych (pusta, gdy nikt nie jest wczytany albo ai-core nie działa).
Przykład
for _, src in ipairs(aiLib.online.sources()) do
if aiLib.online.dutyJob(src) == 'police' then
aiLib.notify(src, 'Robbery in progress', 'warning')
end
endKaż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
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
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.menu | To samo co | Czeka | Odpowiada |
|---|---|---|---|
menu.show(request, listeners?) | (tylko tutaj) | tak | id wybranej pozycji, '__back' dla powrotu z podmenu albo nil po zamknięciu. |
menu.input(request) | aiLib.input(request) | tak | Tabela wartości według name pola albo nil po zamknięciu. |
menu.itemPicker(request) | aiLib.itemPicker(request) | tak | Lista { name, count } albo nil. Tylko narzędzia administratora. |
menu.skillCheck(difficulty, keys?) | aiLib.skillCheck(difficulty, keys?) | tak | true, 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.
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)