FiveM bildirimler ve ilerleme çubukları: ESX, QBCore ve ox_lib
ESX, QBCore ve ox_lib üzerinde ShowNotification, Functions.Notify, lib.notify ve lib.progressBar ile bildirimler gönderme ve ilerleme çubukları gösterme, artı bir köprü işlevi.
Her çerçevenin bir mesaj veya ilerleme çubuğu göstermenin kendi yolu vardır ve bir tanesi için yazılmış bir betik diğerinde başarısız olur:
attempt to index a nil value (global 'lib')Bu makale ESX, QBCore ve ox_lib için bildirimler ve ilerleme çubukları için çağrıları listeler, ardından betiğinizin sunucunun çalıştırdığı hangisinde çalışmasını sağlayacak tek bir köprü işlevini gösterir.
ESX'de Bildirimler
İstemci'de:
ESX.ShowNotification('You picked up a package')Sunucu'da, oyuncu nesnesinden:
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.showNotification('Your order is ready')Buradaki ESX ESX = exports['es_extended']:getSharedObject() nesnesidir. Son ESX sürümleri metin sonrasında bir tür ve süre de kabul eder. Bunlara güveniyorsanız, sürümünüzde test edin.
QBCore'da Bildirimler
İstemci'de:
local QBCore = exports['qb-core']:GetCoreObject()
QBCore.Functions.Notify('You picked up a package', 'success', 5000)Tür 'primary', 'success' veya 'error''dır ve son değer milisaniye cinsinden süredir. Sunucu'dan, olayı oyuncuya gönderin:
TriggerClientEvent('QBCore:Notify', source, 'Your order is ready', 'success')QBox'ta aynı QBCore çağrıları uyumluluk katmanı aracılığıyla çalışmaya devam eder ve ox_lib bildirimleri iyi bir alternatiftir.
ox_lib ile Bildirimler
ox_lib'nin kendi bildirimi vardır ve her çerçevede aynı şekilde çalışır. İstemci'de:
lib.notify({
title = 'Delivery',
description = 'You picked up a package',
type = 'success',
duration = 5000,
})Tür 'inform', 'success', 'warning' veya 'error''dır. Sunucu'dan, olayı oyuncuda tetikleyin:
TriggerClientEvent('ox_lib:notify', source, {
title = 'Delivery',
description = 'Your order is ready',
type = 'success',
})lib global'ı, ox_lib bağlam menüsü rehberi'nde açıklandığı gibi, fxmanifest.lua'da shared_script '@ox_lib/init.lua''ye ihtiyaç duyar. Olmadan yukarıda lib nil hatası alırsınız.
İlerleme Çubukları
ox_lib ile, ilerleme çubuğu bekleyen ve bitip bitmediğini döndüren bir çağrıdır:
if lib.progressBar({
duration = 5000,
label = 'Repairing the engine',
useWhileDead = false,
canCancel = true,
disable = {
move = true,
car = true,
combat = true,
},
anim = {
dict = 'mini@repair',
clip = 'fixing_a_ped',
},
}) then
print('finished')
else
print('cancelled')
endlib.progressCircle aynı seçenekleri alır ve bir çubuk yerine bir daire gösterir. Her ikisi de oyuncuya bir prop ekleyebilir.
QBCore'un versiyonu beklemek yerine bir geri arama kullanır:
QBCore.Functions.Progressbar('repair_engine', 'Repairing the engine', 5000, false, true, {
disableMovement = true,
disableCarMovement = true,
disableMouse = false,
disableCombat = true,
}, {
animDict = 'mini@repair',
anim = 'fixing_a_ped',
flags = 49,
}, {}, {}, function()
print('finished')
end, function()
print('cancelled')
end)Argümanlar, sırasıyla: bir ad, etiket, süre, useWhileDead, canCancel, devre dışı bırakılan kontroller, animasyon, iki destek, ardından bitir ve iptal geri aramaları. ESX'in her sunucunun paylaştığı kendi ilerleme çubuğu yoktur, bu nedenle ESX'de lib.progressBar kullanın.
Hepsi için bir köprü işlevi
Betiklerinizi çerçeve gerektirmeme durumunu tutmak için, çerçeve ayrıntısını bir kez yazın ve kendi işlevlerinizi her yerde çağırın. Bunu bir istemci dosyasına koyun:
local function started(name)
return GetResourceState(name) == 'started'
end
function Notify(message, notifyType)
notifyType = notifyType or 'inform'
if started('ox_lib') then
lib.notify({ description = message, type = notifyType })
elseif started('qb-core') then
local qbType = notifyType == 'inform' and 'primary' or notifyType
exports['qb-core']:GetCoreObject().Functions.Notify(message, qbType)
elseif started('es_extended') then
exports['es_extended']:getSharedObject().ShowNotification(message)
else
print(message)
end
end
-- returns true when finished, false when cancelled
function Progress(label, duration)
if started('ox_lib') then
return lib.progressBar({
duration = duration,
label = label,
canCancel = true,
disable = { move = true, car = true },
})
end
local p = promise.new()
exports['qb-core']:GetCoreObject().Functions.Progressbar('bridge_progress', label, duration, false, true, {
disableMovement = true,
disableCarMovement = true,
}, {}, {}, {}, function() p:resolve(true) end, function() p:resolve(false) end)
return Citizen.Await(p)
endŞimdi betiğiniz yalnızca Notify('Done', 'success') ve Progress('Working', 5000) çağırır. ox_lib kuruluysa, önce kullanılır. Aksi takdirde QBCore kullanılır ve bildirimler ESX'e geri döner.
Geri dönüş ilerleme çubuğu yalnızca QBCore'u kapsar. ne ox_lib'i ne de QBCore'u olmayan bir sunucuda, kendi dalınızı ekleyin veya ox_lib'i dependency 'ox_lib' ile gerekli bir bağımlılık yapın.
İpucu: Sunucu'da yukarıdaki bölümlerden sunucu çağrılarını kullanarak bir
NotifyPlayer(source, message, type)işlevi ile aynı şeyi yapın. Bundan sonra başka hiçbir dosyaya hangi çerçevenin çalıştığını bilmesi gerekmez.
Kontrol Listesi
| Belirti | Çözüm |
|---|---|
attempt to index a nil value (global 'lib') |
shared_script '@ox_lib/init.lua' ekleyin ve ox_lib'i ilk olarak başlatın |
| Sunucu bildirimi hiçbir şey yapmaz | İstemci olayını oyuncunun source'u ile ikinci argüman olarak tetikleyin |
| QBCore bildirimi rengi yok | Geçerli bir tür kullanın: 'primary', 'success' veya 'error' |
| İlerleme çubuğu işlevin geri kalanını bloke eder | lib.progressBar bekler: bunu bir iş parçacığında veya işleyicide çalıştırın |
| Oyuncu çubuk sırasında yürüyebilir | disable (ox_lib) veya disableMovement (QBCore) ayarlayın |
| Betik ESX ve QBCore üzerinde çalışmalıdır | Köprü işlevlerini kullanın ve yalnızca onları çağırın |
Kısa yanıtlar
Sunucudan nasıl bildirim gönderirim?
ESX'de xPlayer.showNotification(msg) kullanın. QBCore'da TriggerClientEvent('QBCore:Notify', source, msg, 'success') kullanın. ox_lib ile TriggerClientEvent('ox_lib:notify', source, { description = msg, type = 'success' }) kullanın.
lib.progressBar betiği bloke mi eder?
Evet. Çubuk bitene kadar bekler ve true döndürür veya oyuncu iptal ettiyse false döndürür. Bunu bir iş parçacığında veya olay işleyicisinde çalıştırın, beklemesi gereken bir yerde değil.
lib.notify çağırdığımda lib neden nil'dir?
Bildiriminiz shared_script '@ox_lib/init.lua''yi eksik bıraktı veya ox_lib kaynağınızdan önce başlatılmadı.
Bu sorunu yaşatmayan scriptler
Quest CreatorGörevler ve NPC diyalogları için oyun içinde düğüm düğüm kurulan görsel editör.Scripti gör →
Advanced BoostingTabletten araç boosting: D’den S+ sınıfına kontratlar, ekipler ve canlı sıra.Scripti gör →
Mic PhoneTablete dönüşen katlanabilir bir telefon; oyuncunun gerçek telefonuna da taşınır.Scripti gör →