История изменений всех версий плагина MoonLoader

Версия Изменения Дата
.023-beta

Изменения и нововведения:

  • Обновлён LuaJIT до версии 2.0.5
  • Добавлена система взаимодействия между скриптами на основе экспорта и импорта
    • свойство LuaScript.exports для получения экспортов загруженного скрипта
    • функция import для получения экспортов скрипта по названию файла; в т.ч. и загружает скрипт, если он не загружен
    • см. подробно в статье Экспорт
  • Система сохранений для одиночной игры:
    • событие onStartNewGame - срабатывает при начале новой игры
    • событие onLoadGame - срабатывает при загрузке сохранённой игры
    • событие onSaveGame - срабатывает при сохранении игры
  • Добавлена система активной проверки целостности хуков и патчей MoonLoader-а, чтобы можно было отследить нарушения в работе из-за других модов
  • Добавлено автоматическое высвобождение загруженных шрифтов и текстур SAMPFUNCS при завершении работы скрипта
  • Добавлено свойство LuaScript.properties для получения списка свойств скрипта, заданных функцией script_properties
  • Переименовано свойство LuaThread.workInPause в work_in_pause и LuaScript.versionNum в version_num для соответствия стандарту оформления кода
  • Добавлено свойство LuaScript.id, возвращающее уникальный идентификатор скрипта, а также функция script.get для получения скрипта по идентификатору
  • Добавлена директива script_url и свойство LuaScript.url для указания и получения веб-адреса скрипта
  • Добавлены функции encodeJson и decodeJson для преобразования значений Lua в JSON и обратно
  • Добавлены функции для чтения беззнаковых целых чисел в модуль memory
    • Изменён порядок поиска скрипта по названию файла для функции script.load с абсолютный путь → рабочая директория\путь → … на рабочая директория\путь → абсолютный путь → …
  • Изменения в наборе стандартных библиотек:
    • добавлен полный список всех виртуальных клавиш и вспомогательные функции для получения названий и поиска по названиям клавиш
    • добавлен список статусов закачки файла для функции downloadUrlToFile
    • список виртуальных клавиш перенесён в отдельный модуль vkeys.lua, который возвращает таблицу, а не создаёт переменные в глобальной области, однако moonloader.lua автоматически экспортирует все коды клавиш в глобальную область при загрузке для обеспечения совместимости
    • добавлены модуль game/keys.lua со списком игровых клавиш для функций isButtonPressed и setGameKeyState
    • добавлен модуль game/weapons.lua, содержащий список всех оружий и их названий, и функции для получения названия по иду

Исправления:

  • Устранена проблема обновления статусов нажатости клавиш, когда окно игры теряло фокус
  • Исправлена функция loadSpecialCharacter
  • Исправлен пропущенный символ ';' в package.path – это приводило к проблеме загрузки скомпилированных Lua-модулей
  • Исправлен баг регистрации событий, из-за которого можно было регистрировать значение любого типа как событие, что приводило бы к вылету
06.06.2017
.022-alpha
  • Некоторые внутренние изменения для большей совместимости с другими модификациями, добавлены диагностические тесты для выявления конфликтов
  • При падении скрипта из-за ошибки выполнения опкода теперь выводится идентификатор этого опкода
  • Исправлена проблема из-за которой скрипты не работали в фоновом режиме с модом на антипаузу
  • Сам плагин больше не включает в себя ядро Lua, а подключает его через lua51.dll, тем самым позволяя использовать модули уже собранные под Lua 5.1 и LuaJIT 2.0, и собирать их самостоятельно без изменения конфигурации
  • Добавлены пути поиска скомпилированных Lua-скриптов с расширением .luac для функций require и script.load
  • Изменены пути загрузки dll-модулей - по умолчанию dll-модули будут загружаться только из директории moonloader\lib\
  • Событие onWindowMessage больше не имеет возвращаемого параметра processScriptKeyhook, вместо этого функция consumeWindowMessage принимает второй необязательный аргумент, который отвечает за эту возможность
  • При выходе из игры скрипты выгружаются немного раньше полного завершения процесса, это должно избавить от некоторых проблем, которые могли возникнуть при использовании событий onScriptTerminate и onExitScript
  • События onScriptTerminate и onExitScript теперь имеют дополнительный аргумент quitGame, который имеет значение true, если скрипт завершается в связи с выходом из игры
  • Добавлены встроенные константы PLAYER_HANDLE и PLAYER_PED, являющиеся аналогом playerHandle и playerPed
  • Функция localClock возвращает время в зависимости от свойства workInPause потока, из которого была вызвана. Это правило распространяется и на основной поток скрипта
  • Исправлен баг, из-за которого свойство потока workInPause не применялось при перезапуске этого потока функцией lua_thread:run
  • Функция lua_thread.create больше не принимает логическое значение, отвечающее за запуск потока приостановленным
  • Функции lua_thread.create и lua_thread:run принимают переменное количество аргументов для передачи их функции-потоку, вместо таблицы
  • Новая функция lua_thread.create_suspended для запуска потока приостановленным
  • Исправлена регистрация функций sampCreate3dText и sampCreate3dTextEx
12.03.2017
.021-alpha
  • Поддержка Windows XP
  • Исправлена функция doFade
  • Устранён конфликт RakNet-хуков в нескольких скриптах
  • Новые функции isGamePaused, gameClock
  • Новая директива script_properties
  • Исправлен баг, приводящий к ошибкам при использовании функции downloadUrlToFile
  • Теперь по умолчанию все скрипты неактивны во время паузы игры. Эту возможность можно включить отдельно для каждого скрипта (см. script_properties)
23.12.2016
.020-alpha
  • Устранена проблема несовместимости добавленных скриптами GXT-записей с одиночной игрой
  • Глобальные внутренние изменения: общая оптимизация системы событий, улучшена обработка ошибок
  • Исправлен вывод сообщения об ошибке при загрузке скрипта
  • Добавлена возможность создания дополнительных обработчиков событий с помощью новой функции addEventHandler
  • Улучшена работа событий onSystemMessage и onScriptMessage - все сообщения добавляются в очередь и затем обрабатываются, благодаря чему будут обработаны все сообщения и в правильном порядке
26.11.2016
.019-alpha
13.11.2016
.018-alpha
  • Добавлена встроенная библиотека для работы с конфигурационными файлами ini - inicfg
  • Добавлена встроенная библиотека для работы с памятью игры - memory
  • Новое условие, при котором скрипт не будет прерывать работу самостоятельно - если отсутствует сопрограмма main, но есть обработчики событий, то скрипт будет продолжать работу, если его не завершить принудительно
  • Исправлен баг, вызывающий неправильную работу некоторых опкодов
04.10.2016
.017-alpha
20.09.2016
.016-alpha
  • Удалена функция 'chdir'
  • Добавлена возможность сравнения объектов информации о скрипте (напр. thisScript() == script.find("name"))
  • Функция print теперь может выводить значения любого типа
  • Исправлен баг, вызывающий некорректное поведение обработчиков команд чата и консоли
  • Исправлен вызов события 'onExitScript'
  • Исправлена функция 'raknetBitStreamDecodeString'
  • Некоторые функции CLEO были заменены встроенными, внешних различий не имеют, так что полностью совместимы:
    • writeMemory
    • readMemory
    • loadDynamicLibrary
    • freeDynamicLibrary
    • getDynamicLibraryProcedure
    • doesFileExist
    • doesDirectoryExist
    • createDirectory
    • popFloat
30.08.2016
.015-alpha Первый релиз 08.08.2016