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

Версия Изменения Дата
.026.4-beta
  • Исправлены вылеты при старте и выходе из игры на некоторых системах
09.04.2018
.026.3-beta
  • Исправлен баг с обработкой шестизначных цветовых тегов в функциях рендера
  • Устранена проблема с некорректными возвращаемыми значениями некоторых функций рендера при вызове до отрисовки текста/текстуры
30.03.2018
.026.2-beta
  • Исправлен баг, из-за которого создание и уничтожение потоков изнутри других потоков приводило к непредсказуемым последствиям
12.03.2018
.026.1-beta
  • Исправлено зависание игры при запуске у некоторых пользователей
  • Исправлена обработка чёрного цветового тега "{000000}" в renderFontDrawText и других функциях
  • Исправлен баг со скриптовыми потоками, из-за которого потоки без задержек внутри выполнялись дважды
12.03.2018
.026-beta

Новое

Изменения

  • Скрипт будет продолжать исполнение, пока в нём есть работающие потоки, даже если выполнение 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
  • Другие мелкие исправления
11.03.2018
.025-beta

Новое

  • Хук DirectX и события onD3DDeviceLost, onD3DDeviceReset, onD3DPresent
  • Функция memory.strptr для получения адреса памяти на текст Lua-строки
  • Функция getFolderPath для получения путей к пользовательским директориям
  • Функция getTimeStepValue, заменяющая опкоды 0078, 0079, 007A, 007B, 007C, 007D, 007E, 007F, 0080, 0081, 0082 и 0083
  • Функция getD3DDevicePtr, возвращающая адрес на IDirect3DDevice9 игры
  • В дистрибутив включены библиотеки lua-iconv и encoding для работы с различными кодировками текста, и windows, на данный момент включающая только список идентификаторов оконных сообщений

Исправления

  • Исправлены неверные типы возвращаемых значений функций getCharAnimCurrentTime и getCharAnimTotalTime
  • Исправлен сброс параметра work_in_pause при перезапуске активного потока

Изменения

  • Вся инициализация Lua-скрипта осуществляется после загрузки файла и проверки синтаксиса. Благодаря этому загрузка скриптов, завершающаяся ошибкой, будет производится быстрее
18.11.2017
.024-beta

Новое

Изменения

  • Обновлены внутренние зависимости. Много исправлений и из заметных изменений - добавилась трассировка стека при ошибке в скрипте
  • Функция setVirtualKeyDown теперь поддерживает симуляцию нажатий клавиш мыши
  • Отныне функции-опкоды регистрируются в скрипте сразу же после загрузки файла и проверки его на синтаксические ошибки. Функция isOpcodesAvailable больше не нужна
  • Уменьшен внутренний размер буфера эмулятора SCM-опкодов, благодаря чему снижена потребляемость памяти скриптами
  • Скрипты больше не будут выгружаться автоматически при наличии в них обработчиков событий

Исправления

  • Некоторые внутренние хуки сделаны потокобезопасными для совместимости с внешними модификациями - исправляет рандомные вылеты у некоторых пользователей
  • Устранена проблема загрузки asi-плагинов из подпапки scripts
  • Исправлена неправильная работа функции findAllRandomObjectsInSphere
  • Исправлен баг в RakNet-событиях, приводящий к вылету при возникновении ошибки внутри обработчика
  • Исправлен вылет при вызове функции print без аргументов
  • Исправлены функции загрузки шрифтов и текстур SAMPFUNCS - неудачная загрузка ресурса могла приводить к UB
  • Исправлена выгрузка хэндла поиска файлов - если была использована функция findClose, хэндл освобождался повторно сборщиком мусора
  • Исправлен баг, из-за которого события, зарегистрированные функцией addEventHandler, не засчитывались
  • Функции printStyledString, printString и printStringNow больше не перезаписывают текст друг друга
02.11.2017
.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