แก้ “attempt to index a nil value” ในสคริปต์ FiveM (ESX, QBCore, xPlayer)

ข้อผิดพลาด Lua นี้หมายความว่าสคริปต์ใช้สิ่งที่ไม่มีอยู่ราวกับว่ามันเป็นตาราง ส่วนในวงเล็บ เช่น global 'ESX' หรือ local 'xPlayer' บอกว่าอะไรหายไป และแต่ละแบบมีวิธีแก้ต่างกัน

โดยทีม Nodewave · อัปเดต 8 พฤศจิกายน 2026

อ่านข้อผิดพลาดก่อน

คอนโซลเซิร์ฟเวอร์และคอนโซล F8 แสดงข้อผิดพลาดแบบนี้:

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

ชื่อรีซอร์ส ไฟล์ และหมายเลขบรรทัดมาก่อน คุณจึงรู้ว่าต้องดูตรงไหน คำในวงเล็บบอกว่าอะไรเป็น nil:

ในวงเล็บมักหมายถึง
global 'ESX'สคริปต์ไม่เคยได้ออบเจกต์ ESX หรือ ESX ไม่ได้ทำงานตอนสคริปต์เริ่ม
global 'QBCore'เหมือนกันสำหรับ QBCore
local 'xPlayer' หรือ 'Player'เฟรมเวิร์กไม่มีออบเจกต์ผู้เล่นของผู้เล่นคนนั้น
field 'Jobs' หรือชื่ออื่นตารางมีอยู่แต่คีย์หายไป เพราะข้อมูลหรือไฟล์คอนฟิกไม่ถูกโหลด

แก้ global 'ESX'

  1. สตาร์ต ESX ก่อน ใน server.cfg ให้วาง ensure es_extended ไว้เหนือสคริปต์ทุกตัวที่ใช้มัน และตรวจคอนโซลหาข้อผิดพลาดจาก es_extended เอง ซึ่งต้องมีการเชื่อมต่อฐานข้อมูลจึงจะสตาร์ตได้
  2. นำเข้า ESX ในสคริปต์ เพิ่มบรรทัดนี้ใน fxmanifest.lua ของสคริปต์:
shared_script '@es_extended/imports.lua'

หรือตั้งค่าออบเจกต์ใน Lua ใกล้ส่วนบนของไฟล์:

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

สคริปต์เก่าใช้ TriggerEvent('esx:getSharedObject', ...) อีเวนต์นั้นไม่มีอีกแล้วใน ESX ปัจจุบัน ให้แทนที่ด้วย export ด้านบน

แก้ global 'QBCore'

ประกาศออบเจกต์ที่ส่วนบนของไฟล์ Lua ทุกไฟล์ที่ใช้มัน:

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

local ในไฟล์หนึ่งมองไม่เห็นในอีกไฟล์ สคริปต์ที่ทำงานใน client/main.lua จึงยังล้มเหลวใน client/events.lua ได้ สตาร์ต qb-core ก่อนสคริปต์ใน server.cfg Qbox มีเลเยอร์ความเข้ากันได้สำหรับสคริปต์ QBCore ส่วนใหญ่ แต่ให้ตรวจว่าสคริปต์รองรับ

แก้ local 'xPlayer'

ESX.GetPlayerFromId(source) และ QBCore.Functions.GetPlayer(source) คืนค่า nil เมื่อผู้เล่นยังไม่ถูกโหลด ออกไปแล้ว หรือ ID ผิด ตรวจผลลัพธ์เสมอก่อนใช้:

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

เหตุผลที่พบบ่อยที่ผู้เล่นหายไป:

แก้ฟิลด์ที่หายไป

ถ้าตารางมีอยู่แต่คีย์เป็น nil แปลว่าข้อมูลเบื้องหลังไม่ถูกโหลด ตรวจว่าไฟล์คอนฟิกอยู่ใน fxmanifest.lua ก่อนไฟล์ที่ใช้มัน ชื่อสะกดตรงกันทุกที่ และเวอร์ชันสคริปต์ตรงกับเวอร์ชันเฟรมเวิร์กของคุณ เฟรมเวิร์กเปลี่ยนชื่อฟังก์ชันระหว่างเวอร์ชัน และสคริปต์ที่เขียนไว้สำหรับเวอร์ชันเก่าจะพัง

ตรวจพื้นฐาน

ยังแก้ไม่ได้?

ถามผู้เขียนสคริปต์พร้อมข้อความข้อผิดพลาดเต็ม ไฟล์และบรรทัด เฟรมเวิร์กและเวอร์ชันของคุณ และลำดับการสตาร์ตจาก server.cfg

โฮสต์เซิร์ฟเวอร์ FiveM ของคุณในสิงคโปร์

ปิงต่ำสำหรับผู้เล่นในอินเดีย มาเลเซีย และอินโดนีเซีย บน AMD EPYC พร้อม NVMe และการป้องกัน DDoS จาก Gcore บนทุก IP

โฮสติ้ง FiveM ในสิงคโปร์ →