Atasi “attempt to index a nil value” dalam skrip FiveM (ESX, QBCore, xPlayer)

Ralat Lua ini bermaksud sesuatu skrip menggunakan perkara yang tidak wujud seolah-olah ia jadual. Bahagian dalam kurungan, seperti global 'ESX' atau local 'xPlayer', menunjukkan apa yang tiada, dan setiap satu mempunyai pembetulan berbeza.

Oleh pasukan Nodewave · Dikemas kini 8 November 2026

Baca ralat itu dahulu

Konsol pelayan dan konsol F8 memaparkan ralat seperti ini:

SCRIPT ERROR: @my_script/server/main.lua:12: attempt to index a nil value (global 'ESX')

Nama resource, fail dan nombor baris muncul dahulu, jadi anda tahu dengan tepat di mana hendak melihat. Perkataan dalam kurungan menyatakan apa yang nil:

Dalam kurunganMaksudnya biasanya
global 'ESX'Skrip tidak pernah mendapat objek ESX, atau ESX tidak berjalan semasa skrip bermula.
global 'QBCore'Sama untuk QBCore.
local 'xPlayer' atau 'Player'Framework tidak mempunyai objek pemain untuk pemain itu.
field 'Jobs' atau nama lainJadual wujud tetapi kuncinya tiada, kerana data atau fail konfigurasi tidak dimuatkan.

Atasi global 'ESX'

  1. Mulakan ESX dahulu. Dalam server.cfg, letakkan ensure es_extended di atas setiap skrip yang menggunakannya, dan semak konsol untuk ralat daripada es_extended sendiri, yang memerlukan sambungan pangkalan datanya untuk bermula.
  2. Import ESX dalam skrip. Tambahkan baris ini pada fxmanifest.lua skrip:
shared_script '@es_extended/imports.lua'

Atau tetapkan objek dalam Lua, berhampiran bahagian atas fail:

ESX = exports["es_extended"]:getSharedObject()

Skrip lama menggunakan TriggerEvent('esx:getSharedObject', ...). Event itu tidak lagi wujud dalam ESX semasa, jadi gantikan dengan export di atas.

Atasi global 'QBCore'

Takrifkan objek di bahagian atas setiap fail Lua yang menggunakannya:

local QBCore = exports['qb-core']:GetCoreObject()

Sebuah local dalam satu fail tidak kelihatan dalam fail lain, jadi skrip yang berfungsi dalam client/main.lua masih boleh gagal dalam client/events.lua. Mulakan qb-core sebelum skrip dalam server.cfg. Qbox menyertakan lapisan keserasian untuk kebanyakan skrip QBCore, tetapi semak sama ada skrip itu menyokongnya.

Atasi local 'xPlayer'

ESX.GetPlayerFromId(source) dan QBCore.Functions.GetPlayer(source) memulangkan nil apabila pemain belum dimuatkan, sudah keluar, atau ID salah. Sentiasa semak hasilnya sebelum menggunakannya:

local xPlayer = ESX.GetPlayerFromId(source)
if not xPlayer then return end

Sebab lazim pemain tiada:

Atasi medan yang tiada

Jika jadual wujud tetapi sesuatu kunci bernilai nil, data di belakangnya tidak dimuatkan. Semak bahawa fail konfigurasi disenaraikan dalam fxmanifest.lua sebelum fail yang menggunakannya, nama dieja sama di mana-mana, dan versi skrip sepadan dengan versi framework anda. Framework menamakan semula fungsi antara versi, dan skrip yang ditulis untuk versi lama menjadi rosak.

Semak asasnya

Masih tersekat?

Tanya pencipta skrip dengan teks ralat penuh, fail dan baris, framework anda beserta versinya, dan turutan permulaan daripada server.cfg.

Hos pelayan FiveM anda di Singapura

Ping rendah untuk pemain di India, Malaysia dan Indonesia, pada AMD EPYC dengan NVMe dan perlindungan DDoS Gcore pada setiap IP.

Pengehosan FiveM di Singapura →