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:
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:
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:
ensure ox_lib
ensure my_scriptDosya 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ı:
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:
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.showContextyapmadan hemen öncelib.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:
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:
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:
local alert = lib.alertDialog({
header = 'Delete the shop?',
content = 'This cannot be undone.',
centered = true,
cancel = true,
})
if alert == 'confirm' then
print('deleting')
endcancel = 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:
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 →