Atasi “attempt to index a nil value” di script FiveM (ESX, QBCore, xPlayer)
Error Lua ini berarti sebuah script memakai sesuatu yang tidak ada seolah-olah itu tabel. Bagian dalam kurung, seperti global 'ESX' atau local 'xPlayer', menunjukkan apa yang hilang, dan masing-masing punya perbaikan berbeda.
Baca errornya dulu
Konsol server dan konsol F8 menampilkan error seperti ini:
SCRIPT ERROR: @my_script/server/main.lua:12: attempt to index a nil value (global 'ESX')
Nama resource, file, dan nomor baris muncul lebih dulu, jadi Anda tahu persis ke mana harus melihat. Kata-kata dalam kurung menyatakan apa yang nil:
| Dalam kurung | Artinya biasanya |
|---|---|
| global 'ESX' | Script tidak pernah mendapat objek ESX, atau ESX tidak berjalan saat script dimulai. |
| global 'QBCore' | Sama untuk QBCore. |
| local 'xPlayer' atau 'Player' | Framework tidak punya objek pemain untuk pemain itu. |
| field 'Jobs' atau nama lain | Tabelnya ada tetapi key-nya tidak ada, karena data atau file konfigurasi tidak dimuat. |
Atasi global 'ESX'
- Start ESX lebih dulu. Di server.cfg, taruh
ensure es_extendeddi atas setiap script yang memakainya, dan periksa konsol untuk error dari es_extended sendiri, yang butuh koneksi database agar bisa start. - Impor ESX di script. Tambahkan baris ini ke fxmanifest.lua script:
shared_script '@es_extended/imports.lua'
Atau atur objeknya di Lua, di dekat bagian atas file:
ESX = exports["es_extended"]:getSharedObject()
Script lama memakai TriggerEvent('esx:getSharedObject', ...). Event itu sudah tidak ada di ESX saat ini, jadi ganti dengan export di atas.
Atasi global 'QBCore'
Definisikan objeknya di bagian atas setiap file Lua yang memakainya:
local QBCore = exports['qb-core']:GetCoreObject()
Sebuah local di satu file tidak terlihat di file lain, jadi script yang jalan di client/main.lua tetap bisa gagal di client/events.lua. Start qb-core sebelum script di server.cfg. Qbox menyertakan lapisan kompatibilitas untuk sebagian besar script QBCore, tetapi pastikan script itu mendukungnya.
Atasi local 'xPlayer'
ESX.GetPlayerFromId(source) dan QBCore.Functions.GetPlayer(source) mengembalikan nil saat pemain belum dimuat, sudah keluar, atau ID-nya salah. Selalu periksa hasilnya sebelum memakainya:
local xPlayer = ESX.GetPlayerFromId(source) if not xPlayer then return end
Alasan umum pemain tidak ada:
sourcebernilai 0 saat perintah dijalankan dari konsol server, jadi tidak ada pemain.sourcebisa berubah setelahWait. Salin dulu denganlocal src = sourcedan pakaisrcsesudahnya.- Event berjalan saat pemain masih bergabung. Tunggu event “pemain dimuat” dari framework,
esx:playerLoadeddi ESX danQBCore:Server:PlayerLoadeddi QBCore. - Pemain sedang offline. Cari dia lewat identifier di database.
Atasi field yang hilang
Jika tabel ada tetapi sebuah key bernilai nil, data di baliknya tidak dimuat. Periksa bahwa file konfigurasi terdaftar di fxmanifest.lua sebelum file yang memakainya, namanya dieja sama di mana-mana, dan versi script cocok dengan versi framework Anda. Framework mengganti nama fungsi antar versi, dan script yang ditulis untuk versi lama jadi rusak.
Periksa dasar-dasarnya
- Baca error pertama di konsol. Error berikutnya sering akibat dari yang pertama.
- Periksa pengaturan framework milik script itu sendiri, jika ada, di file konfigurasinya.
- Setelah mengedit script, jalankan
restart resource_namedi konsol dan perhatikan error baru.
Masih belum berhasil?
Tanyakan ke pembuat script dengan teks error lengkap, file dan barisnya, framework Anda beserta versinya, dan urutan start dari server.cfg.
Host server FiveM Anda di Singapura
Ping rendah untuk pemain di India, Malaysia, dan Indonesia, di AMD EPYC dengan NVMe dan perlindungan DDoS Gcore di setiap IP.
