Как установить MoonLoader и SAMPFUNCS

Пошаговая установка загрузчика Lua-скриптов и SAMPFUNCS: порядок компонентов, структура папок и разбор типичных ошибок.

Автор: Опубликовано: Обновлено: 3 мин чтения

MoonLoader загружает Lua-скрипты в GTA: San Andreas, SAMPFUNCS добавляет функции для работы с клиентом SA:MP. Вместе они нужны почти любому скрипту для RP-серверов, в том числе моим Police Tools и Police Tools Lite. Ниже порядок установки и то, что проверить, если что-то не запустилось.

Что понадобится

Компонент Зачем
GTA: San Andreas 1.0 US исполняемый файл, под который написаны плагины
ASI Loader загружает .asi-плагины при старте игры
MoonLoader сам загрузчик Lua-скриптов
SA:MP 0.3.7-R1 клиент, с которым совместим SAMPFUNCS
CLEO библиотека, без которой SAMPFUNCS не запускается
SAMPFUNCS функции SA:MP для Lua: чат, команды, игроки, диалоги

Версия игры важнее всего остального. Плагины работают с памятью конкретного gta_sa.exe, и на версиях из Steam или других изданиях адреса не совпадут. Steam-версию сначала понижают до 1.0 US.

Мой радар Speeder, например, писался под MoonLoader 0.26. Скачивать всё стоит с BLAST.HK: там выкладывают сами авторы MoonLoader и SAMPFUNCS. Сборки с файлообменников и «паки» с YouTube нередко содержат лишние .asi-файлы, и разбираться потом, какой из них мешает, дольше, чем поставить всё с нуля.

Порядок установки

  1. Сделайте копию папки игры. Если что-то пойдёт не так, проще вернуть копию, чем искать лишний файл.
  2. Установите SA:MP 0.3.7-R1 в папку игры.
  3. Положите ASI Loader в корень, рядом с gta_sa.exe. Во многих сборках он уже есть, второй ставить не нужно.
  4. Распакуйте архив MoonLoader в корень игры. Появятся .asi-файл загрузчика и папка moonloader.
  5. Установите CLEO, затем SAMPFUNCS. SAMPFUNCS тоже распаковывается в корень игры.
  6. Запустите игру через SA:MP и зайдите на любой сервер.

Порядок CLEO → SAMPFUNCS важен: при запуске SAMPFUNCS ищет CLEO и без него не загрузится.

Структура папки moonloader

После установки и первого запуска в корне игры будет примерно такое дерево:

GTA San Andreas/
  gta_sa.exe
  moonloader/
    lib/
    config/
    moonloader.log
    my_script.lua

В moonloader/ лежат сами скрипты: каждый файл .lua или .luac загружается при старте игры. В moonloader/lib/ хранятся библиотеки, которые скрипты подключают через require: например, inicfg, encoding, vkeys, imgui. В moonloader/config/ скрипты сохраняют свои настройки. Police Tools Lite, например, держит там бинды в PToolsLite.list и настройки в PToolsLite.cfg. Как работать с этой папкой из своего кода, разобрано в статье про inicfg и CP1251.

Удалить скрипт можно, просто убрав его файл из moonloader/. Конфиг в config/ при этом останется, и при повторной установке скрипт подхватит старые настройки.

Как проверить, что всё работает

Главный инструмент проверки – файл moonloader.log в папке moonloader. MoonLoader пишет в него при каждом запуске: какая версия загрузилась, какие скрипты найдены, какие из них упали и с какой ошибкой. Если лога нет совсем, MoonLoader не загрузился, и дело в ASI Loader или версии игры.

Самый быстрый тест – создать в moonloader/ файл test.lua:

script_name("test")
function main()
  while not isSampAvailable() do wait(100) end
  sampAddChatMessage("MoonLoader и SAMPFUNCS работают", 0x33AA33)
end

Если после входа на сервер в чате появилась зелёная строка, работают обе части: MoonLoader исполнил скрипт, а SAMPFUNCS дал функцию sampAddChatMessage. Если строки нет, а в логе ошибка вида attempt to call global ... (a nil value) про функцию с префиксом samp, MoonLoader работает, а SAMPFUNCS нет. Русский текст вместо букв выводит «кракозябры», если файл сохранён в UTF-8; SA:MP ждёт CP1251.

Частые проблемы

Игра вылетает при запуске. Почти всегда это версия gta_sa.exe или конфликт двух ASI Loader. Проверьте, что исполняемый файл именно 1.0 US, и что в корне нет двух загрузчиков с разными именами.

Лог пустой или не создаётся. Антивирус мог удалить или заблокировать .asi-файл: такие плагины встраиваются в чужой процесс, и эвристика на них реагирует. Добавьте папку игры в исключения, если доверяете источнику, и переустановите MoonLoader.

SAMPFUNCS не загружается. Проверьте версию клиента SA:MP: нужна 0.3.7-R1. Вторая причина – не установлен CLEO.

Скрипт есть в папке, но не работает. Откройте moonloader.log и найдите имя скрипта. Обычно там указана строка с ошибкой или имя библиотеки, которой не хватает в moonloader/lib/.

Перед установкой любого скрипта прочитайте правила своего сервера. Многие RP-проекты разрешают биндеры и помощники, но запрещают всё, что даёт игровое преимущество.

Частые вопросы

Нужен ли SAMPFUNCS, если скрипт не работает с SA:MP?

Нет. MoonLoader запускается и в одиночной игре без SAMPFUNCS. Плагин нужен скриптам, которые вызывают функции sampSendChat, sampRegisterChatCommand и другие функции с префиксом samp.

Куда класть скачанный скрипт?

Файл .lua или .luac кладётся прямо в папку moonloader в корне игры. Библиотеки, которые требует скрипт, идут в moonloader/lib, если автор не указал другое место.

Почему скрипт работал, а после обновления SA:MP перестал?

SAMPFUNCS привязан к конкретной версии клиента SA:MP. Если клиент обновили до другой ревизии, плагин и зависящие от него скрипты не загрузятся, пока не вернуть подходящую версию клиента.