UjAPI

Источники

nazarpunk, "wc3-random-seed": https://github.com/nazarpunk/wc3-random-seed/tree/master
nazarpunk, "wc3-ujapi": https://github.com/nazarpunk/wc3-ujapi
nazarpunk, "UjAPI + lua: asset" - список ассетов, первые из наработок: https://xgm.guru/p/wc3/ujapi-lua-asset
UjAPI - новый native-функции


Содержание

UjAPI

Содержимое war3map.lua в корне карты и указание путей в require

Обычно это единственная строка require 'MapName.main' или require 'lua.MapName.main'. В разных статьях от nazarpunk упоминаются два таких варианта. От чего зависит, какой путь нужно указать?
Точка заменяется на разделитель путей. Поэтому не нужно использовать точку в пути, если не хочется наткнуться на костыль. Т.е. точка у модулей должна упоминаться только в конце: .lua.

Чем отличаются функции FourCC и StringToId?

Расположенные в файле sdk/types.lua.

Для чего нужен asset RandomSeed?

Или чем оно отличается от стандартных функций GetRandomInt, GetRandomReal? Первое, что я заметил: генерируемые числа изменяются только с входным параметром объекта. При этом, правильно ли я понимаю, что названные стандартные функции абсолютно не требуют создания дополнительных потоков генерации случайных чисел? И для их корректной работы в режиме проверки карты нужно снять галочку "Use Fixed Random Seed".

В UjAPI добавлены функции с Thread

StartThread, StopJassThread, GetJassMainThread, GetJassCurrentThread. Теперь добавлена поддержка многопоточности? Ранее lua, как и jass, так же работал только в режиме одного потока? Поддерживал ли он многопоточность до этого?
Чем могут быть полезны данные функции на практике? Можно, например, привязать логирование к потоку.
Остановка модуля или функции

Поддержка сетевых запросов

Можно обрабатывать большие объемы данные, производить сложные вычисления, а также выполнять интересные алгоритмы с закрытым исходным кодом. Можно также отправить запрос посредством REST API к БД, чтобы сохранять или получать необходимые данные (так можно реализовать систему save/load).

Функции Trace и TraceIII не работают

По-видимому, они отвечают за вывод стека вызовов. В карте они nil, но упоминаются в файлах common.
В целом, проблем с выводом стека вызовов и обработкой ошибок проблем нет.
Однако, проблема заключается в том, что в lua по умолчанию не работают функции из common.ai.j и blizzard.j Функции из blizzard.j в lua.
Функции Trace и TraceIII находятся в common.ai.j, поэтому они могут и не заработать никогда в обычных картах.

Могут ли работать функции из common.ai.j в обычных картах?

Функции Trace и TraceIII не работают

Необходимость документации

Исходя из вопроса Функции Trace и TraceIII не работают не все функции задокументированы.

Остановка модуля или функции

Вызывается с помощью do return end. Функция же StopJassThread для остановки потока не работает. А использование функции StartThread в lua приводит к крашу.

Функции из blizzard.j в lua

Изначально они не работают, нужно подключать в начале с помощью require. Файл blizzard.j.lua в той же папке был скопирован в blizzard.lua во избежание костылей и проблемы с подключением модуля. С другой стороны, нужно эту команду выполнять каждый раз после клонирования и обновления репозитория ujapi. Команды для обновления будут выглядеть теперь следующим образом:

cd /D "D:\Warcraft III\lua"
rmdir /s /q ujapi
git clone https://github.com/nazarpunk/wc3-ujapi.git ujapi
copy ujapi\sdk\blizzard.j.lua ujapi\sdk\blizzard.lua

Тогда подключение возможно: require 'ujapi.sdk.blizzard'.
Костыльный же способ был добавлен кодом в модуль module_load тестов, но не опробован, в связи с тем, что код старый, вызовы в нем были deprecated, и не было желания даже протестировать его.

Замеры производительности

Функции GetLocalTime, GetSystemTime могут измерять с точностью до миллисекунды.
В Lua есть альтернативы: os.time и os.clock.

Очистка мусора

Есть ли возможность сделать обнуление всех хендлов в карте? Как утечек, так и записанных в глобальные переменные.


Ссылки

Картостроение


Теги

#theme #warcraft3/картостроение/вопросы