attempt to index a nil value (global 'QBCore'): GetCoreObject düzeltmesi
QBCore betiğinizde nil var mı? Eski QBCore:GetObject olayı gitti. GetCoreObject ile QBCore ve QBox üzerinde çekirdek nesnenin nasıl elde edileceği ve neden hala nil olabileceği.
Konsolunuzun bir yerinde:
SCRIPT ERROR: @my_script/client/main.lua:8: attempt to index a nil value (global 'QBCore')QBCore çalışıyor, komut dosyası düzgün görünüyor ve QBCore hala nil. QBCore ve QBox
Neden QBCore nil
Daha eski QBCore komut dosyaları, bir etkinlik içeren temel nesneyi aldı:
QBCore = nil
TriggerEvent('QBCore:GetObject', function(obj) QBCore = obj end)Bu etkinlik qb-core'den kaldırıldı. Artık kimse yanıt vermiyor, bu nedenle QBCore nil olarak kalıyor ve ilk QBCore.Functions… satırı çöküyor.
Düzeltme: GetCoreObject
Dosyanın üst kısmında qb-core'den dışa aktarmayla birlikte nesnesini isteyin:
local QBCore = exports['qb-core']:GetCoreObject()İstemcide ve sunucuda aynı satırdır. Bunu QBCore kullanan her dosyaya veya bildirimin ilk olarak yüklendiği paylaşılan dosyaya bir kez koyun:
-- fxmanifest.lua
shared_script 'shared/core.lua'
client_scripts { 'client/*.lua' }
server_scripts { 'server/*.lua' }-- shared/core.lua
QBCore = exports['qb-core']:GetCoreObject()İpucu: eğer
QBCorebir dosyadalocalise, diğer dosyalar onu göremez. Komut dosyasının yalnızca bir dosyasındaki nil hatası genellikle tam olarak bu anlama gelir.
Hâlâ nil mi? qb-core henüz çalışmıyor
Dışa aktarma yalnızca qb-core önce başlatıldığında yanıt verir. server.cfg'de:
ensure oxmysql
ensure ox_lib
ensure qb-core
ensure [qb]
ensure my_scriptSonra:
- Sunucu konsolunun üst kısmındaki qb-core'nin kendi başlangıcını kontrol edin. Buradaki bir veritabanı hatası, dışa aktarmaların hiçbir zaman mevcut olmadığı anlamına gelir ve
No such export GetCoreObject in resource qb-corealırsınız. - Bağımlılığı komut dosyasının
fxmanifest.lua'sine ekleyin, böylece FiveM önce qb-core'i başlatır veya komut dosyasını onsuz başlatmayı reddeder:
dependency 'qb-core'QBox
QBox'nin çekirdeği qbx_core'tir ve qb-core komut dosyaları için bir uyumluluk katmanı tutar: exports['qb-core']:GetCoreObject() hâlâ bir nesne döndürür, dolayısıyla çoğu QBCore komut dosyası olduğu gibi çalışır.
server.cfg:
ensure oxmysql
ensure ox_lib
ensure qbx_coreQBox üzerinde ayrı bir qb-core klasörü yok. Hala bir tane varsa kaldırın, aksi takdirde iki çekirdek kavga eder.
Yeni kod için QBox, örneğin sunucudaki büyük QBCore tablosu yerine kendi dışa aktarımlarını tercih eder:
local player = exports.qbx_core:GetPlayer(source)
if player then
print(player.PlayerData.citizenid)
endİstemcideki oyuncu verileri
Oynatıcıyı çok erken okumak diğer bir klasiktir nil:
-- this runs before the player is loaded: job is nil
local job = QBCore.Functions.GetPlayerData().jobBunun yerine oynatıcıyı bekleyin:
local QBCore = exports['qb-core']:GetCoreObject()
local PlayerData = {}
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
PlayerData = QBCore.Functions.GetPlayerData()
end)
RegisterNetEvent('QBCore:Client:OnJobUpdate', function(job)
PlayerData.job = job
end)Komut dosyası siz oyundayken de yeniden başlatılabiliyorsa, OnPlayerLoaded o zamana kadar zaten etkinleştiğinden, verileri başlatıldığında da bir kez okuyun.
Kontrol listesi
| Belirti | Düzelt |
|---|---|
attempt to index a nil value (global 'QBCore') |
local QBCore = exports['qb-core']:GetCoreObject() dosyanın üst kısmında |
| Nil yalnızca tek bir dosyada | QBCore başka bir dosyada yereldir; orada veya paylaşılan bir dosyada da tanımlayın |
No such export GetCoreObject |
qb-core (veya qbx_core) başlatılmadı veya başlatılamadı |
| QBox sunucu | Dışa aktarmayı koruyun, qbx_core'yi başlatın, eski qb-core klasörlerini kaldırın |
job başlangıçta nil |
Bekle QBCore:Client:OnPlayerLoaded |
Bunun yerine ESX çalıştırılıyor mu? ESX ile nil arasındaki sorunun aynısı: esx:getSharedObject'nin düzeltilmesi.
Kısa yanıtlar
Komut dosyamda neden QBCore nil var?
Betik hiçbir zaman çekirdek nesneyi alamadı: Kaldırılan QBCore:GetObject olayını kullanıyor, başka bir dosyada QBCore'i tanımlıyor veya qb-core'den önce başlıyor. Her dosyanın üst kısmında local QBCore = exports['qb-core']:GetCoreObject() öğesini kullanın.
GetCoreObject, QBox üzerinde çalışıyor mu?
Evet. qbx_core, qb-core için bir uyumluluk katmanı tutar, dolayısıyla exports['qb-core']:GetCoreObject() hala yanıt verir. Yeni kod için QBox, exports.qbx_core:GetPlayer(source) gibi kendi dışa aktarımlarını tercih eder.
Her dosyada GetCoreObject'yi çağırmam gerekiyor mu?
Komut dosyası onu diğerlerinden önce yüklenen paylaşılan bir dosyada bir kez tanımlamadığı sürece, QBCore kullanan her dosya buna ihtiyaç duyar.
Bu sorunu yaşatmayan scriptler
Advanced BoostingTabletten araç boosting: D’den S+ sınıfına kontratlar, ekipler ve canlı sıra.Scripti gör →
Clothing DesignerFiveM içinde kıyafet tasarlayın — fırça, katmanlar, görsel içe aktarma ve yapay zekâ — sonra giyin.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 →