No such export getSharedObject in resource es_extended: исправление

Получаете 'No such export getSharedObject in resource es_extended'? Это означает, что es_extended не запускается, когда ваш скрипт этого требует. Причины: от порядка запуска до сбоя подключения к базе данных.

Полная ошибка обычно выглядит так: в консоли сервера или по F8:

text
SCRIPT ERROR: @my_script/server/main.lua:1: No such export getSharedObject in resource es_extended

Код правильный. exports['es_extended']:getSharedObject() — это именно то, как ESX Legacy передает свой объект. Проблема в том, когда он запускается: в этот момент es_extended нет ответа.

1. es_extended начинается после вашего скрипта

Это причина в девяти случаях из десяти. FiveM запускает ресурсы в порядке вашего server.cfg, а сценарий, который запрашивает ESX в первой строке, должен уже запустить es_extended.

Безопасный заказ для сервера ESX:

cfg
# database and libraries first
ensure oxmysql
ensure ox_lib

# the framework
ensure es_extended
ensure [esx]

# everything else after
ensure [scripts]
ensure my_script

Остерегайтесь папок категорий, таких как [scripts]: ensure [scripts] запускает все внутри, поэтому, если эта строка предшествует ensure es_extended, каждый сценарий в ней запускается слишком рано.

Вы также можете заставить сам скрипт ждать ESX, объявив зависимость в его fxmanifest.lua:

lua
dependency 'es_extended'

FiveM сначала запустит es_extended или откажется запускать скрипт, если он отсутствует.

2. es_extended не удалось запустить

Если es_extended происходит сбой при запуске, его экспорт никогда не будет выполнен. Прокрутите консоль сервера вверх и найдите красные линии от es_extended до ошибки сценария. Обычные виновники:

  • База данных. oxmysql не может подключиться (неправильный пароль, база данных не существует, MySQL не работает). Проверьте mysql_connection_string в своем server.cfg:
cfg
set mysql_connection_string "mysql://user:password@localhost/es_extended?charset=utf8mb4"
  • Отсутствует зависимость. Для последних сборок ESX Legacy необходимо, чтобы oxmysql и ox_lib запускались раньше них.
  • Отсутствуют таблицы. При новой установке без ESX SQL происходит сбой при первом запросе.

Исправьте первую ошибку, и ошибка экспорта исчезнет вместе с ней.

3. Папка не называется es_extended

Экспорт находится в ресурсе с именем точно es_extended. Вот что сломает:

  • папка переименована (es_extended-legacy, es_extended_main…);
  • в разных папках две копии es_extended, и запускается не та;
  • на хосте Linux имя имеет разные заглавные буквы (ES_Extended): Linux чувствителен к регистру, Windows — нет.

Найдите в папке resources файлы fxmanifest.lua внутри папок с именем es_extended и сохраните ровно один.

4. Вы перезапустили es_extended во время работы сервера

restart es_extended из консоли выглядит безобидным, но каждый скрипт, который уже принял объект ESX, сохраняет старый, и все, что вызывает экспорт во время перезапуска, получает эту ошибку. После нажатия es_extended перезапустите весь сервер или хотя бы перезапустите сценарии ESX после этого.

5. Сервер вообще не ESX

Если на вашем сервере работает QBCore или QBox, es_extended не существует, и сценарий только для ESX завершается с ошибкой точно так же. Найдите в конфигурации скрипта параметр фреймворка или используйте версию, созданную для вашей фреймворка. QBCore эквивалент этой ошибки описан в попытке индексировать значение nil (глобальное 'QBCore').

Проверяем за десять секунд

В консоли сервера:

text
ensure es_extended

Если es_extended запускается без ошибок и ошибка не устранена, это порядок запуска. Если он печатает ошибки, сначала исправьте их. Тогда:

text
restart my_script

Если скрипт теперь запускается без ошибки, переместите его ensure ниже es_extended в server.cfg, чтобы он также работал после перезагрузки.

Сводка

Причина Как вы это заметили Исправить
Начать заказ Работает после restart my_script ensure es_extended над сценарием или dependency 'es_extended'
es_extended произошел сбой Красные es_extended строки над ошибкой Исправьте базу данных или отсутствующую зависимость
Неверное имя папки ensure es_extended говорит, что не может его найти Ровно одна папка с названием es_extended
Перезапуск в реальном времени Ошибки сразу после restart es_extended Перезагрузите сервер
Не ESX сервер Нет es_extended вообще Используйте версию скрипта QBCore / QBox

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

Что означает «No such export getSharedObject in resource es_extended»?

Ваш скрипт вызвал exports['es_extended']:getSharedObject(), когда es_extended не был запущен: он еще не запускался, его не удалось запустить или у него другое имя папки.

Как заставить es_extended запускаться перед моим сценарием?

Поместите ensure es_extended над сценарием в server.cfg, после oxmysql и ox_lib. Добавление dependency 'es_extended' в fxmanifest скрипта также заставляет FiveM запускать es_extended первым.

Можно ли перезапустить es_extended во время работы сервера?

Это не очень хорошая идея: каждый ресурс, содержащий объект ESX, сохраняет старый. Перезапустите весь сервер или перезапустите сценарии, которые используют ESX после es_extended.

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

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

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