MoonLoader – это загрузчик Lua скриптов и фреймворк для игры GTA: San Andreas. Он предоставляет широкие возможности для создания скриптовых модов на языке программирования Lua, которые, в свою очередь, могут изменять любой аспект игры. Мод был выпущен 8 августа 2016 года и с тех пор неоднократно обновлялся, вся история изменений находится на странице История изменений. Подробности о MoonLoader и материалы для скачивания опубликованы в официальной теме на форуме.
В состав комплекта MoonLoader входитa asi-плагин MoonLoader.asi
, ядро LuaJIT lua51.dll
, папка moonloader
, в которую устанавливаются пользовательские Lua скрипты с расширениями .lua
и .luac
, библиотеки и записывается журнал событий последней сессии moonloader.log
. В директорию moonloader\lib
предустановлены стандартные библиотеки. Кроме этого, в папке moonloader
могут располагаться файлы по другим путям, информация о них находится на странице Директории.
MoonLoader самостоятельно не влияет на игру, всю работу выполняют пользовательские скрипты. Они бывают двух форматов: в виде исходного кода на Lua с расширением файла .lua
и в виде бинарного байткода LuaJIT с расширением .luac
. Все установленные скрипты запускаются автоматически при старте игры и выполняются во время игры, пока не завершат свою работу сами или до завершения работы игры. Скрипты могут быть перезагружены автоматически - при начале новой игры или загрузке сохранения, или программно - посредством скриптового API, например, пользователем вручную, с помощью вспомогательных скриптов.
script_name("Example")
function main()
print("Hello, world!")
end
В MoonLoader в качестве интерпретатора используется не официальная реализация PUC-Rio Lua, а LuaJIT 2.1.0-beta3 - JIT-компилятор Lua, задача которого в достижении высочайшей производительности при минимальном расходе ресурсов. Кроме своей основной функции, LuaJIT включает в себя набор расширений, в числе которых FFI-модуль, бинарные операции над числами и некоторые особенности Lua 5.2 и 5.3.
Все возможности стандартной библиотеки Lua 5.1, LuaJIT с опциональными расширениями и C API включены в MoonLoader и доступны без ограничений.
Для разработки скриптов под MoonLoader необходимы по крайней мере базовое понимание языка программирования Lua и знание некоторых особенностей MoonLoader. На этой вики располагается официальная документация по MoonLoader, но без материалов для начинающих. Руководство по основам есть на форуме, там же можно обратиться за помощью, задав вопрос в отдельном разделе.
Почти вся документация на этой вики представляет из себя описание скриптового API. Большую часть скриптового API составляют функции, эмулирующие опкоды игры, которые в игре предназначены для скриптинга миссий. Поскольку опкодов достаточно много, для искомой функции статья может быть ещё не написана, в таком случае можно поискать статью об опкоде на этой вики или в англоязычной базе опкодов. Для поиска функций MoonLoader по опкоду есть таблица опкодов, в ней перечислены все существующие опкоды и их аналоги.
Страница Скриптовый API содержит перечень всех элементов API, которые реализует MoonLoader. Несколько статей составляют отдельные списки из определённых категорий API, остальные статьи описывают важные особенности и правильные подходы к программированию скриптов.
Редактировать скрипты можно в любом текстовом редакторе, однако без специальных инструментов работа над скриптами не столь удобна. Официальные инструменты для упрощения работы с MoonLoader есть в виде плагина для редактора кода Atom и расширения для текстового редактора Notepad++. Кроме них существуют неофициальные аддоны для Visual Studio Code, который очень удобен для программирования скриптов, если установить плагин sumneko/vscode-lua
.
{
"Lua.runtime.version": "LuaJIT",
"Lua.runtime.path": [
"lib/?.lua",
"lib/?/init.lua",
"libstd/?.lua",
"libstd/?/init.lua"
],
"Lua.workspace.ignoreDir": [
"**",
"!lib/",
"!libstd/"
],
"Lua.diagnostics.disable": [
"lowercase-global",
"undefined-global"
]
}