Добавлен , опубликован
Warcraft III - Lua - это модификация, позволяющая встраивать lua script'ы в свои карты. Некоторый стандартный функционал lua был ограничен в целях безопасности пользователей и игроков. В силу различий JASS и lua, некоторые нативные функции Warcraft III могут работать некорректно. Вы имеете возможность поспособствовать развитию проекта, написав об ошибках и багах.

Текущая версия: 1.3.7 (Blight)
Версия lua: 5.4.4
Поддерживаемый патч игры: 1.24e/1.26a/1.27a/1.27b/1.28f Патчи выше 1.26a нуждаются в дополнительных тестах.
Список изменений
  • 1.3.7 (Brlight) - исправлен баг с постоянной утечкой памяти lua потоков из-за особенности самого lua (спасибо за наводку, nazarpunk), добавлен префикс к lua ошибкам в случае запуска игры через UjAPI.
  • 1.3.6 (Brlight) - нативные функции могут использоваться из handle'ов, сами же handle'ы реализованы в виде таблицы (спасибо, Kokomi), что позволяет производить обращения по типу:
Player(0):CreateUnit(FourCC('Hpal'), 0, 0, 0):KillUnit()
-- Вместо
KillUnit(CreateUnit(Player(0), FourCC('Hpal'), 0, 0, 0))
  • 1.3.5 (Brlight) - добавлена поддержка UjAPI и всех jass native'ок, которые он с собой приносит. Добавлена возможность чтения JASS переменных, вплоть до переменных, объявленных в карте. Исправлен баг с остановкой триггера/таймера, в котором была допущена ошибка, теперь игра не вылетает. Сделан корректный конвертер float значений в jReal. Исправлен баг с пропажей аргументов. Исправлена утечка памяти, вызванная в случае использования анонимок при регистрации триггеров, таймеров и т.д. Изменён формат вывода оповещений. Добавлена возможность выводить цветной текст в консоль, посредством использования цветового кода как в самой игре. Теперь вместо любого типа, являющегося handle'ом (unit, location, widget...), может использоваться непосредственно тип handle, который возвращается во время обращения к JASS переменным. В случае такого использования, вам будет выводиться уведомление о преобразовании, при условии, что вы находитесь в dev режиме. При необходимости, вы можете отключить эти уведомления, прописав параметр -nowarnings. Чтобы использовать мод как модуль к UjAPI, разместите его по пути "UjAPI\UjAPIFiles\Modules". Если же вы хотите обойтись без UjAPI, вы можете сменить расширение с dll на mix и поместить мод в папку с игрой, однако вы не сможете использовать новые функции UjAPI без его непосредственного участия.
...
  • 1.2.9 (Outland) - добавлена поддержка других патчей. Добавлена функция GetMapFileName(bool flag), возвращающая путь файла карты относительно папки игры, если flag равен true, и имя файла карты, если false.
  • 1.1.9 (Outland) - StormOpenFile заменен на StormOpenFileEx, чтобы исправить ошибку с поиском файлов на локальном диске, когда нам нужно открыть файл из mpq. Также был добавлен режим для require, который позволяет использовать точку в пути вместо \\ (идея от Kirill78, все жалобы к нему 😀 ).
  • 1.1.8 (Outland) - фикс бага в "dofile". Lua-функция "loadfile" теперь также переписана, как и "dofile".
  • 1.1.7 (Outland) - Lua-функция "dofile" переписана. Теперь она работает в 2-х режимах:
    1. Режим по умолчанию: файлы выполняются только из mpq архивов;
    2. Режим разработчика: файлы выполняются как из mpq архивов, так и из папки с игрой.
  • 1.1.6 (Outland) - убраны фреймы (ненадолго). Исправлены баг с произвольным вылетом, в случае использования анонимок. Добавлен автоматический парсер нативок JASS, а также типов. Добавлена типизация для нативок JASS (бережёного код бережёт), а также псевдо-наследование. Исправлен баг с некорректной передачей аргументов при вызове нативок JASS. Исправлен баг со stacktrace'ом, теперь он действительно отображается. Добавлена возможность подключения с помощью мемхака. И т.д. (я просто уже забыл часть того, что наворотил). P.s. ждём новых нативок для JASS. 😉
  • 1.1.4 (Ashenvale) - добавлены фреймы. Добавлен режим разработчика (-dev) со снятыми на lua ограничениями. Добавлен заперт на подключение к пользователям без мода и наоборот. Добавлен фикс широкоформатных экранов. Изменена карта-пример.
  • 1.1.3 (Beta) - оптимизирован код преобразования float2jReal. Исправлен вылет после попытки запуска триггера с ошибкой. Добавлен stack trace и всплывающее сообщение. Добавлено сообщение о критической ошибке, а именно отсутствие необходимого количества аргументов, при попытке вызова стандартных функций Warcraft III . Исправлена ошибка, из-за которой мог произойти десинк, так как сборщик мусора поспешно удалял значения. Исправлена ошибка с потерей аргументов во время переадресации вызова lua2jassnative.
Как и писал N1ghtSiren, вы можете добавить параметры запуска в JNGP, что позволит вам использовать скрипты из директории Warcraft III. Таким образом вы сможете работать со скриптами в отдельной среде, к примеру Visual Studio Code или Sublime Text. Приложенный им wehack.lua.
Установка
Чтобы использовать мод как модуль к UjAPI, разместите его по пути "UjAPI\UjAPIFiles\Modules". Если же вы хотите обойтись без UjAPI, вы можете сменить расширение с dll на mix и поместить мод в папку с игрой, однако вы не сможете использовать новые функции UjAPI без его непосредственного участия.
Инструкция по эксплуатации
  1. Создать в карте (её архиве) папку Scripts. В неё перенесите blizzard.lua и common.lua. (Необязательно, позволяет использовать стандартные константы blizzard.j, common.j)
  2. Поместить ваш lua script в архив карты. Обязательно переименуйте его в war3map.lua!
  3. Наслаждайтесь игрой.
Для отображения консоли, запускайте Warcraft с параметром -console.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
36
Vladimir TVK, извини, я не клоун. А вот ты Токсичный, мерзкий милишник, который кроме оскорбленния больше ничем ответить не в состоянии.
33
Ev3nt, Свяжись со мной, обнаружен ряд проблем надо вместе поработать.
раскрыть
  1. Ты вырезал dofile? или я не пойму как его использовать
  2. Не работает print в чате игры, и вообще надо всю консоль перенаправить в чат
  3. Запакованная карта, не сохраняется в WE
  4. Карта приложенная в архив частично битая, если её распаковать и запаковать, то она не запускается вообще
Тут скорее всего я что-то делаю не так, но нужно, чтобы ты подсказал ну и пожелания на будущее:
  1. Наверное надо переименовать blizzard и common из папки скриптс, потому что это конфликтует с подсветкой синтаксиса луа из рефа+ автозаполнение...
  2. Разумеется нужно добавить весь мемхак, без него это кусок чистого (+ мышка) 1.26 на луа - бесполезный кусок.... г.., не знаю как тебя помочь тут
  3. Добавить запаковку / распаковку, я слабый и в ряд ли сам смогу, просто без режима папки это будет рак, писать скрипты в 1 единственный файл war3map.lua такое себе занятие. Можно всё украсть отсюда

Ещё вот что заметил, Command Button Effect Utility Functions и прочего нет в 1.26 или мемхаке

Разобрался с подсветкой, это у меня просто руки были кривые
Загруженные файлы
19
Bergi_Bear, постараюсь вечером выйти на связь. Спасибо за фидбек.

Да, dofile я выключил, но ты всегда можешь подключать другие скрипты путём require. Они грузятся из архива карты.
20
Ev3nt, все таки и эту штуку оставил. Земля пухом нормальному алгоритму контрольки
4
Создать в карте (её архиве) папку Scripts. В неё перенесите blizzard.lua и common.lua. (Необязательно, позволяет использовать стандартные константы blizzard.j, common.j)
Поместить ваш lua script в архив карты. Обязательно переименуйте его в war3map.lua!
подскажите нупу что значит то "создать в архиве"?. Это как?
19
SomnusUltima, используя MpqEdtior или что-то с таким же функционалом.
Загруженные файлы
22
Вопрос к автору: А как вы сделали, чтобы старый варик распознавал файлы common.lua и blizzard.lua именно как код, а не простой текст с неизвестным назначением? Неужели в варике были изначально прописаны такие команды для распознавания?
19
EugeAl, нет. Это стандартный функционал lua, я просто чуть-чуть откорректировал функции, чтобы файлы читались из карты.
22
Ev3nt, Но ведь патч 1.26 не поддерживает lua. Только jass. Не рефоржед, обычный. Или всё же поддерживает? Не пойму что то.
22
Ev3nt, Вот, мне это и интересно. Что за магия?) Это ведь по идее, надо менять исходный код, чтобы прописать туда нужные команды... И по аналогии, возможно ли таким макаром присобачить к варику плагины для других ЯП? Например, жабы или питона (java, python) или ещё чего нибудь? Или сделать мультиязыковой плагин?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.