أصلح “⁨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⁩ حين لا يكون اللاعب قد حُمّل بعد، أو غادر، أو يكون المعرّف خاطئًا. افحص النتيجة دائمًا قبل استخدامها:

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

أسباب شائعة لغياب اللاعب:

أصلح حقلًا مفقودًا

إذا كان الجدول موجودًا لكن مفتاحًا فيه ⁨nil⁩، فالبيانات خلفه لم تُحمَّل. تأكد أن ملف الإعدادات مدرج في ⁨fxmanifest.lua⁩ قبل الملفات التي تستخدمه، وأن الاسم مكتوب بالطريقة نفسها في كل مكان، وأن إصدار السكربت يطابق إصدار إطارك. تعيد الأطر تسمية الدوال بين الإصدارات، وتتعطل السكربتات المكتوبة لإصدار أقدم.

افحص الأساسيات

ما زلت عالقًا؟

اسأل كاتب السكربت مع نص الخطأ كاملًا والملف والسطر وإطارك وإصداره وترتيب البدء من ⁨server.cfg⁩.

استضف خادم ⁨FiveM⁩ في سنغافورة

⁨ping⁩ منخفض للاعبين في الهند وماليزيا وإندونيسيا، على ⁨AMD EPYC⁩ مع ⁨NVMe⁩ وحماية ⁨Gcore⁩ من ⁨DDoS⁩ على كل ⁨IP⁩.

استضافة ⁨FiveM⁩ في سنغافورة →