ox_lib bağlam menüsü: registerContext, inputDialog ve alertDialog

ox_lib ile FiveM menüleri oluşturma: lib.registerContext ve alt menüler ve simgeler ile lib.showContext, artı lib.inputDialog ve lib.alertDialog ve 'lib' nil'dir düzeltme.

lib.registerContext çağırırsınız ve konsol şunları söyler:

text
attempt to index a nil value (global 'lib')

Veya menü kodu çalışır ve hiçbir şey açılmaz. Bu makale ox_lib'in menü araçlarını kapsar: bağlam menüsü, giriş iletişim kutusu ve uyarı iletişim kutusu, lib var eden bildirim satırı ile.

Bildiriminizde ox_lib'i Yükleme

lib, ox_lib'in init dosyası aracılığıyla kaynağınıza eklediği global'dir. Olmadan, her lib. çağrısı yukarıdaki hata ile başarısız olur. fxmanifest.lua içinde:

lua
fx_version 'cerulean'
game 'gta5'
lua54 'yes'

shared_script '@ox_lib/init.lua'

client_scripts { 'client/*.lua' }
server_scripts { 'server/*.lua' }

Sonra server.cfg içinde ox_lib'i betiğinizden önce başlatın:

cfg
ensure ox_lib
ensure my_script

Dosya hiç bulunamazsa, @ox_lib/init.lua bulunamadı bölümüne bakın.

Bağlam Menüsü

Bağlam menüsü tıklanabilir seçeneklerin bir listesidir. Bunu bir kimlik altında bir kez kaydedersiniz, sonra buna ihtiyacınız olduğunda gösterirsiniz. Her iki çağrı da istemci tarafı:

lua
lib.registerContext({
    id = 'my_script_main',
    title = 'Garage',
    options = {
        {
            title = 'Take out a vehicle',
            description = 'Choose from your parked vehicles',
            icon = 'car',
            onSelect = function()
                print('take out')
            end,
        },
        {
            title = 'Store vehicle',
            description = 'Park the vehicle you are in',
            icon = 'warehouse',
            onSelect = function()
                print('store')
            end,
        },
        {
            title = 'Impound',
            description = 'Not available',
            icon = 'lock',
            disabled = true,
        },
    },
})

lib.showContext('my_script_main')

En sık kullanacağınız seçenekler:

Alan Ne Yapar
title Seçeneğin ana metni.
description Başlığın altında ikinci metin satırı.
icon Font Awesome simge adı, car gibi. Ayrıca tam bir sınıf geçirebilirsiniz, fa-solid fa-car gibi.
onSelect Seçenek tıklandığında çalışan işlev.
menu Açılacak başka bağlamın kimliği (alt menü).
arrow Sağda bir ok gösterir, birşey açtığını ima eder.
disabled Seçeneği gri yaparak tıklanamaz hale getirir.

event, serverEvent, args, metadata ve progress gibi diğer alanlar var. Çalıştırdığınız sürüm için ox_lib belgelerine bakın.

Alt Menüler

Alt menüyü açmak için, seçeneğe sonraki bağlam kimliği ile menu verin. İkinci bağlama birinciye geri işaret eden bir menu verin ve geri düğmesi alır:

lua
lib.registerContext({
    id = 'my_script_main',
    title = 'Garage',
    options = {
        {
            title = 'My vehicles',
            icon = 'car',
            arrow = true,
            menu = 'my_script_vehicles',
        },
    },
})

lib.registerContext({
    id = 'my_script_vehicles',
    title = 'My vehicles',
    menu = 'my_script_main',
    options = {
        {
            title = 'Sultan',
            description = 'Plate ABC 123',
            onSelect = function()
                print('selected Sultan')
            end,
        },
    },
})

lib.showContext('my_script_main')

İpucu: Seçenekler tablosu menü kaydettiğinizde oluşturulur. Oyuncunun araçları gibi değişen bir liste için, tabloyu oluşturun ve lib.showContext yapmadan hemen önce lib.registerContext çağırın. Aynı kimliği yeniden kaydetmek eski menüyü değiştirir.

lib.hideContext() menüyü koddan kapatır.

inputDialog ile Giriş İsteği

lib.inputDialog bir formu açar ve oyuncu onaylarsa veya iptal ederse bekler. Satır sırasında değerleri olan bir tablo veya oyuncu iptal ettiyse nil döndürür:

lua
local input = lib.inputDialog('New shop', {
    { type = 'input', label = 'Shop name', required = true },
    { type = 'number', label = 'Price', default = 100, min = 0 },
    { type = 'checkbox', label = 'Open to everyone' },
})

if not input then return end

local name, price, open = input[1], input[2], input[3]
print(name, price, open)

Diğer satır türleri select, slider ve textarea içerir. select seçenek listesi alır:

lua
local input = lib.inputDialog('Pick a colour', {
    {
        type = 'select',
        label = 'Colour',
        options = {
            { value = 'red', label = 'Red' },
            { value = 'blue', label = 'Blue' },
        },
    },
})

if input then print(input[1]) end

Çağrı beklediğinden, bir iş parçacığında veya onSelect işlevi gibi beklemesine izin verilen işleyicide çalıştırın. Hiçbir zaman istemci tarafında doğrulamayın. Değer sunucu'ya gittiğinde, orada da kontrol edin.

alertDialog ile Onay

lib.alertDialog bir evet/hayır penceresıdir. 'confirm' veya 'cancel' döndürür:

lua
local alert = lib.alertDialog({
    header = 'Delete the shop?',
    content = 'This cannot be undone.',
    centered = true,
    cancel = true,
})

if alert == 'confirm' then
    print('deleting')
end

cancel = true olmadan yalnızca Tamam düğmesi vardır.

Hedeften veya Komuttan Kullanma

Menü genellikle başka birşey tarafından açılır. ox_target ile, onSelect içinde lib.showContext çağırın (ox_target: hedef ekleme bölümüne bakın). Komut ile, işleyicide çağırın:

lua
RegisterCommand('garage', function()
    lib.showContext('my_script_main')
end, false)

Komut çalıştığında kimlik var olması için istemci dosyasının başında veya betik başladığında bağlamları kaydedin.

Kontrol Listesi

Belirti Çözüm
attempt to index a nil value (global 'lib') shared_script '@ox_lib/init.lua' ekleyin ve ox_lib ilk başlayın
lib.showContext hiçbir şey açmaz Göstermeden önce kimliği lib.registerContext ile kaydedin
Alt menünün geri düğmesi yok Alt menüde menu'yü ana kimliğe ayarlayın
Menü eski verileri gösterir lib.showContext yapılamadan yeni seçeneklerle yeniden kaydedin
inputDialog nil döndürür Oyuncu iptal etti: nil için kontrol edin
Simge görünmez Geçerli Font Awesome adı veya fa-solid fa-car gibi tam sınıf kullanın

Kısa yanıtlar

Neden betiğimde lib nil'dir?

Bildiriminiz ox_lib'in init dosyasını yüklemiyor. shared_script '@ox_lib/init.lua' ekleyin ve ox_lib'in kaynağınızdan önce başladığından emin olun.

Alt menü nasıl yaparım?

Kendi id ile ikinci bağlam kaydedin, sonra ilk menüde seçeneğe menu = 'second_id' verin. İkincide menu = 'first_id' ayarlayın, böylece geri düğmesi alır.

Oyuncunun yazdığı nedir nasıl okurum?

lib.inputDialog satır başına bir değer ile bir tablo döndürür, sırada veya oyuncu iptal ettiyse nil. Her zaman nil için kontrol edin.

Bu sorunu yaşatmayan scriptler

Item Creator V2Animasyonlar, proplar, efektler ve daha fazlasıyla kullanılabilir eşyalar oluşturun — kod yazmadan.Scripti gör →Shop CreatorBir dakikadan kısa sürede dükkân kurun — sahipler, çalışanlar, kasalar ve soygunlar dahil.Scripti gör →Quest CreatorGörevler ve NPC diyalogları için oyun içinde düğüm düğüm kurulan görsel editör.Scripti gör →

Okumaya devam edin