История всех версий плагина MoonLoader
Дата: 05.06.2018
Дата: 09.04.2018
- Исправлены вылеты при старте и выходе из игры на некоторых системах
Дата: 30.03.2018
- Исправлен баг с обработкой шестизначных цветовых тегов в функциях рендера
- Устранена проблема с некорректными возвращаемыми значениями некоторых функций рендера при вызове до отрисовки текста/текстуры
Дата: 12.03.2018
- Исправлен баг, из-за которого создание и уничтожение потоков изнутри других потоков приводило к непредсказуемым последствиям
Дата: 12.03.2018
- Исправлено зависание игры при запуске у некоторых пользователей
- Исправлена обработка чёрного цветового тега "{000000}" в renderFontDrawText и других функциях
- Исправлен баг со скриптовыми потоками, из-за которого потоки без задержек внутри выполнялись дважды
Дата: 11.03.2018
- Обновлён LuaJIT до версии 2.1.0-beta3. Список изменений: https://blast.hk/moonloader/luajit/changes.html
- Значительно улучшена обработка ошибок
- Опкоды CLEO для работы с аудиофайлами заменены встроенными функциями
- Опкоды SAMPFUNCS для рисования 2D-элементов на экране заменены встроенными функциями
- При загрузке и старте новой игры, если игра уже начата, все загруженные скрипты будут автоматически перезагружены, за исключением тех, у которых задано свойство
forced-reloading-only
- Добавлены функции loadAudioStreamFromMemory и load3dAudioStreamFromMemory для загрузки аудиофайлов из памяти
- Функция renderGetFontCharIndexAt для получения номера символа в строке по смещению в пикселях от начала строки
- Функция renderGetFontCharWidth, возвращающая ширину символа в пикселях
- Функции getGameGlobalFloat и setGameGlobalFloat для чтения и записи дробных глобальных переменных
- Функции getObjectQuaternion, setObjectQuaternion, getVehicleQuaternion, setVehicleQuaternion, getCharQuaternion, setCharQuaternion для получения и изменения вращения объектов, транспорта и персонажей. Существующие опкоды были заменены встроенными функциями
- Скрипт будет продолжать исполнение, пока в нём есть работающие потоки, даже если выполнение main завершилось и в скрипте нет зарегистрированных событий
- Вызов script_moonloader будет приводить к завершению скрипта с ошибкой, если версия MoonLoader меньше требуемой
- Функция isOpcodesAvailable теперь является устаревшей и всегда возвращает
true
- В функцию renderCreateFont добавлен необязательный аргумент
charset
, позволяющий указать желаемую кодировку
- В функции renderGetFontDrawTextLength и renderFontDrawText добавлен необязательный аргумент
ignoreColorTags
, позволяющий отключить парсинг цветовых тегов при обработке текста
- Функция getGameVersion возвращает более детальную информацию о версии игры
Дата: 18.11.2017
- Хук 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, на данный момент включающая только список идентификаторов оконных сообщений
- Вся инициализация Lua-скрипта осуществляется после загрузки файла и проверки синтаксиса. Благодаря этому загрузка скриптов, завершающаяся ошибкой, будет производится быстрее
Дата: 02.11.2017
- Обновлены внутренние зависимости. Много исправлений и из заметных изменений - добавилась трассировка стека при ошибке в скрипте
- Функция setVirtualKeyDown теперь поддерживает симуляцию нажатий клавиш мыши
- Отныне функции-опкоды регистрируются в скрипте сразу же после загрузки файла и проверки его на синтаксические ошибки. Функция isOpcodesAvailable больше не нужна
- Уменьшен внутренний размер буфера эмулятора SCM-опкодов, благодаря чему снижена потребляемость памяти скриптами
- Скрипты больше не будут выгружаться автоматически при наличии в них обработчиков событий
- Некоторые внутренние хуки сделаны потокобезопасными для совместимости с внешними модификациями - исправляет рандомные вылеты у некоторых пользователей
- Устранена проблема загрузки asi-плагинов из подпапки
scripts
- Исправлена неправильная работа функции findAllRandomObjectsInSphere
- Исправлен баг в RakNet-событиях, приводящий к вылету при возникновении ошибки внутри обработчика
- Исправлен вылет при вызове функции print без аргументов
- Исправлены функции загрузки шрифтов и текстур SAMPFUNCS - неудачная загрузка ресурса могла приводить к UB
- Исправлена выгрузка хэндла поиска файлов - если была использована функция findClose, хэндл освобождался повторно сборщиком мусора
- Исправлен баг, из-за которого события, зарегистрированные функцией addEventHandler, не засчитывались
- Функции printStyledString, printString и printStringNow больше не перезаписывают текст друг друга
Дата: 06.06.2017
- Обновлён 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-модулей
- Исправлен баг регистрации событий, из-за которого можно было регистрировать значение любого типа как событие, что приводило бы к вылету
Дата: 12.03.2017
- Некоторые внутренние изменения для большей совместимости с другими модификациями, добавлены диагностические тесты для выявления конфликтов
- При падении скрипта из-за ошибки выполнения опкода теперь выводится идентификатор этого опкода
- Исправлена проблема из-за которой скрипты не работали в фоновом режиме с модом на антипаузу
- Сам плагин больше не включает в себя ядро 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
Дата: 23.12.2016
Дата: 26.11.2016
- Устранена проблема несовместимости добавленных скриптами GXT-записей с одиночной игрой
- Глобальные внутренние изменения: общая оптимизация системы событий, улучшена обработка ошибок
- Исправлен вывод сообщения об ошибке при загрузке скрипта
- Добавлена возможность создания дополнительных обработчиков событий с помощью новой функции addEventHandler
- Улучшена работа событий onSystemMessage и onScriptMessage - все сообщения добавляются в очередь и затем обрабатываются, благодаря чему будут обработаны все сообщения и в правильном порядке
Дата: 13.11.2016
- Добавлена функция fill в модуль memory
- Добавлено событие оконных сообщений onWindowMessage
- Функция convertScreenCoordsToWorld3d переименована в convertScreenCoordsToWorld3D
- Функция cleoSwitchCarEngine переименована в switchCarEngine
- Исправлена проверка длины в функциях writeMemory и readMemory
- Новые функции
- Изменения в функциях
- Память, выделенная с помощью 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 заменено встроенными функциями
- Часть опкодов SAMPFUNCS заменена встроенными функциями
Дата: 04.10.2016
- Добавлена встроенная библиотека для работы с конфигурационными файлами ini - inicfg
- Добавлена встроенная библиотека для работы с памятью игры - memory
- Новое условие, при котором скрипт не будет прерывать работу самостоятельно - если отсутствует сопрограмма main, но есть обработчики событий, то скрипт будет продолжать работу, если его не завершить принудительно
- Исправлен баг, вызывающий неправильную работу некоторых опкодов
Дата: 20.09.2016
- Исправлены неверные аргументы функций:
- Исправлен баг функции dxutCreateDialog - было невозможно создать диалог
Дата: 30.08.2016
- Удалена функция
chdir
- Добавлена возможность сравнения объектов информации о скрипте (напр.
thisScript() == script.find("name")
)
- Функция print теперь может выводить значения любого типа
- Исправлен баг, вызывающий некорректное поведение обработчиков команд чата и консоли
- Исправлен вызов события
onExitScript
- Исправлена функция
raknetBitStreamDecodeString
- Некоторые функции CLEO были заменены встроенными, внешних различий не имеют, так что полностью совместимы:
- writeMemory
- readMemory
- loadDynamicLibrary
- freeDynamicLibrary
- getDynamicLibraryProcedure
- doesFileExist
- doesDirectoryExist
- createDirectory
- popFloat
Дата: 08.08.2016