attempt to call a nil value
Bir script var olmayan bir fonksiyonu kullanmaya çalıştı — genelde framework'ünün başka bir sürümü için yazıldığı için.
Önce şunu yap
Script'in senin framework'ün ve onun senin sürümün için yapıldığını kontrol et.
Ne anlama gelir
Script, fonksiyon olmayan bir şeyi çağırmaya çalıştı. Parantez içindeki ad ne olduğunu söyler: (global 'ESX'), (field 'GetPlayerData'), (method 'getJob').
method 'x' dikkatle okunmaya değer: çağrının iki nokta üst üste kullandığı (obj:x()) ve tabloda x olmadığı anlamına gelir. Bu neredeyse her zaman bir framework sürüm farkıdır — metot yeniden adlandırılmış ya da taşınmıştır.
Neden olur
Ne sıklıkla doğru cevap olduğuna göre sıralı.
- 1
Bu tarafta var olmayan bir native
Sunucuda çağrılan istemci native'leri, ya da tersi. Çizim, girdi ve kamera native'lerinin çoğu yalnızca istemcidedir, yani sunucuda o global basitçe nil'dir ve onu çağırmak nil'i çağırmaktır.
- 2
Sürümler arasında yeniden adlandırılmış bir framework metodu
xPlayer.getJob()ilexPlayer.job,QBCore.Functions.GetPlayerDatailePlayerData, ESX Legacy ile ESX 1.1. Bir sürüm için yazılmış script'ler, diğerinde olmayan metotları çağırır. - 3
nil'e çözülen bir export
Kaynağın durdurulduğu, yanlış adlandırıldığı ya da öyle bir ad sunmadığı
exports['res']:method(). FiveM hata atmak yerine nil döndürür, o yüzden arıza burada iner. - 4
Fonksiyon dosyanın daha aşağısında tanımlı
Lua
local function fatamasını, ayrıştırma anında değil, o satır çalıştığında yapar. Tanımının üstündef()çağırmak nil çağırmaktır. - 5
Bir yazım hatası
TriggerServerEvnet, ya da gerçek nativePlayerPedIdikenGetPlayerPedId.
Hangisinin seninki olduğu nasıl anlaşılır
Çağrının üstünde:
print(type(theThing))
Bir native için nil, yanlış taraftasın demektir — her girdi için istemci/sunucu bilgisini listeleyen native referansına bak. table, bir tabloyu çağırıyorsun demektir, ki bu genelde : gereken yerde . kullanıldığı anlamına gelir.
Nereye bakmalı
Adı geçen dosya ve satır. Ad küresel bir native ise, kendi kodunun yanlış olduğunu varsaymadan önce native referansında ara.
Nasıl düzeltilir
-- export'lar: güvenmeden önce kaynağın ayakta olduğunu kontrol et
if GetResourceState('ox_inventory') ~= 'started' then return end
local count = exports.ox_inventory:Search(src, 'count', 'water')
-- framework metotları: o sürümün API'sini oku, tahmin etme
local job = xPlayer.job -- ESX Legacy
-- local job = xPlayer.getJob() -- daha eski ESXHâ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.