AI Core
API başvurusuLua için lib

Yalnızca Lua’ya özgü yardımcılar

aiLib.playerData, aiLib.online, aiLib.isAdmin ve aiLib.menu tablosu: Lua biçimi TypeScript lib’inden farklı olan aiLib fonksiyonları.

aiLib fonksiyonlarının çoğu bir TypeScript fonksiyonunun Lua karşılığıdır ve onun yanında bir Lua sekmesiyle belgelenir (bkz. Tüm aiLib fonksiyonları). Bu sayfadakilerin Lua’da farklı bir adı, biçimi ya da davranışı vardır; bu yüzden burada belgelenirler.

Client: oyuncu verisi

aiLib.playerData.get

ai-core’un yerel oyuncunun verisinin bir anahtarı için gönderdiği son değer. Resource’un başladığından beri hiçbir şey gelmediyse ai-core’a bir kez sorar (GetPlayerData) ve cevabı tutar.

Taraf: Client · Bekler: hayır

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

TypeScript: aynı veri getPlayerData(key) ile (bkz. Üyelik ve oyuncu verisi).

Parametreler

Prop

Type

Dönüş değeri

Değer: character, money ({ cash = 500, bank = 5000 }), jobs, job, gangs ve metadata için bir tablo; duty ve activeGang için bir string ya da nil. Hiçbir karakter yüklü değilken ya da ai-core çalışmıyorken nil.

Örnek

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

ai-core yerel oyuncu için bir anahtarın yeni bir değerini her gönderdiğinde (bir meslek değişikliği, para, göreve başlamak) bir fonksiyon çalıştırır. money ve metadata için ai-core yalnızca değişen girdileri gönderir; aiLib onları birleştirir, böylece handler’ın her zaman tablonun tamamını alır.

Taraf: Client · Bekler: hayır

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

TypeScript: onPlayerData(key, handler) (bkz. Üyelik ve oyuncu verisi).

Parametreler

Prop

Type

Dönüş değeri

Hiçbir şey. Handler’ı kaldırmanın bir yolu yoktur; resource’unla birlikte kaldırılır.

Örnek

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

Server: online oyuncular

aiLib.online yüklü oyuncuları ai-core’un export’ları üzerinden okur; okuma başına bir export çağrısı. Bir aksiyon olduğunda (bir komut, bir callback) yapılan aramalar içindir, her tick için değil. TypeScript online’ı daha fazla okuyucu ve farklı dönüş biçimleri olan yerel bir ayna tutar (bkz. Oyuncular).

aiLib.online.character

Bir oyuncunun yüklü karakteri.

Taraf: Server · Bekler: hayır

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

Parametreler

Prop

Type

Dönüş değeri

Bir CharacterInfo tablosu (id, citizenid, firstname, lastname, birthdate, sex, nationality...) ya da oyuncunun yüklü karakteri yoksa nil.

Örnek

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

Karakterin "Ad Soyad"ı, yoksa oyuncunun FiveM adı.

Taraf: Server · Bekler: hayır

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

TypeScript: online.name(source, { fallback }) bir boolean yerine bir seçenek tablosu alır.

Parametreler

Prop

Type

Dönüş değeri

string: karakter adı, yoksa FiveM adı (ya da fallback = false ile veya oyuncu gittiyse "").

Örnek

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

aiLib.online.jobs

Görevde olsun ya da olmasın bir oyuncunun her mesleği.

Taraf: Server · Bekler: hayır

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

TypeScript: online.jobs(source) yalnızca meslek adlarını döndürür; Lua üyelik tablolarını döndürür.

Parametreler

Prop

Type

Dönüş değeri

JobMembership tablolarından bir liste ({ job = 'police', grade = 2 }). Oyuncunun mesleği ya da karakteri yoksa boş bir liste.

Örnek

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

aiLib.online.gangs

Bir oyuncunun her çetesi.

Taraf: Server · Bekler: hayır

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

TypeScript: online.gangs(source) yalnızca çete adlarını döndürür.

Parametreler

Prop

Type

Dönüş değeri

GangMembership tablolarından bir liste ({ gang = 'ballas', grade = 0 }) ya da boş bir liste.

Örnek

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

aiLib.online.jobGrade

Bir oyuncunun bir meslekteki rütbesi.

Taraf: Server · Bekler: hayır

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

Parametreler

Prop

Type

Dönüş değeri

integer (0 = en düşük rütbe) ya da oyuncu o meslekte değilse nil.

Örnek

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

Bir oyuncunun bir çetedeki rütbesi.

Taraf: Server · Bekler: hayır

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

Parametreler

Prop

Type

Dönüş değeri

integer ya da oyuncu o çetede değilse nil.

Örnek

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

aiLib.online.dutyJob

Bir oyuncunun görevde olduğu meslek.

Taraf: Server · Bekler: hayır

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

Parametreler

Prop

Type

Dönüş değeri

Meslek adı ya da görevde değilse nil.

Örnek

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

aiLib.online.sources

Yüklü karakteri olan her oyuncunun server id’si.

Taraf: Server · Bekler: hayır

Lua
local players = aiLib.online.sources()

Dönüş değeri

Bir server id listesi (kimse yüklü değilse ya da ai-core çalışmıyorsa boş).

Örnek

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

Her çağrı ai-core’a bir export çağrısıdır. Her oyuncuyu dolaşan bir döngüde, ihtiyacın olanı oyuncu başına bir kez oku ve onu asla her karede çalıştırma. "Görevde kaç kişi var" için bunun yerine ai:duty:<job> global state’ini (GlobalState['ai:duty:police']) oku.

Server: yetkiler

aiLib.isAdmin

Bir oyuncunun ai-core admin’i (ACE ai.admin) olup olmadığı ya da belirttiğin ACE’ye sahip olup olmadığı.

Taraf: Server · Bekler: hayır

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

TypeScript: isAdmin(ace?) bunun yerine onClientCallback / onClientEvent için bir korumadır (bkz. Client girdisi). Lua’da bir callback’i ace seçeneğiyle kısıtla ya da aiLib.isAdmin’i kendin çağır.

Parametreler

Prop

Type

Dönüş değeri

Oyuncunun ACE’si varsa true, yoksa false.

Örnek

server.lua
RegisterCommand('fixall', function(source)
    if not aiLib.isAdmin(source) then return end
    -- yalnızca admin’e özel iş burada
end, false)

Client: menü tablosu

aiLib.menu

Pencereler tek bir tabloda durur. Üst seviyedeki adlar, kısa çağrılar için tutulan aynı fonksiyonlardır:

aiLib.menu üzerindeŞununla aynıBeklerCevaplar
menu.show(request, listeners?)(yalnızca burada)evetSeçilen öğe id’si, bir alt menünün geri dönüşü için '__back' ya da kapatıldığında nil.
menu.input(request)aiLib.input(request)evetAlan name’ine göre değerlerin bir tablosu ya da kapatıldığında nil.
menu.itemPicker(request)aiLib.itemPicker(request)evet{ name, count } listesi ya da nil. Yalnızca admin araçları.
menu.skillCheck(difficulty, keys?)aiLib.skillCheck(difficulty, keys?)evetHer aşama tutturulduysa true.
menu.lockpick(options?)aiLib.lockpick(options?)evet'opened', 'broken' ya da 'cancelled'.

İstek biçimleri MenuRequest, InputRequest, ItemPickerRequest ve SkillDifficulty’dir. Her seçenek ve dinleyici, TypeScript karşılıklarıyla birlikte Ortak arayüz sayfasında belgelenir.

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)

Bu sayfada