Как прочитать FiveM SCRIPT ERROR: файл, строка и stack trace

Научитесь читать FiveM SCRIPT ERROR: имя ресурса и путь файла, номер строки, stack trace, F8 против консоли сервера и как добавить prints чтобы найти причину.

Типичная ошибка в консоли:

text
SCRIPT ERROR: @my_script/server/main.lua:42: attempt to index a nil value (local 'xPlayer')
> handler (@my_script/server/main.lua:42)
> ref (citizen:/scripting/lua/scheduler.lua:...)

Это похоже на шум, но каждая часть имеет смысл, и она обычно рассказывает вам ровно где смотреть. Это руководство показывает, как его прочитать, где его найти и что делать, когда его недостаточно.

Первая строка: что, где и почему

text
SCRIPT ERROR: @my_script/server/main.lua:42: attempt to index a nil value (local 'xPlayer')
  • SCRIPT ERROR: помечает ошибку Lua в скрипте. Скрипт продолжает работать после этого, но код, который не выполнился, остановился на этой строке.
  • @my_script/server/main.lua — это имя ресурса (my_script) и путь файла внутри папки ресурса.
  • :42 — это номер строки в этом файле.
  • Остальное — это сообщение: attempt to index a nil value (local 'xPlayer'). Lua читает это так: на строке 42 вы попытались использовать что-то внутри xPlayer, но xPlayer равен nil.

Откройте файл, перейдите на эту строку и посмотрите на переменные, которые эта строка использует. В большинстве случаев ответ уже там. Распространенные сообщения имеют свои собственные руководства: attempt to call a nil value и attempt to compare nil.

Stack trace: как код попал туда

Строки, начинающиеся с >, — это stack trace. Она перечисляет функции, которые были выполняются, от неудачной до той, которая её запустила:

text
> handler (@my_script/server/main.lua:42)
> ref (citizen:/scripting/lua/scheduler.lua:...)

Первая строка после ошибки — это то же место, что и ошибка. Строки ниже показывают, кто вызвал эту функцию. Когда ошибка находится внутри библиотеки или другого ресурса, строка из вашего собственного скрипта дальше вниз по списку часто является настоящей причиной, потому что ваш скрипт передал неправильное значение в неё.

Строки, которые начинаются с citizen:/scripting/lua/... (например citizen:/scripting/lua/scheduler.lua) принадлежат FiveM самому. Они являются частью механизма, который запускает ваши события и потоки. Вы можете их игнорировать: ошибка никогда не исправляется там, и они только показывают, что поток или событие работало.

Клиент или сервер: где смотреть

Ошибка скрипта появляется на стороне, где код работает:

  • Скрипты клиента (client_scripts, файлы в папке client): нажмите F8 в игре, чтобы открыть консоль клиента. Если вы ничего не видите, прокрутите вверх, так как ошибки могут быстро исчезнуть.
  • Скрипты сервера (server_scripts, файлы в папке server): прочитайте консоль сервера. В txAdmin это страница Live Console. На сервере, запущенном из терминала, это окно этого терминала.
  • Общие скрипты работают с обеих сторон, поэтому ошибка может появиться в любом месте.

Совет: если меню или действие ничего не делает и F8 пусто, проверьте консоль сервера. Неудачный код может быть на стороне сервера.

Какую строку посмотреть

  1. Прочитайте сообщение в первую очередь: оно говорит, какой вид проблемы это (nil, неправильный тип, отсутствующий экспорт).
  2. Откройте файл и строку из первой строки. Проверьте каждую переменную на ней.
  3. Если файл принадлежит библиотеке (ox_lib, фреймворку), перейдите вниз по stack trace до тех пор, пока не достигнете строки скрипта, который вы исправляете.
  4. Проверьте, если ошибка появляется один раз или постоянно. Постоянная ошибка в цикле затопляет консоль. Исправьте это сначала, так как она скрывает другие сообщения.

Ошибки с текстом No such export или could not find dependency отличаются. Они о ресурсах, а не о строках кода. Смотрите could not find dependency.

Когда строки недостаточно: добавьте prints

Если строка использует несколько переменных и вы не знаете, какая из них nil, выведите их непосредственно перед ней:

lua
print('xPlayer:', xPlayer)
print('source:', source, type(source))
print('data:', json.encode(data))

Запустите код снова и прочитайте консоль. Несколько советов для полезных prints:

  • Выведите тип а также значение: type(value) показывает nil, number, string, table или function.
  • Используйте json.encode(table) чтобы увидеть внутри таблицы. Простой print(table) только показывает адрес памяти.
  • Поместите короткую метку впереди, чтобы вы могли найти строку в занятой консоли.
  • Выведите в начале функции, чтобы подтвердить, что она вообще выполняется.

Удалите prints после того, как проблема решена, так как они стоят производительность в занятых циклах.

Где ошибка не появляется

  • Escrow скрипты скрывают их код. Ошибка дает вам имя файла, но файл зашифрован и вы не можете прочитать строку. Свяжитесь с автором с полным текстом ошибки.
  • NUI ошибки (само меню, написанное на HTML и JavaScript) не показывают в F8 как SCRIPT ERROR. Откройте инструменты разработки NUI чтобы их прочитать: команда nui_devtools в консоли F8 открывает их в вкладке браузера.
  • Ошибки в первые секунды: когда вы запускаете сервер, ошибки из ресурсов, которые не загружаются, могут пройти быстро. Поищите консоль или прокрутите вверх, или перезагрузите только один ресурс и смотрите.

Что отправить когда вы просите помощь

Скопируйте полную ошибку, stack trace включена, как текст, и скажите, исходит ли она из F8 или из консоли сервера. Добавьте строку кода, на которую она указывает, и фреймворк, который вы используете. Снимок экрана одной обрезанной строки недостаточно для кого-либо, чтобы помочь вам.

Контрольный список

Симптом Исправление
@resource/path.lua:42 Откройте этот файл в этом ресурсе и перейдите на строку 42
Ошибка в файле библиотеки Следуйте stack trace к первой строке вашего собственного скрипта
citizen:/scripting/lua/... строки FiveM внутренние: игнорируйте их
Ничего в F8, но функция не работает Прочитайте консоль сервера
Несколько переменных на неудачной строке Выведите каждую с type() и json.encode()
Файл ошибки нечитаемый Escrowed скрипт: отправьте полный текст ошибки автору
NUI меню не работает Откройте nui_devtools и прочитайте консоль браузера

Короткие ответы

Где я вижу ошибку скрипта клиента?

Нажмите F8 в игре, чтобы открыть консоль клиента. Ошибки из скриптов клиента показывают там в красном, с именем ресурса и строкой.

Где я вижу ошибку серверного скрипта?

В консоли сервера, которая является Live Console в txAdmin или окном терминала, где работает сервер. Ошибки сервера не показываются в F8.

Ошибка указывает на файл в другом ресурсе. Этот скрипт сломан?

Не всегда. Посмотрите дальше вниз по stack trace: строка, которая вызывает в этот ресурс, с неправильными или отсутствующими аргументами, часто является настоящей причиной.

Скрипты без этой проблемы

Mic PhoneСкладной телефон, который раскладывается в планшет и работает и на настоящем телефоне игрока.Смотреть скрипт →CCTV Security CamerasУстанавливаемые камеры, планшет с мультиэкраном в реальном времени и распечатанные фото-улики.Смотреть скрипт →Advanced BoostingУгон машин на заказ через планшет: контракты от класса D до S+, команды и живая очередь.Смотреть скрипт →

Читайте также

FiveMОшибкиСерверНе смогли запустить ресурс: почему FiveM не запустит ваш скриптCouldn't start resource X или Failed to start resource в вашей консоли FiveM? Обычные причины (манифест, имя папки, ошибка Lua, зависимость, escrow) и как найти свою.1 октября 2026 г. · 3 мин чтенияЧитать →FiveMLuaОшибкиFiveM json.decode ошибка: nil, пустая строка и исправления невалидного JSONjson.decode падает или возвращает nil в вашем FiveM скрипте? Почему декодирование nil, пустых или отредактированных вручную JSON данных ломается, что делает json.encode с смешанными ключами, и как безопасно использовать pcall.1 октября 2026 г. · 3 мин чтенияЧитать →FiveMОшибкиLuaNo such export X in resource Y: как это исправить в FiveMПолучаете ошибку 'No such export X in resource Y' в FiveM? Причины: ресурс не запущен, неправильное имя папки, несоответствие на стороне клиента или сервера, переименованный экспорт и порядок запуска.1 октября 2026 г. · 4 мин чтенияЧитать →