THE ORB
Studio başlatılıyor

attempt to index a nil value

Bir script bir bilginin hazır olmasını bekledi ve o henüz orada değildi, o yüzden durdu.

groupsO özellik çalışmayı bırakıyorcodeGeliştirici gerektirir

Önce şunu yap

Mesajın adlandırdığı script'i ve dosyayı not et, sonra framework'ünden önce başlayıp başlamadığını kontrol et.

bug_reportBunun yerine tüm konsolunu yapıştır

Ne anlama gelir

Bir şey, nil olan bir değişkende . ya da [] operatörünü kullandı. Lua'da a.b yalnızca a bir tabloyken geçerlidir; a nil olduğunda script o satırda durur. Mesaj genelde neyin nil olduğunu adlandırır: (field 'PlayerData'), (global 'ESX'), (local 'data'), (upvalue 'Config').

Parantez içindeki o ad mesajın en kullanışlı kısmıdır, ve her tür başka bir yeri gösterir:

global 'X' — hiç atanmamış, ya da çalışmamış bir dosyada atanmış.

field 'X' — tablo var ama öyle bir anahtarı yok.

local 'X' / upvalue 'X' — bu dosyada atanmış, ama bu satır çalışmadan önce değil.

Neden olur

Ne sıklıkla doğru cevap olduğuna göre sıralı.

  1. 1

    Framework nesnesi henüz yüklenmemiş (istemcide en yaygını)

    Bir istemci dosyası ESX, QBCore ya da PlayerDatayı dosya kapsamında ya da erken bir thread'de, framework oyuncu nesnesini devretmeden önce okuyor. Kaynağın, framework oyuncuyu yüklemeyi bitirmeden önce başlıyor.

  2. 2

    Var olmayan bir config anahtarı

    Config.Somethingın hiç tanımlanmadığı, yeniden adlandırıldığı ya da fxmanifest'te listelenmemiş bir dosyada olduğu Config.Something.value.

  3. 3

    Sunucu nil gönderdi

    Bir istemci olay işleyicisi, sunucunun geçtiği bir tabloyu indeksliyor, ve bazı yollarda sunucu hiçbir şey geçmemiş. Yüksüz TriggerClientEvent('x', src) işleyiciye nil verir.

  4. 4

    Bir sarmalayıcı hiçbir şey döndürmedi

    Native'ler tablo döndürmez, ama birinin etrafındaki bir yardımcı, geçersiz bir varlık için nil döndürebilir, ve çağıran onu indeksler.

  5. 5

    Yükleme sırası

    Tabloyu tanımlayan dosya, fxmanifest'te onu kullanan dosyadan SONRA listelenmiş, yani kullanıldığı anda henüz yok.

Hangisinin seninki olduğu nasıl anlaşılır

Başarısız olan satırın hemen üstünde, alanı değil kapsayıcıyı yazdır:

print(json.encode(Config.Something))

null yazıyorsa sorun kapsayıcıdır ve alan yanıltıcıdır. Parantez içindeki ad bir framework global'i ise, bir bekleme ekle ve hatanın yer değiştirip değiştirmediğine bak: bir zamanlama sorunu kaybolur, eksik bir anahtar kaybolmaz.

Nereye bakmalı

Yığından dosyayı ve satırı aç. Yalnızca noktadan önceki kısmı değil, ifadenin tamamını oku: a.b.c.d içinde a, a.b ya da a.b.cden herhangi biri nil olabilir, ve parantez içindeki ad sana hangisi olduğunu söyler.

Nasıl düzeltilir

Framework zamanlaması için nesneyi asla dosya kapsamında okuma:

local PlayerData = {}

RegisterNetEvent('esx:playerLoaded', function(xPlayer)
    PlayerData = xPlayer
end)

-- başlangıç sırasında gerçekten gerekiyorsa:
CreateThread(function()
    while not ESX or not ESX.IsPlayerLoaded() do Wait(100) end
    -- buradan sonrası güvenli
end)

Geri kalan her şey için indekslemeden önce koru:

local entry = Config.Jobs[job]
if not entry then return end

Hâlâ kendi kodunda mı takıldın?

Bu sayfa, bu hatanın genelde ne anlama geldiğini anlatır. Konsolunu Server Fixer'a yapıştır; içindeki her şeyi sıraya dizer ve önce ne yapman gerektiğini söyler. Kendin uğraşmak istemiyorsan ORBIE script'i onarır ve kaynağı sunucuna atmaya hazır geri verir.

bug_reportServer Fixer'ı aç

Bu tür bir hata için Script Optimizer script'i okur ve bunun arkasındaki kodu onarır.

Bununla birlikte gelen hatalar