Как установить MoonLoader и SAMPFUNCS
Пошаговая установка загрузчика Lua-скриптов и SAMPFUNCS: порядок компонентов, структура папок и разбор типичных ошибок.
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-файлы, и разбираться потом, какой из них мешает, дольше, чем поставить всё с нуля.
Порядок установки
- Сделайте копию папки игры. Если что-то пойдёт не так, проще вернуть копию, чем искать лишний файл.
- Установите SA:MP 0.3.7-R1 в папку игры.
- Положите ASI Loader в корень, рядом с gta_sa.exe. Во многих сборках он уже есть, второй ставить не нужно.
- Распакуйте архив MoonLoader в корень игры. Появятся .asi-файл загрузчика и папка
moonloader. - Установите CLEO, затем SAMPFUNCS. SAMPFUNCS тоже распаковывается в корень игры.
- Запустите игру через 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. Если клиент обновили до другой ревизии, плагин и зависящие от него скрипты не загрузятся, пока не вернуть подходящую версию клиента.