Избранное Lua ASI MoonLoader

Статус
В этой теме нельзя размещать новые ответы.

FYP

Известный
Автор темы
Администратор
1,757
5,684
moonloader.png

v.026.5-beta
MoonLoader - это мод для игры GTA San Andreas, стремящийся стать полной современной заменой CLEO. Он вносит возможность загрузки Lua-скриптов в игру, имеет всю функциональность опкодов игры, библиотеки CLEO, плагина SAMPFUNCS и добавляет свой набор новых функций для разработки.

MoonLoader будет полезен как разработчикам, так и пользователям, не занимающимся разработкой. Поскольку Lua скрипты не требуют обязательной компиляции, каждый может изменить исходный код скрипта любым текстовым редактором. Например, можно поменять кнопку или команду для активации скрипта, совсем не умея программировать и не обращаясь за помощью. Кроме этого, MoonLoader можно загружать в уже запущенную игру с помощью любого инжектора, эта возможность может быть полезна тем, кто не хочет держать скрипты и сам плагин в директории игры. Нельзя не упомянуть, что стабильность Lua-скриптов на порядок выше, благодаря встроенным средствам скриптового движка и плагина, а также повышенному качеству разработки, что тоже играет важную роль для любого пользователя.
MoonLoader не зависит от наличия установленного CLEO, не зависит от мультиплеерной модификации SA:MP и плагина SAMPFUNCS (зависят только скрипты, использующие те или иные возможности), а также он совместим с любой версией CLEO, SA:MP и SAMPFUNCS.

Язык программирования Lua является одним из самых популярных скриптовых языков в сфере разработки игр, и в связи с этим для него существует огромное количество готовых решений тех или иных задач, множество готовых модулей на самом Lua, с использованием FFI и в виде динамических библиотек помогут сэкономить время на поиске решения.
Lua значительно упростит разработку и повысит её качество и эффективность, а сами скрипты будут работать стабильнее и быстрее. Благодаря тому, что MoonLoader использует не обычный Lua, а LuaJIT, который широко известен своей колоссальной производительностью и невероятно мощной библиотекой FFI, можно добиться наилучших результатов в реализации задачи наиболее эффективным путём.

О том с чего начать и как правильно писать Lua скрипты можно прочитать в теме Все о Lua скриптинге для MoonLoader

Подробная информация о разработке находится в отдельной теме: Информация - MoonLoader - разработка (https://www.blast.hk/threads/13315/).

Разработчики:
FYP, hnnssy, EvgeN 1137

Отдельная благодарность:
DK22Pac, MISTER_GONWIK, 4el0ve4ik, EXPORT, Garrus, CLEO 4

Скачать
Установка: запустить setup-moonloader.exe и следовать шагам программы установки. Для работы MoonLoader требуется GTA: SA версии US1.0.
Скачать моды
Скачать читы

Скачать архивом для установки вручную

Тема для вопросов и обсуждений
Гайд по разработке скриптов
Старый гайд по разработке скриптов
История изменений на Wiki
Официальная тема на GTAForums (Official thread in English on GTAForums)

На тему можно
подписаться, чтобы не пропустить важные обновления.
 
Последнее редактирование:

FYP

Известный
Автор темы
Администратор
1,757
5,684
небольшое обновление.
хочу сразу объяснить почему так долго не было никаких новостей, и спустя столько времени выходит какое-то почти бесполезное обновление. основная причина - это серьёзный баг, который был обнаружен около двух недель назад и никак не удавалось его исправить. этот баг нарушил все мои планы касательно moonloader-a и поэтому обновление вышло таким скудным. к тому же другие посторонние дела, лень и всё такое.
в общем, бага больше нет, время есть и теперь обновления будут чаще и объёмнее.

список изменений версии .016-alpha:
Удалена функция 'chdir'
Добавлена возможность сравнения объектов информации о скрипте (напр. thisScript() == script.find("name"))
Функция print теперь может выводить значения любого типа
Исправлен баг, вызывающий некорректное поведение обработчиков команд чата и консоли
Исправлен вызов события 'onExitScript'
Исправлена функция 'raknetBitStreamDecodeString'
Некоторые функции CLEO были заменены встроенными, внешних различий не имеют, так что полностью совместимы:
writeMemory
readMemory
loadDynamicLibrary
freeDynamicLibrary
getDynamicLibraryProcedure
doesFileExist
doesDirectoryExist
createDirectory
popFloat

в ближайших обновлениях запланировано избавиться от всех опкодов CLEO и части опкодов SAMPFUNCS, сделать хотя бы базовый набор функций для работы с памятью процесса, добавить простую и удобную систему для работы с конфигами, а так же ввести, наконец, поддержку других версий игры - EU1.0 и 1.1.

p.s. обновил список ссылок на lua-скрипты от пользователей.
 

FYP

Известный
Автор темы
Администратор
1,757
5,684
обновление с исправлениями
  • Исправлены неверные аргументы функций:
    • renderDrawTexture
    • setCharInterior
    • taskPlayAnim
    • taskPlayAnimWithFlags
    • isCharInAreaOnFoot2d
    • isCharStoppedInAreaOnFoot2d
  • Исправлен баг функции dxutCreateDialog - было невозможно создать диалог
новых фич нет, т.к. всё это время работа велась над вики. заценивайте - https://www.blast.hk/wiki/moonloader:start. некоторые из статей там ещё не готовы и могут содержать неточности и ошибки. сейчас все статьи мунлоадера открыты для изменения и любая помощь по вики приветствуется.
 

FYP

Известный
Автор темы
Администратор
1,757
5,684
обновление.
  • Добавлена встроенная библиотека для работы с конфигурационными файлами ini - inicfg
  • Добавлена встроенная библиотека для работы с памятью игры - memory
  • Новое условие, при котором скрипт не будет прерывать работу самостоятельно - если отсутствует сопрограмма main, но есть обработчики событий, то скрипт будет продолжать работу, если его не завершить принудительно.
  • Исправлен баг, вызывающий неправильную работу некоторых опкодов
 

FYP

Известный
Автор темы
Администратор
1,757
5,684
новая версия.
в основном обновление коснулось замены CLEO и SAMPFUNCS-зависимых функций на встроенные.
из функций клео заменено почти всё, остались только функции для работы с SCM-потоками, самими клео-скриптами и управления аудиопотоками. из опкодов SAMPFUNCS было заменено всё, что не касается сампа и рендера.
помимо этого было добавлено несколько новых функций и событие для обработки оконных сообщений, а так же поддержка Windows XP.
вики для новой функциональности ещё не написано, потому что... ну сами понимаете, надеюсь.
некоторые функции были изменены, так что скрипты, в которых использовались эти функции, нужно будет обновить, чтобы они работали нормально на новой версии.
  • Поддержка Windows XP
  • Добавлена функция fill в модуль memory
  • Добавлено событие оконных сообщений onWindowMessage
  • Функция convertScreenCoordsToWorld3d переименована в convertScreenCoordsToWorld3D
  • Функция cleoSwitchCarEngine переименована в switchCarEngine
  • Исправлена проверка длины в функциях writeMemory и readMemory
  • Новые функции
    • convert3DCoordsToScreenEx
    • getStructFloatElement
    • setStructFloatElement
    • wasKeyPressed
    • wasKeyReleased
    • getMousewheelDelta
    • consumeWindowMessage
  • Изменения в функциях
    • Память, выделенная с помощью allocateMemory, освобождается при выгрузке скрипта
    • Хендл поиска файлов функции findFirstFile освобождается автоматически сборщиком мусора
    • Функции findFirstFile и findNextFile не возвращают результат выполнения, вместо этого первым аргументом возвращается nil, если поиск был завершён или не может быть начат из-за ошибки
    • Функции findAllRandomCharsInSphere, findAllRandomObjectsInSphere и printHelpString теперь совместимы с SA:MP
    • Функция downloadUrlToFile третьим аргументом принимает калбэк, который будет вызываться, сигнализируя о статусе закачки, таким образом можно отслеживать весь процесс загрузки и в любой момент отменить её
    • Функции callFunction, callMethod принимают динамическое количество аргументов вместо таблицы и в правильном порядке, всегда возвращают значение возврата. Добавилась возможность передачи указателей на значения
    • Добавлен аргумент shootThrough и возврат типа сущности (entityType) в processLineOfSight
    • Изменен тип аргументов и возвращаемых значений convertScreenCoordsToWorld3D, convert3DCoordsToScreen, convertWindowScreenCoordsToGameScreenCoords и convertGameScreenCoordsToWindowScreenCoords на дробный
    • getClipboardText возвращает nil, если буфер обмена пуст или не может быть прочитан. Не нужно указывать размер читаемого текста
  • Удалены опкоды
    • getTextLabelString
    • addTextLabel
    • removeTextLabel
    • getDownloadState
    • releaseDownload
    • callFunctionReturn
    • callMethodReturn
  • Большинство опкодов CLEO заменено встроенными функциями
    • isGameVersionOriginal
    • allocateMemory
    • freeMemory
    • findFirstFile
    • findNextFile
    • findClose
    • findAllRandomCharsInSphere
    • findAllRandomVehiclesInSphere
    • findAllRandomObjectsInSphere
    • getCharPointer
    • getCarPointer
    • getObjectPointer
    • callFunction
    • callMethod
    • storeClosestEntities
    • cleoSwitchCarEngine -> switchCarEngine
    • getTargetBlipCoordinates
    • getCarNumberOfGears
    • getCarCurrentGear
    • isCarSirenOn
    • isCarEngineOn
    • printHelpString
    • printStyledString
    • printString
    • printStringNow
    • getCharPlayerIsTargeting
    • getNameOfVehicleModel
    • testCheat
    • spawnVehicleByCheating
    • getCharPointerHandle
    • getVehiclePointerHandle
    • getObjectPointerHandle
  • Часть опкодов SAMPFUNCS заменена встроенными функциями
    • processLineOfSight
    • getClipboardText
    • convertMatrixToQuaternion
    • getStructElement
    • setStructElement
    • convert3DCoordsToScreen
    • setGameKeyState
    • getCursorPos
    • convertWindowScreenCoordsToGameScreenCoords
    • convertGameScreenCoordsToWindowScreenCoords
    • convertScreenCoordsToWorld3D
    • convertQuaternionToMatrix
    • getModuleHandle
    • getModuleProcAddress
    • setVirtualKeyDown
    • setCharKeyDown
    • setClipboardText
    • downloadUrlToFile
    • isKeyJustPressed
 

FYP

Известный
Автор темы
Администратор
1,757
5,684
небольшое, но важное обновление. повышена стабильность обработки ошибок в скриптах и некоторые исправления.
  • Устранена проблема несовместимости добавленных скриптами GXT-записей с одиночной игрой
  • Глобальные внутренние изменения: общая оптимизация системы событий, улучшена обработка ошибок
  • Исправлен вывод сообщения об ошибке при загрузке скрипта
  • Добавлена возможность создания дополнительных обработчиков событий с помощью новой функции addEventHandler
  • Улучшена работа событий onSystemMessage и onScriptMessage - все сообщения добавляются в очередь и затем обрабатываются, благодаря чему будут обработаны все сообщения и в правильном порядке
 

FYP

Известный
Автор темы
Администратор
1,757
5,684
обновление.
снова добавлена поддержка XP, долгожданные потоки и пара новых функций. в остальном мелкие исправления.
  • Поддержка Windows XP
  • Добавлены скриптовые потоки
  • Исправлена функция doFade
  • Устранён конфликт RakNet-хуков в нескольких скриптах
  • Новые функции isGamePaused, gameClock
  • Новая директива script_properties
  • Исправлен баг, приводящий к ошибкам при использовании функции downloadUrlToFile
  • Теперь по умолчанию все скрипты неактивны во время паузы игры. Эту возможность можно включить отдельно для каждого скрипта (см. script_properties)
 

FYP

Известный
Автор темы
Администратор
1,757
5,684
добавил инсталлер. в него включен плагин, все стандартные lua библиотеки, asi loader, расширение для notepad++ и программа для удаления. при обновлении плагина удалять его не требуется, достаточно просто установить его снова. т.к. расширение для notepad++ теперь внутри установщка, оно больше не будет обновляться в теме разработки.
 

FYP

Известный
Автор темы
Администратор
1,757
5,684
обновление.
из-за многочисленных проблем оно получилось не таким большим, каким должно было стать спустя столько времени с последнего обновления, но тем не менее является достаточно важным, т.к. включает в себя много исправлений и некоторые существенные изменения.
в потоках есть изменения, нарушающие совместимость с предыдущей версией, так что скрипты с использованием потоков придётся обновить.
все изменения здесь: https://www.blast.hk/wiki/moonloader:changelog

что касается этого
1. Если использовать SampSendChat в хуке, то перехватываемое сообщение не покажется в чате. - Хотелось бы это пофиксить.
2. Также хотелось бы, чтобы можно было использовать string.lower(s) для Кириллицы.
1. это баг SAMPFUNCS, который не может быть исправлен со стороны мунлоадера, и он не столь существенный, поэтому пока что остаётся.
2. я посмотрел и разобрался в чем причина отсутствия поддержки кириллицы, и оказалось, что функции для работы со строками в LuaJIT вообще не поддерживают локаль, т.к. у него своя реализация с большущим упором на производительность. лезть переделывать реализацию этих функций нерационально, т.к. это довольно сложно (часть из них целиком написаны на асме) и неизвестно к каким проблемам это может привести. вместо этого лучше использовать какую-нибудь библиотеку для работы с юникодом и иметь все необходимые возможности и даже больше.
 

FYP

Известный
Автор темы
Администратор
1,757
5,684
обновление.
в этой версии добавились две важные концепции, которых мунлоадеру не хватало - система сохранений для одиночной игры и система экспорта. обновлён LuaJIT до последней стабильной версии, фиксы найденных багов, и другие небольшие изменения.
и, в связи с тем, что мунлоадер уже долгое время работает стабильно, он наконец-то перешёл из стадии альфа в стадию бета-тестирования.
список всех изменений: https://www.blast.hk/wiki/moonloader:changelog
 

FYP

Известный
Автор темы
Администратор
1,757
5,684
небольшое обновление. включает важные исправления и несколько новых функций. в установщик добавлена выборочная установка кое-каких скриптов, онлайн установка последних версий samp.lua и moonadditions, и git.
прошу протестировать его, прежде чем опубликую на главной, т.к. из-за обновления внутренних зависимостей могло что-то сломаться.

инсталлер: https://blast.hk/moonloader/files/setup-moonloader-024.exe
архив: https://blast.hk/moonloader/files/moonloader-024.zip

moonloader - changelog | BlastHack — DEV_WIKI(https://blast.hk/wiki/moonloader:changelog)
Новое
Изменения
  • Обновлены внутренние зависимости. Много исправлений и из заметных изменений - добавилась трассировка стека при ошибке в скрипте
  • Функция setVirtualKeyDown теперь поддерживает симуляцию нажатий клавиш мыши
  • Отныне функции-опкоды регистрируются в скрипте сразу же после загрузки файла и проверки его на синтаксические ошибки. Функция isOpcodesAvailable больше не нужна
  • Уменьшен внутренний размер буфера эмулятора SCM-опкодов, благодаря чему снижена потребляемость памяти скриптами
  • Скрипты больше не будут выгружаться автоматически при наличии в них обработчиков событий
Исправления
  • Некоторые внутренние хуки сделаны потокобезопасными для совместимости с внешними модификациями - исправляет рандомные вылеты у некоторых пользователей
  • Устранена проблема загрузки asi-плагинов из подпапки scripts
  • Исправлена неправильная работа функции findAllRandomObjectsInSphere
  • Исправлен баг в RakNet-событиях, приводящий к вылету при возникновении ошибки внутри обработчика
  • Исправлен вылет при вызове функции print без аргументов
  • Исправлены функции загрузки шрифтов и текстур SAMPFUNCS - неудачная загрузка ресурса могла приводить к UB
  • Исправлена выгрузка хэндла поиска файлов - если была использована функция findClose, хэндл освобождался повторно сборщиком мусора
  • Исправлен баг, из-за которого события, зарегистрированные функцией addEventHandler, не засчитывались
  • Функции printStyledString, printString и printStringNow больше не перезаписывают текст друг друга
 

FYP

Известный
Автор темы
Администратор
1,757
5,684
Обновление.
Главными изменениями в этой версии стали значительное улучшение обработки ошибок и полное избавление от зависимости в CLEO. Помимо этого, все опкоды для отображения 2D-элементов на экране из SAMPFUNCS были заменены встроенными функциями, в связи с чем из функций SAMPFUNCS в MoonLoader-е остались только функции для работы с SA-MP и DXUT.
Улучшение обработки ошибок стало возможным благодаря переходу на LuaJIT 2.1.0-beta3, с этого момента MoonLoader гарантирует надёжность обработки всех ошибок в скриптах (за исключением ошибок при прямой работе с памятью процесса) и будет выводить более подробную диагностическую информацию. В LuaJIT 2.1 есть и несколько других полезных изменений.
Безболезненное избавление от зависимости в CLEO стало возможным за счёт переноса системы звуков из CLEO в MoonLoader, поэтому обратная совместимость в скриптах, использующими функции для воспроизведения аудио, не нарушена. Заимствование системы звуков из CLEO было осуществлено с разрешения автора библиотеки, за что её разработчикам отдельная благодарность.

Скомпилированные Lua-скрипты (.luac) для MoonLoader ранних версий не будут работать на этой и следующих, как и наоборот, поэтому убедительная просьба к разработчикам: перекомпилируйте свои скрипты под новую версию или опубликуйте исходник, если есть возможность. Это нужно, чтобы ускорить переход на новую версию и чтобы пользователям не пришлось выбирать между новой и старой.

Новое
Изменения
  • Скрипт будет продолжать исполнение, пока в нём есть работающие потоки, даже если выполнение mainзавершилось и в скрипте нет зарегистрированных событий
  • Вызов script_moonloader будет приводить к завершению скрипта с ошибкой, если версия MoonLoader меньше требуемой
  • Функция isOpcodesAvailable теперь является устаревшей и всегда возвращает true
  • В функцию renderCreateFont добавлен необязательный аргумент charset, позволяющий указать желаемую кодировку
  • В функции renderGetFontDrawTextLength и renderFontDrawText добавлен необязательный аргумент ignoreColorTags, позволяющий отключить парсинг цветовых тегов при обработке текста
  • Функция getGameVersion возвращает более детальную информацию о версии игры
Исправления
  • Устранена проблема с неверным значением PLAYER_PED при загрузке и старте новой игры
  • Восстановлена работа функции doFade
  • Исправлены функции raknetGetRpcName и raknetGetPacketName
  • Исправлена проблема с сохранением ini-файла через модуль inicfg при отсутствии директории config
  • Исправлен баг с чтением строки функцией raknetBitStreamEncodeString
  • Убраны несуществующие возвращаемые значения у функций markCharAsNoLongerNeeded, markCarAsNoLongerNeeded, markObjectAsNoLongerNeeded, dontRemoveChar и dontRemoveObject
  • Исправлен баг из-за которого каждый вызов import приводил к повторному импортированию данных из скрипта
  • Исправлено несрабатывание wasKeyPressed при двойном нажатии клавиш мыши
  • Функции setStructElement и getStructElement всё ещё были зарегистрированы как опкоды, хоть и были заменены встроенными в предыдущих обновлениях
  • У множества функций исправлены типы целочисленных параметров со знаком на беззнаковые
  • Работа 3D-звуков в SA-MP
  • Другие мелкие исправления
 

FYP

Известный
Автор темы
Администратор
1,757
5,684
Обновление с исправлениями проблем последнего обновления.
  • Исправлено зависание игры при запуске у некоторых пользователей
  • Исправлена обработка чёрного цветового тега "{000000}" в renderFontDrawText и других функциях
  • Исправлен баг со скриптовыми потоками, из-за которого потоки без задержек внутри выполнялись дважды
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.